diff --git a/src/main/java/org/openrewrite/staticanalysis/InstanceOfPatternMatch.java b/src/main/java/org/openrewrite/staticanalysis/InstanceOfPatternMatch.java index 5c9c3be176..0d40412e63 100644 --- a/src/main/java/org/openrewrite/staticanalysis/InstanceOfPatternMatch.java +++ b/src/main/java/org/openrewrite/staticanalysis/InstanceOfPatternMatch.java @@ -320,6 +320,12 @@ private String patternVariableName(J.InstanceOf instanceOf, Cursor cursor) { strategy = VariableNameStrategy.short_(); } String baseName = strategy.variableName(type); + if (root instanceof J.If) { + J.If enclosingIf = cursor.firstEnclosing(J.If.class); + String nameInIfScope = VariableNameUtils.generateVariableName(baseName, new Cursor(cursor, enclosingIf), INCREMENT_NUMBER); + String nameInCursorScope = VariableNameUtils.generateVariableName(baseName, cursor, INCREMENT_NUMBER); + return nameInIfScope.compareTo(nameInCursorScope) >= 0 ? nameInIfScope : nameInCursorScope; + } return VariableNameUtils.generateVariableName(baseName, cursor, INCREMENT_NUMBER); } diff --git a/src/test/java/org/openrewrite/staticanalysis/InstanceOfPatternMatchTest.java b/src/test/java/org/openrewrite/staticanalysis/InstanceOfPatternMatchTest.java index 45f3326f11..23cdf034ad 100644 --- a/src/test/java/org/openrewrite/staticanalysis/InstanceOfPatternMatchTest.java +++ b/src/test/java/org/openrewrite/staticanalysis/InstanceOfPatternMatchTest.java @@ -15,7 +15,6 @@ */ package org.openrewrite.staticanalysis; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.openrewrite.Issue; @@ -528,7 +527,6 @@ void test(Object o) { } @Issue("https://github.com/openrewrite/rewrite/issues/2787") - @Disabled @Test void nestedPotentiallyConflictingIfs() { rewriteRun( @@ -549,11 +547,11 @@ void test(Object o) { """ public class A { void test(Object o) { - if (o instanceof String string) { - if (o instanceof String string1) { - System.out.println(string1); + if (o instanceof String string1) { + if (o instanceof String string) { + System.out.println(string); } - System.out.println(string); + System.out.println(string1); } } } @@ -562,6 +560,92 @@ void test(Object o) { ); } + @Issue("https://github.com/openrewrite/rewrite-static-analysis/issues/481") + @Test + void conflictingWithLocalVariable() { + rewriteRun( + //language=java + java( + """ + public class Main { + public class Bar {} + public class FooBar {} + public static void main(String[] args) { + Object o = new Object(); + if (o instanceof Bar) { + System.out.println(((Bar)o)); + Bar bar = null; + if (o instanceof FooBar) { + System.out.println(((FooBar)o)); + Bar bar1 = null; + } + } + } + } + """, + """ + public class Main { + public class Bar {} + public class FooBar {} + public static void main(String[] args) { + Object o = new Object(); + if (o instanceof Bar bar2) { + System.out.println(bar2); + Bar bar = null; + if (o instanceof FooBar fooBar) { + System.out.println(fooBar); + Bar bar1 = null; + } + } + } + } + """ + ) + ); + } + + @Issue("https://github.com/openrewrite/rewrite-static-analysis/issues/334") + @Test + void conflictingWithOtherInstanceOf() { + rewriteRun( + //language=java + java( + """ + public class Main { + public class Bar {} + public class FooBar {} + public static void main(String[] args) { + Object o = new Object(); + if (o instanceof Bar) { + System.out.println(((Bar)o)); + if (o instanceof FooBar) { + System.out.println(((FooBar)o)); + Bar bar1 = null; + } + } + } + } + """, + """ + public class Main { + public class Bar {} + public class FooBar {} + public static void main(String[] args) { + Object o = new Object(); + if (o instanceof Bar bar2) { + System.out.println(bar2); + if (o instanceof FooBar bar) { + System.out.println(bar); + Bar bar1 = null; + } + } + } + } + """ + ) + ); + } + @Test void expressionWithSideEffects() { rewriteRun(