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");