diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspectionBase.java index d2dfb1f5c6a8..509a327ed2e4 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspectionBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/varScopeCanBeNarrowed/FieldCanBeLocalInspectionBase.java @@ -120,6 +120,21 @@ public class FieldCanBeLocalInspectionBase extends BaseJavaBatchLocalInspectionT aClass.accept(new JavaRecursiveElementWalkingVisitor() { @Override public void visitMethod(PsiMethod method) { + if (method.isConstructor()) { + final PsiCodeBlock body = method.getBody(); + if (body != null) { + final PsiStatement[] statements = body.getStatements(); + if (statements.length > 0 && statements[0] instanceof PsiExpressionStatement) { + final PsiExpression expression = ((PsiExpressionStatement)statements[0]).getExpression(); + if (expression instanceof PsiMethodCallExpression) { + final PsiMethod resolveMethod = ((PsiMethodCallExpression)expression).resolveMethod(); + if (resolveMethod != null && resolveMethod.isConstructor()) { + visitMethodCallExpression((PsiMethodCallExpression)expression); + } + } + } + } + } //do not go inside method } diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/constructorThisRef/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/constructorThisRef/expected.xml new file mode 100644 index 000000000000..c63c9258595e --- /dev/null +++ b/java/java-tests/testData/inspection/fieldCanBeLocal/constructorThisRef/expected.xml @@ -0,0 +1,2 @@ + + diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/constructorThisRef/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/constructorThisRef/src/Test.java new file mode 100644 index 000000000000..2c011830c003 --- /dev/null +++ b/java/java-tests/testData/inspection/fieldCanBeLocal/constructorThisRef/src/Test.java @@ -0,0 +1,10 @@ +class ClassName { + private static String SOME_CONSTANT = "XXX"; + + public ClassName() { + this(SOME_CONSTANT); + } + + public ClassName(String somethingElse) { + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/FieldCanBeLocalTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/FieldCanBeLocalTest.java index 3470669e2dfe..29a0a831087f 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/FieldCanBeLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/FieldCanBeLocalTest.java @@ -27,6 +27,7 @@ public class FieldCanBeLocalTest extends InspectionTestCase { } public void testConstructor () throws Exception { doTest(); } + public void testConstructorThisRef() throws Exception { doTest(); } public void testStaticFinal() throws Exception { doTest(); } public void testStaticAccess() throws Exception { doTest(); } public void testInnerClassConstructor() throws Exception { doTest(); }