From 3f3f5ced5ce6f85536a9ca888352dddd13c3b5c3 Mon Sep 17 00:00:00 2001 From: Knut Wannheden Date: Fri, 24 Jan 2025 13:40:31 +0100 Subject: [PATCH] `TypeUtils#isOfType()` should not compare annotations on methods --- .../openrewrite/java/tree/TypeUtilsTest.java | 24 +++++++++++++++++++ .../org/openrewrite/java/tree/TypeUtils.java | 9 +------ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/rewrite-java-tck/src/main/java/org/openrewrite/java/tree/TypeUtilsTest.java b/rewrite-java-tck/src/main/java/org/openrewrite/java/tree/TypeUtilsTest.java index 214b81fa95e..2e025f1538a 100644 --- a/rewrite-java-tck/src/main/java/org/openrewrite/java/tree/TypeUtilsTest.java +++ b/rewrite-java-tck/src/main/java/org/openrewrite/java/tree/TypeUtilsTest.java @@ -27,6 +27,7 @@ import java.util.EnumSet; import java.util.function.Consumer; +import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -233,6 +234,29 @@ public J.VariableDeclarations.NamedVariable visitVariable(J.VariableDeclarations ); } + @Test + void methodWithAnnotationsIsOfType() { + rewriteRun( + java( + """ + class Test { + @Deprecated + void foo() {} + } + """, + spec -> spec.afterRecipe(cu -> new JavaIsoVisitor<>() { + @Override + public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration method, Object o) { + assertThat(TypeUtils.isOfType(method.getMethodType(), method.getMethodType())).isTrue(); + assertThat(TypeUtils.isOfType(method.getMethodType().withAnnotations(emptyList()), method.getMethodType())).isTrue(); + assertThat(TypeUtils.isOfType(method.getMethodType(), method.getMethodType().withAnnotations(emptyList()))).isTrue(); + return method; + } + }.visit(cu, new InMemoryExecutionContext())) + ) + ); + } + @Test void isParameterizedTypeOfType() { rewriteRun( diff --git a/rewrite-java/src/main/java/org/openrewrite/java/tree/TypeUtils.java b/rewrite-java/src/main/java/org/openrewrite/java/tree/TypeUtils.java index fb550d501cb..37187777214 100644 --- a/rewrite-java/src/main/java/org/openrewrite/java/tree/TypeUtils.java +++ b/rewrite-java/src/main/java/org/openrewrite/java/tree/TypeUtils.java @@ -139,11 +139,9 @@ public static boolean isOfType(@Nullable JavaType type1, @Nullable JavaType type JavaType.Method method1 = (JavaType.Method) type1; JavaType.Method method2 = (JavaType.Method) type2; if (!method1.getName().equals(method2.getName()) || - method1.getFlags().size() != method2.getFlags().size() || - !method1.getFlags().containsAll(method2.getFlags()) || + method1.getFlagsBitMap() != method2.getFlagsBitMap() || !TypeUtils.isOfType(method1.getDeclaringType(), method2.getDeclaringType()) || !TypeUtils.isOfType(method1.getReturnType(), method2.getReturnType()) || - method1.getAnnotations().size() != method2.getAnnotations().size() || method1.getThrownExceptions().size() != method2.getThrownExceptions().size() || method1.getParameterTypes().size() != method2.getParameterTypes().size()) { return false; @@ -159,11 +157,6 @@ public static boolean isOfType(@Nullable JavaType type1, @Nullable JavaType type return false; } } - for (int index = 0; index < method1.getAnnotations().size(); index++) { - if (!TypeUtils.isOfType(method1.getAnnotations().get(index), method2.getAnnotations().get(index))) { - return false; - } - } return true; } return type1.equals(type2);