summaryrefslogtreecommitdiff
path: root/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh')
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties4
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspection.java67
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/OverlyStrongTypeCastInspection.java3
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToCatchBlockParameterInspection.java57
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToLambdaParameterInspection.java58
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToMethodParameterInspection.java135
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/BaseAssignmentToParameterInspection.java141
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/ThrowableResultOfMethodCallIgnoredInspection.java8
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ScopeUtils.java5
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/fixes/ExtractParameterAsLocalVariableFix.java18
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/TypeParameterExtendsFinalClassInspection.java38
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/SimplifiableIfStatementInspection.java65
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/TodoCommentInspection.java48
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/TodoUtil.java42
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/serialization/SerializableInnerClassHasSerialVersionUIDFieldVisitor.java14
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/serialization/SerializableInnerClassWithNonSerializableOuterClassVisitor.java14
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessaryThisInspection.java4
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/AccessToNonThreadSafeStaticFieldFromInstanceInspectionBase.java6
18 files changed, 395 insertions, 332 deletions
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
index 04419fb871e9..efeb65889a93 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties
@@ -2093,4 +2093,6 @@ bigdecimal.legacy.method.quickfix=Use 'RoundingMode' enum constant
serializable.stores.non.serializable.display.name=Serializable object implicitly stores non-Serializable object
serializable.lambda.stores.non.serializable.problem.descriptor=Serializable lambda implicitly stores non-Serializable object of type ''{0}''
serializable.local.class.stores.non.serializable.problem.descriptor=Serializable local class ''{1}'' implicitly stores non-Serializable object of type ''{0}''
-serializable.anonymous.class.stores.non.serializable.problem.descriptor=Serializable anonymous class implicitly stores non-Serializable object of type ''{0}'' \ No newline at end of file
+serializable.anonymous.class.stores.non.serializable.problem.descriptor=Serializable anonymous class implicitly stores non-Serializable object of type ''{0}''
+assignment.to.lambda.parameter.display.name=Assignment to lambda parameter
+assignment.to.lambda.parameter.problem.descriptor=Assignment to lambda parameter <code>#ref</code> #loc
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspection.java
index 1b079275a49f..8be9ce07a5ef 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspection.java
@@ -27,6 +27,7 @@ import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.ui.DocumentAdapter;
+import com.intellij.util.ReflectionUtil;
import com.intellij.util.ui.UIUtil;
import com.siyeh.ig.telemetry.InspectionGadgetsTelemetry;
import org.jetbrains.annotations.Nls;
@@ -37,7 +38,6 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.text.Document;
-import java.lang.reflect.Field;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.List;
@@ -104,46 +104,33 @@ public abstract class BaseInspection extends BaseJavaBatchLocalInspectionTool {
return visitor;
}
- protected JFormattedTextField prepareNumberEditor(@NonNls String fieldName) {
- try {
- final NumberFormat formatter = NumberFormat.getIntegerInstance();
- formatter.setParseIntegerOnly(true);
- final JFormattedTextField valueField = new JFormattedTextField(formatter);
- final Field field = getClass().getField(fieldName);
- valueField.setValue(field.get(this));
- valueField.setColumns(2);
-
- // hack to work around text field becoming unusably small sometimes when using GridBagLayout
- valueField.setMinimumSize(valueField.getPreferredSize());
-
- UIUtil.fixFormattedField(valueField);
- final Document document = valueField.getDocument();
- document.addDocumentListener(new DocumentAdapter() {
- @Override
- public void textChanged(DocumentEvent evt) {
- try {
- valueField.commitEdit();
- final Number number = (Number)valueField.getValue();
- field.set(BaseInspection.this,
- Integer.valueOf(number.intValue()));
- }
- catch (IllegalAccessException e) {
- LOG.error(e);
- }
- catch (ParseException e) {
- // No luck this time. Will update the field when correct value is entered.
- }
+ protected JFormattedTextField prepareNumberEditor(@NonNls final String fieldName) {
+ final NumberFormat formatter = NumberFormat.getIntegerInstance();
+ formatter.setParseIntegerOnly(true);
+ final JFormattedTextField valueField = new JFormattedTextField(formatter);
+ Object value = ReflectionUtil.getField(getClass(), this, null, fieldName);
+ valueField.setValue(value);
+ valueField.setColumns(2);
+
+ // hack to work around text field becoming unusably small sometimes when using GridBagLayout
+ valueField.setMinimumSize(valueField.getPreferredSize());
+
+ UIUtil.fixFormattedField(valueField);
+ final Document document = valueField.getDocument();
+ document.addDocumentListener(new DocumentAdapter() {
+ @Override
+ public void textChanged(DocumentEvent evt) {
+ try {
+ valueField.commitEdit();
+ final Number number = (Number)valueField.getValue();
+ ReflectionUtil.setField(BaseInspection.this.getClass(), BaseInspection.this, int.class, fieldName, number.intValue());
}
- });
- return valueField;
- }
- catch (NoSuchFieldException e) {
- LOG.error(e);
- }
- catch (IllegalAccessException e) {
- LOG.error(e);
- }
- return null;
+ catch (ParseException e) {
+ // No luck this time. Will update the field when correct value is entered.
+ }
+ }
+ });
+ return valueField;
}
protected static void parseString(String string, List<String>... outs) {
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/OverlyStrongTypeCastInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/OverlyStrongTypeCastInspection.java
index bf185ea030ce..e979a678c4d8 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/OverlyStrongTypeCastInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/OverlyStrongTypeCastInspection.java
@@ -175,6 +175,9 @@ public class OverlyStrongTypeCastInspection extends BaseInspection {
if (castTypeElement == null) {
return;
}
+ if (operand instanceof PsiFunctionalExpression && !LambdaUtil.isFunctionalType(expectedType)) {
+ return;
+ }
registerError(castTypeElement, expectedType);
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToCatchBlockParameterInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToCatchBlockParameterInspection.java
index 3eb05ecc5a26..737996ed64dd 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToCatchBlockParameterInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToCatchBlockParameterInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2010 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2014 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,68 +15,27 @@
*/
package com.siyeh.ig.assignment;
-import com.intellij.psi.*;
+import com.intellij.psi.PsiCatchSection;
+import com.intellij.psi.PsiElement;
import com.siyeh.InspectionGadgetsBundle;
-import com.siyeh.ig.BaseInspection;
-import com.siyeh.ig.BaseInspectionVisitor;
-import com.siyeh.ig.InspectionGadgetsFix;
-import com.siyeh.ig.fixes.ExtractParameterAsLocalVariableFix;
-import com.siyeh.ig.psiutils.WellFormednessUtils;
import org.jetbrains.annotations.NotNull;
-public class AssignmentToCatchBlockParameterInspection
- extends BaseInspection {
+public class AssignmentToCatchBlockParameterInspection extends BaseAssignmentToParameterInspection {
@Override
@NotNull
public String getDisplayName() {
- return InspectionGadgetsBundle.message(
- "assignment.to.catch.block.parameter.display.name");
+ return InspectionGadgetsBundle.message("assignment.to.catch.block.parameter.display.name");
}
@Override
@NotNull
public String buildErrorString(Object... infos) {
- return InspectionGadgetsBundle.message(
- "assignment.to.catch.block.parameter.problem.descriptor");
+ return InspectionGadgetsBundle.message("assignment.to.catch.block.parameter.problem.descriptor");
}
@Override
- protected InspectionGadgetsFix buildFix(Object... infos) {
- return new ExtractParameterAsLocalVariableFix();
- }
-
- @Override
- public BaseInspectionVisitor buildVisitor() {
- return new AssignmentToCatchBlockParameterVisitor();
- }
-
- private static class AssignmentToCatchBlockParameterVisitor
- extends BaseInspectionVisitor {
-
- @Override
- public void visitAssignmentExpression(
- @NotNull PsiAssignmentExpression expression) {
- super.visitAssignmentExpression(expression);
- if (!WellFormednessUtils.isWellFormed(expression)) {
- return;
- }
- final PsiExpression lhs = expression.getLExpression();
- if (!(lhs instanceof PsiReferenceExpression)) {
- return;
- }
- final PsiReferenceExpression reference =
- (PsiReferenceExpression)lhs;
- final PsiElement variable = reference.resolve();
- if (!(variable instanceof PsiParameter)) {
- return;
- }
- final PsiParameter parameter = (PsiParameter)variable;
- final PsiElement declarationScope = parameter.getDeclarationScope();
- if (!(declarationScope instanceof PsiCatchSection)) {
- return;
- }
- registerError(lhs);
- }
+ protected boolean isCorrectScope(PsiElement declarationScope) {
+ return declarationScope instanceof PsiCatchSection;
}
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToLambdaParameterInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToLambdaParameterInspection.java
new file mode 100644
index 000000000000..4694a0152e12
--- /dev/null
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToLambdaParameterInspection.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2000-2014 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.siyeh.ig.assignment;
+
+import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiLambdaExpression;
+import com.intellij.psi.PsiLocalVariable;
+import com.siyeh.InspectionGadgetsBundle;
+import org.jetbrains.annotations.Nls;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+
+/**
+ * @author Bas Leijdekkers
+ */
+public class AssignmentToLambdaParameterInspection extends BaseAssignmentToParameterInspection {
+
+ @Nls
+ @NotNull
+ @Override
+ public String getDisplayName() {
+ return InspectionGadgetsBundle.message("assignment.to.lambda.parameter.display.name");
+ }
+
+ @NotNull
+ @Override
+ protected String buildErrorString(Object... infos) {
+ return InspectionGadgetsBundle.message("assignment.to.lambda.parameter.problem.descriptor");
+ }
+
+ @Override
+ @Nullable
+ public JComponent createOptionsPanel() {
+ return new SingleCheckboxOptionsPanel(InspectionGadgetsBundle.message(
+ "assignment.to.method.parameter.ignore.transformation.option"), this, "ignoreTransformationOfOriginalParameter");
+ }
+
+ @Override
+ protected boolean isCorrectScope(PsiElement declarationScope) {
+ return declarationScope instanceof PsiLambdaExpression;
+ }
+}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToMethodParameterInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToMethodParameterInspection.java
index ae616c40d42a..56dbecc83d6b 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToMethodParameterInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/AssignmentToMethodParameterInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2009 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2014 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,22 +15,16 @@
*/
package com.siyeh.ig.assignment;
-import com.intellij.psi.*;
-import com.intellij.psi.tree.IElementType;
import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiMethod;
import com.siyeh.InspectionGadgetsBundle;
-import com.siyeh.ig.BaseInspection;
-import com.siyeh.ig.BaseInspectionVisitor;
-import com.siyeh.ig.InspectionGadgetsFix;
-import com.siyeh.ig.fixes.ExtractParameterAsLocalVariableFix;
-import com.siyeh.ig.psiutils.VariableAccessUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
-public class AssignmentToMethodParameterInspection
- extends BaseInspection {
+public class AssignmentToMethodParameterInspection extends BaseAssignmentToParameterInspection {
@SuppressWarnings({"PublicField"})
public boolean ignoreTransformationOfOriginalParameter = false;
@@ -38,134 +32,23 @@ public class AssignmentToMethodParameterInspection
@Override
@NotNull
public String getDisplayName() {
- return InspectionGadgetsBundle.message(
- "assignment.to.method.parameter.display.name");
+ return InspectionGadgetsBundle.message("assignment.to.method.parameter.display.name");
}
@Override
@NotNull
public String buildErrorString(Object... infos) {
- return InspectionGadgetsBundle.message(
- "assignment.to.method.parameter.problem.descriptor");
+ return InspectionGadgetsBundle.message("assignment.to.method.parameter.problem.descriptor");
}
@Override
@Nullable
public JComponent createOptionsPanel() {
return new SingleCheckboxOptionsPanel(InspectionGadgetsBundle.message(
- "assignment.to.method.parameter.ignore.transformation.option"), this,
- "ignoreTransformationOfOriginalParameter");
+ "assignment.to.method.parameter.ignore.transformation.option"), this, "ignoreTransformationOfOriginalParameter");
}
- @Override
- protected InspectionGadgetsFix buildFix(Object... infos) {
- return new ExtractParameterAsLocalVariableFix();
- }
-
- @Override
- public BaseInspectionVisitor buildVisitor() {
- return new AssignmentToMethodParameterVisitor();
- }
-
- private class AssignmentToMethodParameterVisitor
- extends BaseInspectionVisitor {
-
- @Override
- public void visitAssignmentExpression(
- @NotNull PsiAssignmentExpression expression) {
- super.visitAssignmentExpression(expression);
- final PsiExpression lhs = expression.getLExpression();
- final PsiParameter parameter = getMethodParameter(lhs);
- if (parameter == null) {
- return;
- }
- if (ignoreTransformationOfOriginalParameter) {
- final PsiExpression rhs = expression.getRExpression();
- if (rhs != null && VariableAccessUtils.variableIsUsed(parameter, rhs)) {
- return;
- }
- final IElementType tokenType =
- expression.getOperationTokenType();
- if (tokenType == JavaTokenType.PLUSEQ ||
- tokenType == JavaTokenType.MINUSEQ ||
- tokenType == JavaTokenType.ASTERISKEQ ||
- tokenType == JavaTokenType.DIVEQ ||
- tokenType == JavaTokenType.ANDEQ ||
- tokenType == JavaTokenType.OREQ ||
- tokenType == JavaTokenType.XOREQ ||
- tokenType == JavaTokenType.PERCEQ ||
- tokenType == JavaTokenType.LTLTEQ ||
- tokenType == JavaTokenType.GTGTEQ ||
- tokenType == JavaTokenType.GTGTGTEQ) {
- return;
- }
- }
- registerError(lhs);
- }
-
- @Override
- public void visitPrefixExpression(
- @NotNull PsiPrefixExpression expression) {
- if (ignoreTransformationOfOriginalParameter) {
- return;
- }
- super.visitPrefixExpression(expression);
- final IElementType tokenType = expression.getOperationTokenType();
- if (!tokenType.equals(JavaTokenType.PLUSPLUS) &&
- !tokenType.equals(JavaTokenType.MINUSMINUS)) {
- return;
- }
- final PsiExpression operand = expression.getOperand();
- if (operand == null) {
- return;
- }
- final PsiParameter parameter = getMethodParameter(operand);
- if (parameter == null) {
- return;
- }
- registerError(operand);
- }
-
- @Override
- public void visitPostfixExpression(
- @NotNull PsiPostfixExpression expression) {
- if (ignoreTransformationOfOriginalParameter) {
- return;
- }
- super.visitPostfixExpression(expression);
- final IElementType tokenType = expression.getOperationTokenType();
- if (!tokenType.equals(JavaTokenType.PLUSPLUS) &&
- !tokenType.equals(JavaTokenType.MINUSMINUS)) {
- return;
- }
- final PsiExpression operand = expression.getOperand();
- final PsiParameter parameter = getMethodParameter(operand);
- if (parameter == null) {
- return;
- }
- registerError(operand);
- }
-
- @Nullable
- private PsiParameter getMethodParameter(PsiExpression expression) {
- if (!(expression instanceof PsiReferenceExpression)) {
- return null;
- }
- final PsiReferenceExpression referenceExpression =
- (PsiReferenceExpression)expression;
- final PsiElement variable = referenceExpression.resolve();
- if (!(variable instanceof PsiParameter)) {
- return null;
- }
- final PsiParameter parameter = (PsiParameter)variable;
- final PsiElement declarationScope = parameter.getDeclarationScope();
- if (declarationScope instanceof PsiCatchSection) {
- return null;
- }
- if (declarationScope instanceof PsiForeachStatement) {
- return null;
- }
- return parameter;
- }
+ protected boolean isCorrectScope(PsiElement declarationScope) {
+ return declarationScope instanceof PsiMethod;
}
} \ No newline at end of file
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/BaseAssignmentToParameterInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/BaseAssignmentToParameterInspection.java
new file mode 100644
index 000000000000..7f27c6bf762a
--- /dev/null
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/assignment/BaseAssignmentToParameterInspection.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2000-2014 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.siyeh.ig.assignment;
+
+import com.intellij.psi.*;
+import com.intellij.psi.tree.IElementType;
+import com.siyeh.ig.BaseInspection;
+import com.siyeh.ig.BaseInspectionVisitor;
+import com.siyeh.ig.InspectionGadgetsFix;
+import com.siyeh.ig.fixes.ExtractParameterAsLocalVariableFix;
+import com.siyeh.ig.psiutils.ParenthesesUtils;
+import com.siyeh.ig.psiutils.VariableAccessUtils;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Bas Leijdekkers
+ */
+public abstract class BaseAssignmentToParameterInspection extends BaseInspection {
+
+ @SuppressWarnings({"PublicField"})
+ public boolean ignoreTransformationOfOriginalParameter = false;
+
+ @Override
+ protected InspectionGadgetsFix buildFix(Object... infos) {
+ return new ExtractParameterAsLocalVariableFix();
+ }
+
+ protected abstract boolean isCorrectScope(PsiElement declarationScope);
+
+ @Override
+ public final BaseInspectionVisitor buildVisitor() {
+ return new AssignmentToParameterVisitor();
+ }
+
+ private class AssignmentToParameterVisitor extends BaseInspectionVisitor {
+
+ @Override
+ public void visitAssignmentExpression(@NotNull PsiAssignmentExpression expression) {
+ super.visitAssignmentExpression(expression);
+ final PsiExpression lhs = expression.getLExpression();
+ final PsiParameter parameter = getParameter(lhs);
+ if (parameter == null) {
+ return;
+ }
+ if (ignoreTransformationOfOriginalParameter) {
+ final PsiExpression rhs = expression.getRExpression();
+ if (rhs != null && VariableAccessUtils.variableIsUsed(parameter, rhs)) {
+ return;
+ }
+ final IElementType tokenType =
+ expression.getOperationTokenType();
+ if (tokenType == JavaTokenType.PLUSEQ ||
+ tokenType == JavaTokenType.MINUSEQ ||
+ tokenType == JavaTokenType.ASTERISKEQ ||
+ tokenType == JavaTokenType.DIVEQ ||
+ tokenType == JavaTokenType.ANDEQ ||
+ tokenType == JavaTokenType.OREQ ||
+ tokenType == JavaTokenType.XOREQ ||
+ tokenType == JavaTokenType.PERCEQ ||
+ tokenType == JavaTokenType.LTLTEQ ||
+ tokenType == JavaTokenType.GTGTEQ ||
+ tokenType == JavaTokenType.GTGTGTEQ) {
+ return;
+ }
+ }
+ registerError(lhs);
+ }
+
+ @Override
+ public void visitPrefixExpression(@NotNull PsiPrefixExpression expression) {
+ if (ignoreTransformationOfOriginalParameter) {
+ return;
+ }
+ super.visitPrefixExpression(expression);
+ final IElementType tokenType = expression.getOperationTokenType();
+ if (!tokenType.equals(JavaTokenType.PLUSPLUS) && !tokenType.equals(JavaTokenType.MINUSMINUS)) {
+ return;
+ }
+ final PsiExpression operand = expression.getOperand();
+ if (operand == null) {
+ return;
+ }
+ final PsiParameter parameter = getParameter(operand);
+ if (parameter == null) {
+ return;
+ }
+ registerError(operand);
+ }
+
+ @Override
+ public void visitPostfixExpression(@NotNull PsiPostfixExpression expression) {
+ if (ignoreTransformationOfOriginalParameter) {
+ return;
+ }
+ super.visitPostfixExpression(expression);
+ final IElementType tokenType = expression.getOperationTokenType();
+ if (!tokenType.equals(JavaTokenType.PLUSPLUS) && !tokenType.equals(JavaTokenType.MINUSMINUS)) {
+ return;
+ }
+ final PsiExpression operand = expression.getOperand();
+ final PsiParameter parameter = getParameter(operand);
+ if (parameter == null) {
+ return;
+ }
+ registerError(operand);
+ }
+
+ @Nullable
+ private PsiParameter getParameter(PsiExpression expression) {
+ expression = ParenthesesUtils.stripParentheses(expression);
+ if (!(expression instanceof PsiReferenceExpression)) {
+ return null;
+ }
+ final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)expression;
+ final PsiElement variable = referenceExpression.resolve();
+ if (!(variable instanceof PsiParameter)) {
+ return null;
+ }
+ final PsiParameter parameter = (PsiParameter)variable;
+ final PsiElement declarationScope = parameter.getDeclarationScope();
+ if (!isCorrectScope(declarationScope)) {
+ return null;
+ }
+ return parameter;
+ }
+ }
+}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/ThrowableResultOfMethodCallIgnoredInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/ThrowableResultOfMethodCallIgnoredInspection.java
index cbf33121dd44..080a6e58c409 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/ThrowableResultOfMethodCallIgnoredInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/ThrowableResultOfMethodCallIgnoredInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2008-2011 Bas Leijdekkers
+ * Copyright 2008-2014 Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@ import com.intellij.psi.*;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
+import com.intellij.psi.util.PsiUtil;
import com.intellij.util.Query;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
@@ -57,11 +58,10 @@ public class ThrowableResultOfMethodCallIgnoredInspection
extends BaseInspectionVisitor {
@Override
- public void visitMethodCallExpression(
- PsiMethodCallExpression expression) {
+ public void visitMethodCallExpression(PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
PsiElement parent = expression.getParent();
- while (parent instanceof PsiParenthesizedExpression) {
+ while (parent instanceof PsiParenthesizedExpression || parent instanceof PsiTypeCastExpression) {
parent = parent.getParent();
}
if (parent instanceof PsiReturnStatement ||
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ScopeUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ScopeUtils.java
index 368f1a13d773..cd61a938f8c1 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ScopeUtils.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ScopeUtils.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2012 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2014 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@ package com.siyeh.ig.dataflow;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
+import com.siyeh.ig.psiutils.ParenthesesUtils;
import com.siyeh.ig.psiutils.PsiElementOrderComparator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -86,7 +87,7 @@ class ScopeUtils {
final PsiExpression expression = statement.getExpression();
if (expression instanceof PsiAssignmentExpression) {
final PsiAssignmentExpression assignmentExpression = (PsiAssignmentExpression)expression;
- final PsiExpression lExpression = assignmentExpression.getLExpression();
+ final PsiExpression lExpression = ParenthesesUtils.stripParentheses(assignmentExpression.getLExpression());
if (!lExpression.equals(referenceElement)) {
commonParent = PsiTreeUtil.getParentOfType(commonParent, PsiCodeBlock.class);
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/fixes/ExtractParameterAsLocalVariableFix.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/fixes/ExtractParameterAsLocalVariableFix.java
index 31a7987f40f1..277d95359624 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/fixes/ExtractParameterAsLocalVariableFix.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/fixes/ExtractParameterAsLocalVariableFix.java
@@ -26,6 +26,7 @@ import com.intellij.psi.tree.IElementType;
import com.intellij.util.Query;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.InspectionGadgetsFix;
+import com.siyeh.ig.psiutils.ParenthesesUtils;
import org.jetbrains.annotations.NotNull;
public class ExtractParameterAsLocalVariableFix
@@ -46,8 +47,15 @@ public class ExtractParameterAsLocalVariableFix
@Override
public void doFix(Project project, ProblemDescriptor descriptor) {
- final PsiReferenceExpression parameterReference =
- (PsiReferenceExpression)descriptor.getPsiElement();
+ final PsiElement element = descriptor.getPsiElement();
+ if (!(element instanceof PsiExpression)) {
+ return;
+ }
+ final PsiExpression expression = ParenthesesUtils.stripParentheses((PsiExpression)element);
+ if (!(expression instanceof PsiReferenceExpression)) {
+ return;
+ }
+ final PsiReferenceExpression parameterReference = (PsiReferenceExpression)expression;
final PsiElement target = parameterReference.resolve();
if (!(target instanceof PsiParameter)) {
return;
@@ -102,12 +110,12 @@ public class ExtractParameterAsLocalVariableFix
if (reference == null) {
return;
}
- final PsiElement element = reference.getElement();
- if (!(element instanceof PsiReferenceExpression)) {
+ final PsiElement referenceElement = reference.getElement();
+ if (!(referenceElement instanceof PsiReferenceExpression)) {
return;
}
final PsiReferenceExpression firstReference =
- (PsiReferenceExpression)element;
+ (PsiReferenceExpression)referenceElement;
final PsiElement[] children = body.getChildren();
final int startIndex;
final int endIndex;
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/TypeParameterExtendsFinalClassInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/TypeParameterExtendsFinalClassInspection.java
index 9992f57f39dd..132193f02451 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/TypeParameterExtendsFinalClassInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/inheritance/TypeParameterExtendsFinalClassInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2013 Bas Leijdekkers
+ * Copyright 2006-2014 Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil;
+import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.Query;
@@ -79,7 +80,8 @@ public class TypeParameterExtendsFinalClassInspection extends BaseInspection {
final PsiElement parent = element.getParent();
if (parent instanceof PsiTypeParameter) {
final PsiTypeParameter typeParameter = (PsiTypeParameter)parent;
- replaceTypeParameterAndReferencesWithType(typeParameter);
+ replaceTypeParameterUsagesWithType(typeParameter);
+ typeParameter.delete();
}
else if (parent instanceof PsiTypeElement) {
final PsiTypeElement typeElement = (PsiTypeElement)parent;
@@ -91,25 +93,18 @@ public class TypeParameterExtendsFinalClassInspection extends BaseInspection {
}
}
- private static void replaceTypeParameterAndReferencesWithType(PsiTypeParameter typeParameter) {
- final PsiReferenceList extendsList = typeParameter.getExtendsList();
- final PsiClassType[] referenceElements = extendsList.getReferencedTypes();
- if (referenceElements.length < 1) {
- return;
- }
- final PsiClass finalClass = referenceElements[0].resolve();
- if (finalClass == null) {
+ private static void replaceTypeParameterUsagesWithType(PsiTypeParameter typeParameter) {
+ final PsiClassType[] types = typeParameter.getExtendsList().getReferencedTypes();
+ if (types.length < 1) {
return;
}
final Project project = typeParameter.getProject();
- final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
- final PsiJavaCodeReferenceElement classReference = factory.createClassReferenceElement(finalClass);
+ final PsiJavaCodeReferenceElement classReference = JavaPsiFacade.getElementFactory(project).createReferenceElementByType(types[0]);
final Query<PsiReference> query = ReferencesSearch.search(typeParameter, typeParameter.getUseScope());
for (PsiReference reference : query) {
final PsiElement referenceElement = reference.getElement();
referenceElement.replace(classReference);
}
- typeParameter.delete();
}
}
@@ -123,6 +118,9 @@ public class TypeParameterExtendsFinalClassInspection extends BaseInspection {
@Override
public void visitTypeParameter(PsiTypeParameter classParameter) {
super.visitTypeParameter(classParameter);
+ if (!PsiUtil.isLanguageLevel5OrHigher(classParameter)) {
+ return;
+ }
final PsiClassType[] extendsListTypes = classParameter.getExtendsListTypes();
if (extendsListTypes.length < 1) {
return;
@@ -140,6 +138,9 @@ public class TypeParameterExtendsFinalClassInspection extends BaseInspection {
@Override
public void visitTypeElement(PsiTypeElement typeElement) {
+ if (!PsiUtil.isLanguageLevel5OrHigher(typeElement)) {
+ return;
+ }
super.visitTypeElement(typeElement);
final PsiType type = typeElement.getType();
if (!(type instanceof PsiWildcardType)) {
@@ -155,6 +156,17 @@ public class TypeParameterExtendsFinalClassInspection extends BaseInspection {
if (aClass == null || !aClass.hasModifierProperty(PsiModifier.FINAL)) {
return;
}
+ if (aClass.hasTypeParameters() && !PsiUtil.isLanguageLevel8OrHigher(typeElement)) {
+ final PsiType[] parameters = classType.getParameters();
+ if (parameters.length == 0) {
+ return;
+ }
+ for (PsiType parameter : parameters) {
+ if (parameter instanceof PsiWildcardType) {
+ return;
+ }
+ }
+ }
if (!shouldReport(typeElement)) {
return;
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/SimplifiableIfStatementInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/SimplifiableIfStatementInspection.java
index 66ea85532660..000563d0312d 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/SimplifiableIfStatementInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/j2me/SimplifiableIfStatementInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2013 Bas Leijdekkers
+ * Copyright 2006-2014 Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,19 +19,21 @@ import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
+import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.util.IncorrectOperationException;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.InspectionGadgetsFix;
-import com.siyeh.ig.PsiReplacementUtil;
import com.siyeh.ig.psiutils.*;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.ArrayList;
+import java.util.List;
+
public class SimplifiableIfStatementInspection extends BaseInspection {
@Override
@@ -280,21 +282,68 @@ public class SimplifiableIfStatementInspection extends BaseInspection {
}
@Override
- public void doFix(Project project, ProblemDescriptor descriptor)
- throws IncorrectOperationException {
+ public void doFix(Project project, ProblemDescriptor descriptor) {
final PsiElement element = descriptor.getPsiElement();
final PsiIfStatement ifStatement = (PsiIfStatement)element.getParent();
- final String newStatement = calculateReplacementStatement(ifStatement);
- if (newStatement == null) {
+ List<PsiComment> before = new ArrayList<PsiComment>();
+ List<PsiComment> after = new ArrayList<PsiComment>();
+ collectComments(ifStatement, true, before, after);
+ final String newStatementText = calculateReplacementStatement(ifStatement);
+ if (newStatementText == null) {
return;
}
+ final StringBuilder codeBlockText = new StringBuilder("{\n");
+ for (PsiComment comment : before) {
+ codeBlockText.append(comment.getText()).append('\n');
+ }
+ codeBlockText.append(newStatementText).append('\n');
+ for (PsiComment comment : after) {
+ codeBlockText.append(comment.getText()).append('\n');
+ }
+ codeBlockText.append('}');
if (ifStatement.getElseBranch() == null) {
final PsiElement nextStatement = PsiTreeUtil.skipSiblingsForward(ifStatement, PsiWhiteSpace.class);
if (nextStatement != null) {
nextStatement.delete();
}
}
- PsiReplacementUtil.replaceStatement(ifStatement, newStatement);
+ final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project);
+ final PsiCodeBlock codeBlock = psiFacade.getElementFactory().createCodeBlockFromText(codeBlockText.toString(), ifStatement);
+ final PsiElement parent = ifStatement.getParent();
+ PsiElement child = codeBlock.getFirstBodyElement();
+ final PsiElement end = codeBlock.getLastBodyElement();
+ while (true) {
+ parent.addBefore(child, ifStatement);
+ if (child == end) {
+ break;
+ }
+ child = child.getNextSibling();
+ }
+ ifStatement.delete();
+ CodeStyleManager.getInstance(project).reformat(parent);
+ }
+
+ private static void collectComments(PsiElement element, boolean first, List<PsiComment> before, List<PsiComment> after) {
+ if (element instanceof PsiComment) {
+ if (first) {
+ before.add((PsiComment)element);
+ }
+ else {
+ after.add((PsiComment)element);
+ }
+ return;
+ }
+ for (PsiElement child : element.getChildren()) {
+ if (child instanceof PsiKeyword) {
+ final PsiKeyword keyword = (PsiKeyword)child;
+ if (keyword.getTokenType() == JavaTokenType.ELSE_KEYWORD) {
+ first = false;
+ }
+ }
+ else {
+ collectComments(child, first, before, after);
+ }
+ }
}
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/TodoCommentInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/TodoCommentInspection.java
index 9b79d5453758..72ac229533ec 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/TodoCommentInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/TodoCommentInspection.java
@@ -15,40 +15,38 @@
*/
package com.siyeh.ig.maturity;
+import com.intellij.codeInspection.BaseJavaBatchLocalInspectionTool;
+import com.intellij.codeInspection.InspectionManager;
+import com.intellij.codeInspection.ProblemDescriptor;
+import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.psi.PsiComment;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.search.PsiTodoSearchHelper;
+import com.intellij.psi.search.TodoItem;
+import com.intellij.psi.util.PsiTreeUtil;
import com.siyeh.InspectionGadgetsBundle;
-import com.siyeh.ig.BaseInspection;
-import com.siyeh.ig.BaseInspectionVisitor;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
-public class TodoCommentInspection extends BaseInspection {
+import java.util.ArrayList;
+import java.util.List;
- @Override
- @NotNull
- public String getDisplayName() {
- return InspectionGadgetsBundle.message("todo.comment.display.name");
- }
+public class TodoCommentInspection extends BaseJavaBatchLocalInspectionTool {
+ @Nullable
@Override
- @NotNull
- public String buildErrorString(Object... infos) {
- return InspectionGadgetsBundle.message("todo.comment.problem.descriptor");
- }
-
- @Override
- public BaseInspectionVisitor buildVisitor() {
- return new ClassWithoutToStringVisitor();
- }
-
- private static class ClassWithoutToStringVisitor
- extends BaseInspectionVisitor {
+ public ProblemDescriptor[] checkFile(@NotNull PsiFile file, @NotNull InspectionManager manager, boolean isOnTheFly) {
+ final PsiTodoSearchHelper searchHelper = PsiTodoSearchHelper.SERVICE.getInstance(file.getProject());
+ final TodoItem[] todoItems = searchHelper.findTodoItems(file);
- @Override
- public void visitComment(PsiComment comment) {
- super.visitComment(comment);
- if (TodoUtil.isTodoComment(comment)) {
- registerError(comment);
+ final List<ProblemDescriptor> result = new ArrayList<ProblemDescriptor>();
+ for (TodoItem todoItem : todoItems) {
+ final PsiComment comment = PsiTreeUtil.getParentOfType(file.findElementAt(todoItem.getTextRange().getStartOffset()), PsiComment.class, false);
+ if (comment != null) {
+ result.add(manager.createProblemDescriptor(comment, InspectionGadgetsBundle.message("todo.comment.problem.descriptor"), isOnTheFly,
+ null, ProblemHighlightType.GENERIC_ERROR_OR_WARNING));
}
}
+ return result.toArray(new ProblemDescriptor[result.size()]);
}
} \ No newline at end of file
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/TodoUtil.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/TodoUtil.java
deleted file mode 100644
index a75f9185bf3e..000000000000
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/maturity/TodoUtil.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2003-2005 Dave Griffith
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.siyeh.ig.maturity;
-
-import com.intellij.openapi.util.TextRange;
-import com.intellij.psi.PsiComment;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.search.PsiTodoSearchHelper;
-import com.intellij.psi.search.TodoItem;
-
-public class TodoUtil {
- private TodoUtil() {
- super();
- }
-
- public static boolean isTodoComment(PsiComment comment) {
- final PsiFile file = comment.getContainingFile();
- final PsiTodoSearchHelper searchHelper = PsiTodoSearchHelper.SERVICE.getInstance(comment.getProject());
- final TodoItem[] todoItems = searchHelper.findTodoItems(file);
- for (final TodoItem todoItem : todoItems) {
- final TextRange commentTextRange = comment.getTextRange();
- final TextRange todoTextRange = todoItem.getTextRange();
- if (commentTextRange.contains(todoTextRange)) {
- return true;
- }
- }
- return false;
- }
-} \ No newline at end of file
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/serialization/SerializableInnerClassHasSerialVersionUIDFieldVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/serialization/SerializableInnerClassHasSerialVersionUIDFieldVisitor.java
index 26cbe4b72c0f..0a7d282dbb0a 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/serialization/SerializableInnerClassHasSerialVersionUIDFieldVisitor.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/serialization/SerializableInnerClassHasSerialVersionUIDFieldVisitor.java
@@ -15,10 +15,7 @@
*/
package com.siyeh.ig.serialization;
-import com.intellij.psi.PsiAnonymousClass;
-import com.intellij.psi.PsiClass;
-import com.intellij.psi.PsiModifier;
-import com.intellij.psi.PsiModifierListOwner;
+import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.HardcodedMethodConstants;
@@ -39,12 +36,13 @@ class SerializableInnerClassHasSerialVersionUIDFieldVisitor
@Override
public void visitClass(@NotNull PsiClass aClass) {
// no call to super, so it doesn't drill down
- if (aClass.isInterface() || aClass.isAnnotationType() ||
- aClass.isEnum()) {
+ if (aClass.isInterface() || aClass.isAnnotationType() || aClass.isEnum()) {
return;
}
- if (inspection.ignoreAnonymousInnerClasses &&
- aClass instanceof PsiAnonymousClass) {
+ if (aClass instanceof PsiTypeParameter) {
+ return;
+ }
+ if (inspection.ignoreAnonymousInnerClasses && aClass instanceof PsiAnonymousClass) {
return;
}
if (aClass.findFieldByName(HardcodedMethodConstants.SERIAL_VERSION_UID, false) != null) {
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/serialization/SerializableInnerClassWithNonSerializableOuterClassVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/serialization/SerializableInnerClassWithNonSerializableOuterClassVisitor.java
index e629e7485250..7596c3f57bfa 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/serialization/SerializableInnerClassWithNonSerializableOuterClassVisitor.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/serialization/SerializableInnerClassWithNonSerializableOuterClassVisitor.java
@@ -15,10 +15,7 @@
*/
package com.siyeh.ig.serialization;
-import com.intellij.psi.PsiAnonymousClass;
-import com.intellij.psi.PsiClass;
-import com.intellij.psi.PsiModifier;
-import com.intellij.psi.PsiModifierListOwner;
+import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -37,12 +34,13 @@ class SerializableInnerClassWithNonSerializableOuterClassVisitor
@Override
public void visitClass(@NotNull PsiClass aClass) {
- if (aClass.isInterface() || aClass.isAnnotationType() ||
- aClass.isEnum()) {
+ if (aClass.isInterface() || aClass.isAnnotationType() || aClass.isEnum()) {
return;
}
- if (inspection.ignoreAnonymousInnerClasses &&
- aClass instanceof PsiAnonymousClass) {
+ if (aClass instanceof PsiTypeParameter) {
+ return;
+ }
+ if (inspection.ignoreAnonymousInnerClasses && aClass instanceof PsiAnonymousClass) {
return;
}
final PsiClass containingClass = PsiTreeUtil.getParentOfType(aClass, PsiClass.class);
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessaryThisInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessaryThisInspection.java
index aa2d3ea2fce1..6c4051066ad5 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessaryThisInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/style/UnnecessaryThisInspection.java
@@ -15,6 +15,7 @@
*/
package com.siyeh.ig.style;
+import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil;
import com.intellij.codeInspection.CleanupLocalInspectionTool;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.codeInspection.ProblemHighlightType;
@@ -136,6 +137,9 @@ public class UnnecessaryThisInspection extends BaseInspection implements Cleanup
if (!VariableSearchUtils.variableNameResolvesToTarget(referenceName, variable, expression)) {
return;
}
+ if (variable instanceof PsiField && HighlightUtil.isIllegalForwardReferenceToField(expression, (PsiField)variable, true) != null) {
+ return;
+ }
registerError(thisExpression, ProblemHighlightType.LIKE_UNUSED_SYMBOL);
}
else {
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/AccessToNonThreadSafeStaticFieldFromInstanceInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/AccessToNonThreadSafeStaticFieldFromInstanceInspectionBase.java
index b051e2e653a2..b4d67d6a5b89 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/AccessToNonThreadSafeStaticFieldFromInstanceInspectionBase.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/AccessToNonThreadSafeStaticFieldFromInstanceInspectionBase.java
@@ -44,7 +44,11 @@ public class AccessToNonThreadSafeStaticFieldFromInstanceInspectionBase extends
@SuppressWarnings("PublicField")
public final ExternalizableStringSet nonThreadSafeClasses =
- new ExternalizableStringSet("java.text.SimpleDateFormat", "java.util.Calendar");
+ new ExternalizableStringSet("java.text.SimpleDateFormat",
+ "java.text.MessageFormat",
+ "java.text.DecimalFormat",
+ "java.text.ChoiceFormat",
+ "java.util.Calendar");
@NonNls
@SuppressWarnings({"PublicField"})