diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/rangeSet/LongRangeSet.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/rangeSet/LongRangeSet.java index 8e6cda216a1e..9f5f8703d634 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/rangeSet/LongRangeSet.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/rangeSet/LongRangeSet.java @@ -1867,11 +1867,7 @@ public abstract class LongRangeSet { plus = modRange(ranges[i], ranges[i + 1], myMod, bits); } else { - long min = ranges[i]; - while (!isSet(bits, remainder(min, myMod))) min++; - long max = ranges[i + 1]; - while (!isSet(bits, remainder(max, myMod))) max--; - plus = range(min, max); + plus = range(ranges[i], ranges[i + 1]); } result = result.unite(plus); } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/LongRangeMod.java b/java/java-tests/testData/inspection/dataFlow/fixture/LongRangeMod.java index 37a5224b82de..3ad4a445cb3e 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/LongRangeMod.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/LongRangeMod.java @@ -34,4 +34,14 @@ public class LongRangeMod { i++; } } + + // EA-257681 - IAE: LongRangeSet$Range. + void test(int a, int b) { + if (a % 2 == 0) + b += a / 2; + else if (a % 3 == 0) + b += a / 3; + else + a++; + } }