From e5ada30c8f37e73baf20607af2becddbf9fec42d Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Mon, 17 Jun 2024 18:15:56 +0200 Subject: [PATCH 1/2] Allow J.Empty type parameters in SemanticallyEqual --- .../java/search/SemanticallyEqualTest.java | 13 +++++++++++++ .../openrewrite/java/search/SemanticallyEqual.java | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/rewrite-java-test/src/test/java/org/openrewrite/java/search/SemanticallyEqualTest.java b/rewrite-java-test/src/test/java/org/openrewrite/java/search/SemanticallyEqualTest.java index 7be41ac53ab..2a501f63a5b 100644 --- a/rewrite-java-test/src/test/java/org/openrewrite/java/search/SemanticallyEqualTest.java +++ b/rewrite-java-test/src/test/java/org/openrewrite/java/search/SemanticallyEqualTest.java @@ -298,6 +298,19 @@ class T { ); } + @Test + void generics() { + assertExpressionsEqual( + """ + import java.util.List; + class T { + List a = new java.util.ArrayList(); + List b = new java.util.ArrayList<>(); + } + """ + ); + } + private void assertEqualToSelf(@Language("java") String a) { assertEqual(a, a); } diff --git a/rewrite-java/src/main/java/org/openrewrite/java/search/SemanticallyEqual.java b/rewrite-java/src/main/java/org/openrewrite/java/search/SemanticallyEqual.java index b7221e049a4..1fa70ed3fee 100644 --- a/rewrite-java/src/main/java/org/openrewrite/java/search/SemanticallyEqual.java +++ b/rewrite-java/src/main/java/org/openrewrite/java/search/SemanticallyEqual.java @@ -1088,7 +1088,9 @@ public J.ParameterizedType visitParameterizedType(J.ParameterizedType type, J j) return type; } - this.visitList(type.getTypeParameters(), compareTo.getTypeParameters()); + if (!(type.getTypeParameters().get(0) instanceof J.Empty || compareTo.getTypeParameters().get(0) instanceof J.Empty)) { + this.visitList(type.getTypeParameters(), compareTo.getTypeParameters()); + } } return type; } From b8d40cd05f84fcf9e40b0d39dc65a4b08badf3b4 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Mon, 17 Jun 2024 18:19:54 +0200 Subject: [PATCH 2/2] Expand tests for generics just to show type is checked --- .../java/search/SemanticallyEqualTest.java | 65 +++++++++++++++---- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/rewrite-java-test/src/test/java/org/openrewrite/java/search/SemanticallyEqualTest.java b/rewrite-java-test/src/test/java/org/openrewrite/java/search/SemanticallyEqualTest.java index 2a501f63a5b..d07b4c597ac 100644 --- a/rewrite-java-test/src/test/java/org/openrewrite/java/search/SemanticallyEqualTest.java +++ b/rewrite-java-test/src/test/java/org/openrewrite/java/search/SemanticallyEqualTest.java @@ -17,6 +17,7 @@ import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Nested; import org.junitpioneer.jupiter.ExpectedToFail; import org.junitpioneer.jupiter.cartesian.CartesianTest; import org.openrewrite.java.JavaIsoVisitor; @@ -298,17 +299,59 @@ class T { ); } - @Test - void generics() { - assertExpressionsEqual( - """ - import java.util.List; - class T { - List a = new java.util.ArrayList(); - List b = new java.util.ArrayList<>(); - } - """ - ); + @Nested + class Generics { + @Test + void firstEmpty() { + assertExpressionsEqual( + """ + import java.util.List; + class T { + List a = new java.util.ArrayList(); + List b = new java.util.ArrayList<>(); + } + """ + ); + } + + @Test + void secondEmpty() { + assertExpressionsEqual( + """ + import java.util.List; + class T { + List a = new java.util.ArrayList<>(); + List b = new java.util.ArrayList(); + } + """ + ); + } + + @Test + void bothEmpty() { + assertExpressionsEqual( + """ + import java.util.List; + class T { + List a = new java.util.ArrayList<>(); + List b = new java.util.ArrayList<>(); + } + """ + ); + } + + @Test + void bothEmptyButDifferent() { + assertExpressionsNotEqual( + """ + import java.util.List; + class T { + List a = new java.util.ArrayList<>(); + List b = new java.util.ArrayList<>(); + } + """ + ); + } } private void assertEqualToSelf(@Language("java") String a) {