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 78f61dbf0068..beffb0fc1f5a 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 @@ -1272,7 +1272,7 @@ public abstract class LongRangeSet { return other.unite(this); } if (other instanceof Range) { - if (other.intersects(this) || + if (other.min() <= max() && min() <= other.max() || (other.max() < min() && other.max() + 1 == min()) || (other.min() > max() && max() + 1 == other.min())) { return range(Math.min(min(), other.min()), Math.max(max(), other.max())); diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/dataFlow/rangeSet/LongRangeSetTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/dataFlow/rangeSet/LongRangeSetTest.java index 57cc574d0711..6818363e1d7f 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/dataFlow/rangeSet/LongRangeSetTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/dataFlow/rangeSet/LongRangeSetTest.java @@ -765,6 +765,7 @@ public class LongRangeSetTest { assertEquals("{-2..100}: even", modRange(0, 100, 2, 0b1).unite(point(-2)).toString()); assertEquals("{-3, 0..100}", modRange(0, 100, 2, 0b1).unite(point(-3)).toString()); assertEquals("{-4, 0..100}", modRange(0, 100, 2, 0b1).unite(point(-4)).toString()); + assertEquals("{Long.MIN_VALUE..9223372036854775744}", range(1, 63).unite(modRange(Long.MIN_VALUE, Long.MAX_VALUE, 64, 0b1)).toString()); } @Test