diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/InstructionVisitor.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/InstructionVisitor.java index 5ddf9cb0a570..2e5250d657d8 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/InstructionVisitor.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/InstructionVisitor.java @@ -139,7 +139,9 @@ public abstract class InstructionVisitor { if (variable != null) { if (instruction.isDependentsOnly()) { for (DfaVariableValue qualified : runner.getFactory().getVarFactory().getAllQualifiedBy(variable)) { - memState.flushVariable(qualified); + if (qualified.isFlushableByCalls()) { + memState.flushVariable(qualified); + } } } else { diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ArrayLength.java b/java/java-tests/testData/inspection/dataFlow/fixture/ArrayLength.java index 2250766f8d45..b1369090e356 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/ArrayLength.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/ArrayLength.java @@ -1,6 +1,23 @@ import java.util.Arrays; public final class ArrayLength { + void testEquality(int[] x) { + int len = x.length; + for(int i=0; i<100; i++) { + if (i == len) { + x[i] = 10; + } + } + } + + int[] testFor(int length) { + int[] x = new int[length]; + for(int i=0; i<=length; i++) { + x[i] = 1; + } + return x; + } + public static void testArray2(Object[] x, Object[] y, int a) { if(x[a] == null && a == x.length) { System.out.println("Impossible");