diff --git a/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties
index 156403e44471..a9ccb62ac478 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties
+++ b/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties
@@ -376,8 +376,8 @@ field.name.hides.in.superclass.ignore.option=Ignore superclass fields not visibl
inner.class.field.hides.outer.display.name=Inner class field hides outer class field
inner.class.field.hides.outer.ignore.option=Ignore outer fields not visible from inner class
inner.class.field.hides.outer.problem.descriptor=Inner class field #ref hides outer class field #loc
-local.variable.hides.member.variable.display.name=Local variable hides member variable
-local.variable.hides.member.variable.problem.descriptor=Local variable #ref hides member variable #loc
+local.variable.hides.member.variable.display.name=Local variable hides field
+local.variable.hides.member.variable.problem.descriptor=Local variable #ref hides field in class ''{0}'' #loc
local.variable.hides.member.variable.ignore.option=Ignore local variables in static methods
method.overloads.display.name=Method overloads method of superclass
method.overloads.problem.descriptor=Method #ref() overloads a compatible method of a superclass, when overriding might have been intended #loc
@@ -386,8 +386,8 @@ method.overrides.private.display.name=Method overrides private method of supercl
method.overrides.private.display.name.problem.descriptor=Method #ref() overrides a private method of a superclass #loc
method.overrides.static.display.name=Method overrides static method of superclass
method.overrides.static.problem.descriptor=Method #ref() overrides a static method of a superclass #loc
-parameter.hides.member.variable.display.name=Parameter hides member variable
-parameter.hides.member.variable.problem.descriptor=Parameter #ref hides member variable #loc
+parameter.hides.member.variable.display.name=Parameter hides field
+parameter.hides.member.variable.problem.descriptor=Parameter #ref hides field in class ''{0}'' #loc
parameter.hides.member.variable.ignore.setters.option=Ignore for property setters
parameter.hides.member.variable.ignore.superclass.option=Ignore superclass fields not visible from subclass
parameter.hides.member.variable.ignore.constructors.option=Ignore for constructors
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/visibility/LocalVariableHidingMemberVariableInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/visibility/LocalVariableHidingMemberVariableInspection.java
index 615bec761ee5..68b0ce5a49b6 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/visibility/LocalVariableHidingMemberVariableInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/visibility/LocalVariableHidingMemberVariableInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2012 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.
@@ -25,19 +25,16 @@ import com.siyeh.ig.fixes.RenameFix;
import com.siyeh.ig.psiutils.ClassUtils;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import javax.swing.*;
-public class LocalVariableHidingMemberVariableInspection
- extends BaseInspection {
+public class LocalVariableHidingMemberVariableInspection extends BaseInspection {
- /**
- * @noinspection PublicField
- */
+ @SuppressWarnings("PublicField")
public boolean m_ignoreInvisibleFields = true;
- /**
- * @noinspection PublicField
- */
+
+ @SuppressWarnings("PublicField")
public boolean m_ignoreStaticMethods = true;
@NotNull
@@ -47,8 +44,7 @@ public class LocalVariableHidingMemberVariableInspection
@NotNull
public String getDisplayName() {
- return InspectionGadgetsBundle.message(
- "local.variable.hides.member.variable.display.name");
+ return InspectionGadgetsBundle.message("local.variable.hides.member.variable.display.name");
}
protected InspectionGadgetsFix buildFix(Object... infos) {
@@ -61,19 +57,14 @@ public class LocalVariableHidingMemberVariableInspection
@NotNull
public String buildErrorString(Object... infos) {
- return InspectionGadgetsBundle.message(
- "local.variable.hides.member.variable.problem.descriptor");
+ final PsiClass aClass = (PsiClass)infos[0];
+ return InspectionGadgetsBundle.message("local.variable.hides.member.variable.problem.descriptor", aClass.getName());
}
public JComponent createOptionsPanel() {
- final MultipleCheckboxOptionsPanel optionsPanel =
- new MultipleCheckboxOptionsPanel(this);
- optionsPanel.addCheckbox(InspectionGadgetsBundle.message(
- "field.name.hides.in.superclass.ignore.option"),
- "m_ignoreInvisibleFields");
- optionsPanel.addCheckbox(InspectionGadgetsBundle.message(
- "local.variable.hides.member.variable.ignore.option"),
- "m_ignoreStaticMethods");
+ final MultipleCheckboxOptionsPanel optionsPanel = new MultipleCheckboxOptionsPanel(this);
+ optionsPanel.addCheckbox(InspectionGadgetsBundle.message("field.name.hides.in.superclass.ignore.option"), "m_ignoreInvisibleFields");
+ optionsPanel.addCheckbox(InspectionGadgetsBundle.message("local.variable.hides.member.variable.ignore.option"), "m_ignoreStaticMethods");
return optionsPanel;
}
@@ -81,71 +72,65 @@ public class LocalVariableHidingMemberVariableInspection
return new LocalVariableHidingMemberVariableVisitor();
}
- private class LocalVariableHidingMemberVariableVisitor
- extends BaseInspectionVisitor {
+ private class LocalVariableHidingMemberVariableVisitor extends BaseInspectionVisitor {
@Override
public void visitLocalVariable(@NotNull PsiLocalVariable variable) {
super.visitLocalVariable(variable);
if (m_ignoreStaticMethods) {
- final PsiMethod aMethod =
- PsiTreeUtil.getParentOfType(variable,
- PsiMethod.class);
- if (aMethod == null) {
- return;
- }
- if (aMethod.hasModifierProperty(PsiModifier.STATIC)) {
+ final PsiMember member = PsiTreeUtil.getParentOfType(variable, PsiMethod.class, PsiClassInitializer.class);
+ if (member != null && member.hasModifierProperty(PsiModifier.STATIC)) {
return;
}
}
- final PsiClass aClass =
- ClassUtils.getContainingClass(variable);
+ final PsiClass aClass = checkFieldNames(variable);
if (aClass == null) {
return;
}
- final String variableName = variable.getName();
- final PsiField[] fields = aClass.getAllFields();
- for (final PsiField field : fields) {
- if (checkFieldName(field, variableName, aClass)) {
- registerVariableError(variable);
- }
- }
+ registerVariableError(variable, aClass);
}
@Override
public void visitParameter(@NotNull PsiParameter variable) {
super.visitParameter(variable);
- if (!(variable.getDeclarationScope() instanceof PsiCatchSection)) {
+ final PsiElement declarationScope = variable.getDeclarationScope();
+ if (!(declarationScope instanceof PsiCatchSection) && !(declarationScope instanceof PsiForeachStatement)) {
return;
}
- final PsiClass aClass =
- ClassUtils.getContainingClass(variable);
+ if (m_ignoreStaticMethods) {
+ final PsiMember member = PsiTreeUtil.getParentOfType(variable, PsiMethod.class, PsiClassInitializer.class);
+ if (member != null && member.hasModifierProperty(PsiModifier.STATIC)) {
+ return;
+ }
+ }
+ final PsiClass aClass = checkFieldNames(variable);
if (aClass == null) {
return;
}
- final String variableName = variable.getName();
- final PsiField[] fields = aClass.getAllFields();
- for (final PsiField field : fields) {
- if (checkFieldName(field, variableName, aClass)) {
- registerVariableError(variable);
- }
- }
+ registerVariableError(variable, aClass);
}
- private boolean checkFieldName(PsiField field, String variableName,
- PsiClass aClass) {
- if (field == null) {
- return false;
+ @Nullable
+ private PsiClass checkFieldNames(PsiVariable variable) {
+ PsiClass aClass = ClassUtils.getContainingClass(variable);
+ final String variableName = variable.getName();
+ if (variableName == null) {
+ return null;
}
- final String fieldName = field.getName();
- if (fieldName == null) {
- return false;
+ while (aClass != null) {
+ final PsiField[] fields = aClass.getAllFields();
+ for (PsiField field : fields) {
+ final String fieldName = field.getName();
+ if (!variableName.equals(fieldName)) {
+ continue;
+ }
+ if (!m_ignoreInvisibleFields || ClassUtils.isFieldVisible(field, aClass)) {
+ return aClass;
+ }
+ }
+ aClass = ClassUtils.getContainingClass(aClass);
}
- if (!fieldName.equals(variableName)) {
- return false;
- }
- return !m_ignoreInvisibleFields ||
- ClassUtils.isFieldVisible(field, aClass);
+ return null;
}
}
}
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/visibility/ParameterHidingMemberVariableInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/visibility/ParameterHidingMemberVariableInspection.java
index 7fcbde4c7a29..113794cfd4a0 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/visibility/ParameterHidingMemberVariableInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/visibility/ParameterHidingMemberVariableInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2012 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,7 +17,6 @@ package com.siyeh.ig.visibility;
import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel;
import com.intellij.psi.*;
-import com.intellij.psi.util.PsiTreeUtil;
import com.siyeh.HardcodedMethodConstants;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
@@ -26,30 +25,25 @@ import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.fixes.RenameFix;
import com.siyeh.ig.psiutils.ClassUtils;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class ParameterHidingMemberVariableInspection extends BaseInspection {
- /**
- * @noinspection PublicField
- */
+ @SuppressWarnings("PublicField")
public boolean m_ignoreInvisibleFields = true;
- /**
- * @noinspection PublicField
- */
+
+ @SuppressWarnings("PublicField")
public boolean m_ignoreStaticMethodParametersHidingInstanceFields = false;
- /**
- * @noinspection PublicField
- */
+
+ @SuppressWarnings("PublicField")
public boolean m_ignoreForConstructors = false;
- /**
- * @noinspection PublicField
- */
+
+ @SuppressWarnings("PublicField")
public boolean m_ignoreForPropertySetters = false;
- /**
- * @noinspection PublicField
- */
+
+ @SuppressWarnings("PublicField")
public boolean m_ignoreForAbstractMethods = false;
@NotNull
@@ -59,8 +53,7 @@ public class ParameterHidingMemberVariableInspection extends BaseInspection {
@NotNull
public String getDisplayName() {
- return InspectionGadgetsBundle.message(
- "parameter.hides.member.variable.display.name");
+ return InspectionGadgetsBundle.message("parameter.hides.member.variable.display.name");
}
protected InspectionGadgetsFix buildFix(Object... infos) {
@@ -73,27 +66,21 @@ public class ParameterHidingMemberVariableInspection extends BaseInspection {
@NotNull
public String buildErrorString(Object... infos) {
- return InspectionGadgetsBundle.message(
- "parameter.hides.member.variable.problem.descriptor");
+ final PsiClass aClass = (PsiClass)infos[0];
+ return InspectionGadgetsBundle.message("parameter.hides.member.variable.problem.descriptor", aClass.getName());
}
public JComponent createOptionsPanel() {
- final MultipleCheckboxOptionsPanel optionsPanel =
- new MultipleCheckboxOptionsPanel(this);
- optionsPanel.addCheckbox(InspectionGadgetsBundle.message(
- "parameter.hides.member.variable.ignore.setters.option"),
+ final MultipleCheckboxOptionsPanel optionsPanel = new MultipleCheckboxOptionsPanel(this);
+ optionsPanel.addCheckbox(InspectionGadgetsBundle.message("parameter.hides.member.variable.ignore.setters.option"),
"m_ignoreForPropertySetters");
- optionsPanel.addCheckbox(InspectionGadgetsBundle.message(
- "parameter.hides.member.variable.ignore.superclass.option"),
+ optionsPanel.addCheckbox(InspectionGadgetsBundle.message("parameter.hides.member.variable.ignore.superclass.option"),
"m_ignoreInvisibleFields");
- optionsPanel.addCheckbox(InspectionGadgetsBundle.message(
- "parameter.hides.member.variable.ignore.constructors.option"),
+ optionsPanel.addCheckbox(InspectionGadgetsBundle.message("parameter.hides.member.variable.ignore.constructors.option"),
"m_ignoreForConstructors");
- optionsPanel.addCheckbox(InspectionGadgetsBundle.message(
- "parameter.hides.member.variable.ignore.abstract.methods.option"),
+ optionsPanel.addCheckbox(InspectionGadgetsBundle.message("parameter.hides.member.variable.ignore.abstract.methods.option"),
"m_ignoreForAbstractMethods");
- optionsPanel.addCheckbox(InspectionGadgetsBundle.message(
- "parameter.hides.member.variable.ignore.static.parameters.option"),
+ optionsPanel.addCheckbox(InspectionGadgetsBundle.message("parameter.hides.member.variable.ignore.static.parameters.option"),
"m_ignoreStaticMethodParametersHidingInstanceFields");
return optionsPanel;
}
@@ -102,21 +89,16 @@ public class ParameterHidingMemberVariableInspection extends BaseInspection {
return new ParameterHidingMemberVariableVisitor();
}
- private class ParameterHidingMemberVariableVisitor
- extends BaseInspectionVisitor {
+ private class ParameterHidingMemberVariableVisitor extends BaseInspectionVisitor {
@Override
public void visitParameter(@NotNull PsiParameter variable) {
super.visitParameter(variable);
- if (variable.getDeclarationScope() instanceof PsiCatchSection) {
- return;
- }
- final PsiMethod method =
- PsiTreeUtil.getParentOfType(variable,
- PsiMethod.class);
- if (method == null) {
+ final PsiElement declarationScope = variable.getDeclarationScope();
+ if (!(declarationScope instanceof PsiMethod)) {
return;
}
+ final PsiMethod method = (PsiMethod)declarationScope;
if (m_ignoreForConstructors && method.isConstructor()) {
return;
}
@@ -125,51 +107,49 @@ public class ParameterHidingMemberVariableInspection extends BaseInspection {
return;
}
final PsiClass containingClass = method.getContainingClass();
- if (containingClass.isInterface()) {
+ if (containingClass != null && containingClass.isInterface()) {
return;
}
}
if (m_ignoreForPropertySetters) {
final String methodName = method.getName();
final PsiType returnType = method.getReturnType();
- if (methodName.startsWith(HardcodedMethodConstants.SET) &&
- PsiType.VOID.equals(returnType)) {
+ if (methodName.startsWith(HardcodedMethodConstants.SET) && PsiType.VOID.equals(returnType)) {
return;
}
}
- final PsiClass aClass =
- ClassUtils.getContainingClass(variable);
- if (aClass == null) {
+ final PsiClass aClass = checkFieldName(variable, method);
+ if (aClass == null) {
return;
}
+ registerVariableError(variable, aClass);
+ }
+
+ @Nullable
+ private PsiClass checkFieldName(PsiVariable variable, PsiMethod method) {
final String variableName = variable.getName();
- final PsiField[] fields = aClass.getAllFields();
- for (final PsiField field : fields) {
- if (checkFieldName(field, variableName, aClass)) {
- if (m_ignoreStaticMethodParametersHidingInstanceFields &&
- !field.hasModifierProperty(PsiModifier.STATIC) &&
+ if (variableName == null) {
+ return null;
+ }
+ PsiClass aClass = ClassUtils.getContainingClass(variable);
+ while (aClass != null) {
+ final PsiField[] fields = aClass.getAllFields();
+ for (PsiField field : fields) {
+ final String fieldName = field.getName();
+ if (!variableName.equals(fieldName)) {
+ continue;
+ }
+ if (m_ignoreStaticMethodParametersHidingInstanceFields && !field.hasModifierProperty(PsiModifier.STATIC) &&
method.hasModifierProperty(PsiModifier.STATIC)) {
continue;
}
- registerVariableError(variable);
+ if (!m_ignoreInvisibleFields || ClassUtils.isFieldVisible(field, aClass)) {
+ return aClass;
+ }
}
+ aClass = ClassUtils.getContainingClass(aClass);
}
- }
-
- private boolean checkFieldName(PsiField field, String variableName,
- PsiClass aClass) {
- if (field == null) {
- return false;
- }
- final String fieldName = field.getName();
- if (fieldName == null) {
- return false;
- }
- if (!fieldName.equals(variableName)) {
- return false;
- }
- return !m_ignoreInvisibleFields ||
- ClassUtils.isFieldVisible(field, aClass);
+ return null;
}
}
}
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/LocalVariableHidingMemberVariable.html b/plugins/InspectionGadgets/src/inspectionDescriptions/LocalVariableHidingMemberVariable.html
index adb840c83e8d..bfbca0582cdd 100644
--- a/plugins/InspectionGadgets/src/inspectionDescriptions/LocalVariableHidingMemberVariable.html
+++ b/plugins/InspectionGadgets/src/inspectionDescriptions/LocalVariableHidingMemberVariable.html
@@ -1,7 +1,8 @@
Powered by InspectionGadgets diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/ParameterHidingMemberVariable.html b/plugins/InspectionGadgets/src/inspectionDescriptions/ParameterHidingMemberVariable.html index aed894a0568a..977c6314731b 100644 --- a/plugins/InspectionGadgets/src/inspectionDescriptions/ParameterHidingMemberVariable.html +++ b/plugins/InspectionGadgets/src/inspectionDescriptions/ParameterHidingMemberVariable.html @@ -1,7 +1,8 @@
-Reports method parameters being named identically to visible member variables of their -class. Such a parameter name may be confusing. +Reports method parameters named identically to visible fields of their class +or surrounding classes if it is a parameter inside of an inner or anonymous class. +Such a parameter name may be confusing.
Powered by InspectionGadgets
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/visibility/FieldHidesSuperclassFieldInspection.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/visibility/FieldHidesSuperclassFieldInspection.java
deleted file mode 100644
index ffcf0445b7cf..000000000000
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/visibility/FieldHidesSuperclassFieldInspection.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.siyeh.igtest.visibility;
-
-import java.util.Set;
-import java.util.HashSet;
-
-public class FieldHidesSuperclassFieldInspection extends LocalVariableHidingMemberVariableInspection
-{
- private int m_barangus = -1;
-
- public FieldHidesSuperclassFieldInspection(int barangus)
- {
- super(barangus);
- }
-
- public void foo()
- {
- System.out.println("bar" + m_barangus);
- }
-}
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/visibility/LocalVariableHidingMemberVariableInspection.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/visibility/LocalVariableHidingMemberVariableInspection.java
deleted file mode 100644
index 4d5527c51414..000000000000
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/visibility/LocalVariableHidingMemberVariableInspection.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.siyeh.igtest.visibility;
-
-import com.siyeh.igtest.visibility2.DifferentPackageClass;
-
-
-public class LocalVariableHidingMemberVariableInspection extends DifferentPackageClass
-{
- private int m_barangus = -1;
-
- public LocalVariableHidingMemberVariableInspection(int barangus)
- {
- m_barangus = barangus;
- }
-
- public void foo()
- {
- int fooBar;
- final Object m_barangus = new Object();
- System.out.println("bar" + m_barangus);
- }
-
- public void setBarangus(int barangus)
- {
- m_barangus = barangus;
- System.out.println(m_barangus);
- }
-}
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/visibility/ParameterHidingMemberVariableInspection.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/visibility/ParameterHidingMemberVariableInspection.java
deleted file mode 100644
index c33ce8f54197..000000000000
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/visibility/ParameterHidingMemberVariableInspection.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.siyeh.igtest.visibility;
-
-import java.util.Set;
-import java.util.HashSet;
-
-public class ParameterHidingMemberVariableInspection
-{
- private int bar = -1;
-
- public ParameterHidingMemberVariableInspection(int bar)
- {
- this.bar = bar;
- }
-
- public void setBar(int bar)
- {
- this.bar = bar;
- }
-
- public void foo(Object bar)
- {
- System.out.println("bar" + bar);
- }
-}
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/visibility/local_variable_hiding_member_variable/LocalVariableHidingMemberVariable.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/visibility/local_variable_hiding_member_variable/LocalVariableHidingMemberVariable.java
new file mode 100644
index 000000000000..353e2b79fde8
--- /dev/null
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/visibility/local_variable_hiding_member_variable/LocalVariableHidingMemberVariable.java
@@ -0,0 +1,55 @@
+package com.siyeh.igtest.visibility.local_variable_hiding_member_variable;
+
+import com.siyeh.igtest.visibility2.DifferentPackageClass;
+
+import java.util.List;
+
+
+public class LocalVariableHidingMemberVariable extends DifferentPackageClass
+{
+ private int m_barangus = -1;
+
+ public LocalVariableHidingMemberVariable(int barangus)
+ {
+ m_barangus = barangus;
+ }
+
+ public void foo()
+ {
+ int fooBar;
+ final Object m_barangus = new Object();
+ System.out.println("bar" + m_barangus);
+ }
+
+ public void setBarangus(int barangus)
+ {
+ m_barangus = barangus;
+ System.out.println(m_barangus);
+ }
+
+ public void innerContainer() {
+ new Object() {
+ void foo() {
+ Object m_barangus = new Object();
+ }
+ };
+ }
+
+ public void foreach(List