diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/InstanceVariableInitializationInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/InstanceVariableInitializationInspection.java index b8cbb4382b6d..716f95389119 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/InstanceVariableInitializationInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/InstanceVariableInitializationInspection.java @@ -74,7 +74,7 @@ public class InstanceVariableInitializationInspection extends FieldInspection { for (int i = 0; i < constructors.length; i++) { final PsiMethod constructor = constructors[i]; final PsiCodeBlock body = constructor.getBody(); - if (!InitializationUtils.blockMustAssignVariable(field, body)) { + if (!InitializationUtils.blockMustAssignVariableOrFail(field, body)) { registerFieldError(field); return; } @@ -89,7 +89,7 @@ public class InstanceVariableInitializationInspection extends FieldInspection { final PsiClassInitializer initializer = initializers[i]; if (!initializer.hasModifierProperty(PsiModifier.STATIC)) { final PsiCodeBlock body = initializer.getBody(); - if (InitializationUtils.blockMustAssignVariable(field, body)) { + if (InitializationUtils.blockMustAssignVariableOrFail(field, body)) { return true; } } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/InstanceVariableUninitializedUseInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/InstanceVariableUninitializedUseInspection.java index 650d54f0a786..a220965a8c24 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/InstanceVariableUninitializedUseInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/InstanceVariableUninitializedUseInspection.java @@ -12,6 +12,7 @@ import com.siyeh.ig.psiutils.InitializationReadUtils; import com.siyeh.ig.ui.SingleCheckboxOptionsPanel; import javax.swing.*; +import java.util.List; public class InstanceVariableUninitializedUseInspection extends FieldInspection { @@ -80,7 +81,7 @@ public class InstanceVariableUninitializedUseInspection } } - final java.util.List badReads = iru.getUninitializedReads(); + final List badReads = iru.getUninitializedReads(); for (int i = 0; i < badReads.size(); i++) { final PsiElement element = (PsiElement) badReads.get(i); registerError(element); diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/StaticVariableInitializationInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/StaticVariableInitializationInspection.java index 138a216a570c..1d7fcfc38b33 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/StaticVariableInitializationInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/StaticVariableInitializationInspection.java @@ -68,7 +68,7 @@ public class StaticVariableInitializationInspection extends FieldInspection { final PsiClassInitializer initializer = initializers[i]; if (initializer.hasModifierProperty(PsiModifier.STATIC)) { final PsiCodeBlock body = initializer.getBody(); - if (InitializationUtils.blockMustAssignVariable(field, body)) { + if (InitializationUtils.blockMustAssignVariableOrFail(field, body)) { return; } } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/ThisEscapedInConstructorInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/ThisEscapedInConstructorInspection.java index 01687d029891..ac5bf965f4a2 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/ThisEscapedInConstructorInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/initialization/ThisEscapedInConstructorInspection.java @@ -9,7 +9,7 @@ import com.siyeh.ig.psiutils.ClassUtils; public class ThisEscapedInConstructorInspection extends ClassInspection { public String getDisplayName() { - return "'this' reference escaped in constructor"; + return "'this' reference escaped in object construction"; } public String getGroupDisplayName() { @@ -49,8 +49,8 @@ public class ThisEscapedInConstructorInspection extends ClassInspection { super.visitNewExpression(psiNewExpression); - final PsiMember methodOrInitializer = checkConstructorOrInstanceInitializer(psiNewExpression); - if (methodOrInitializer == null) { + final boolean isInInitialization = checkForInitialization(psiNewExpression); + if (!isInInitialization) { return; } @@ -82,8 +82,8 @@ public class ThisEscapedInConstructorInspection extends ClassInspection { super.visitAssignmentExpression(assignment); - final PsiMember methodOrInitializer = checkConstructorOrInstanceInitializer(assignment); - if (methodOrInitializer == null) { + final boolean isInInitialization = checkForInitialization(assignment); + if (!isInInitialization) { return; } @@ -121,8 +121,8 @@ public class ThisEscapedInConstructorInspection extends ClassInspection { public void visitMethodCallExpression(PsiMethodCallExpression call) { super.visitMethodCallExpression(call); - final PsiMember methodOrInitializer = checkConstructorOrInstanceInitializer(call); - if (methodOrInitializer == null) { + final boolean isInInitialization = checkForInitialization(call); + if (!isInInitialization) { return; } @@ -139,7 +139,7 @@ public class ThisEscapedInConstructorInspection extends ClassInspection { } final PsiClass calledMethodClass = calledMethod.getContainingClass(); - final PsiClass methodClass = methodOrInitializer.getContainingClass(); + final PsiClass methodClass = (PsiClass) PsiTreeUtil.getParentOfType(call, PsiClass.class); if (calledMethodClass.equals(methodClass)) // compares class types statically? { @@ -196,27 +196,23 @@ public class ThisEscapedInConstructorInspection extends ClassInspection { /** * @param call - * @return null unless CallExpression is a Constructor or an Instance - * Initializer. Otherwise it returns the PsiMember representing - * the contructor/initializer + * @return true if CallExpression is in a constructor, instance + * initializer, or field initializaer. Otherwise it returns false */ - private static PsiMember checkConstructorOrInstanceInitializer(PsiElement call) { + private static boolean checkForInitialization(PsiElement call) { final PsiMethod method = (PsiMethod) PsiTreeUtil.getParentOfType(call, PsiMethod.class); - PsiMember methodOrInitializer = method; - if (method == null) { - final PsiClassInitializer classInitializer = (PsiClassInitializer) PsiTreeUtil.getParentOfType(call, PsiClassInitializer.class); - if (classInitializer == null) { - return null; - } - if (classInitializer.hasModifierProperty(PsiModifier.STATIC)) { - return null; - } - methodOrInitializer = classInitializer; - - } else if (!method.isConstructor()) { - return null; + if (method != null) { + return method.isConstructor(); } - return methodOrInitializer; + final PsiField field = (PsiField) PsiTreeUtil.getParentOfType(call, PsiField.class); + if (field != null) { + return true; + } + final PsiClassInitializer classInitializer = (PsiClassInitializer) PsiTreeUtil.getParentOfType(call, PsiClassInitializer.class); + if (classInitializer != null) { + return !classInitializer.hasModifierProperty(PsiModifier.STATIC); + } + return false; } // If there are more than two of 'this' as arguments, only marks the first until it is removed. No big deal.