diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java index f3c28c2cda4f..7d8f4fb4562e 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java @@ -1852,7 +1852,7 @@ public class ControlFlowAnalyzer extends JavaElementVisitor { qualifier.accept(this); } else { PsiClass aClass = PsiUtil.resolveClassInClassTypeOnly(expression.getType()); - if (aClass != null) { + if (aClass != null && !aClass.hasModifierProperty(PsiModifier.STATIC)) { PsiClass outerClass = aClass.getContainingClass(); if (outerClass != null && InheritanceUtil.hasEnclosingInstanceInScope(outerClass, expression, true, false)) { qualifierValue = myFactory.getVarFactory().createThisValue(outerClass); diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/FieldRewrittenInInner.java b/java/java-tests/testData/inspection/dataFlow/fixture/FieldRewrittenInInner.java index 4259d5e70835..a330a513c3cd 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/FieldRewrittenInInner.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/FieldRewrittenInInner.java @@ -27,6 +27,16 @@ class Tester System.err.println("Is false"); } + private Tester(int i) + { + // nested class: should not drop locality ('this' is not leaked) + new Nested(); + if (flag) + System.err.println("Is true."); + else + System.err.println("Is false"); + } + class Inner { Inner() @@ -34,4 +44,12 @@ class Tester flag = true; } } + + static class Nested + { + Nested() + { + flag = true; // cannot access flag + } + } } \ No newline at end of file