Skip to content

Fix clashing variable names generated by InstanceOfPatternMatch #538

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 1, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -528,7 +527,6 @@ void test(Object o) {
}

@Issue("https://github.com/openrewrite/rewrite/issues/2787")
@Disabled
@Test
void nestedPotentiallyConflictingIfs() {
rewriteRun(
Expand All @@ -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);
}
}
}
Expand All @@ -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(
Expand Down
Loading