From e7b339280ef54d90c75e8192a57bd939d68dd5ba Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Sat, 16 Aug 2025 18:16:07 +0200 Subject: [PATCH] Do not move field annotations around arrays --- .../java/MoveFieldAnnotationToType.java | 7 +------ .../java/MoveFieldAnnotationToTypeTest.java | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/openrewrite/staticanalysis/java/MoveFieldAnnotationToType.java b/src/main/java/org/openrewrite/staticanalysis/java/MoveFieldAnnotationToType.java index 84d98188e4..6676293e7a 100644 --- a/src/main/java/org/openrewrite/staticanalysis/java/MoveFieldAnnotationToType.java +++ b/src/main/java/org/openrewrite/staticanalysis/java/MoveFieldAnnotationToType.java @@ -146,8 +146,7 @@ private boolean matchesType(J.Annotation ann) { private boolean isQualifiedClass(@Nullable TypeTree tree) { return tree instanceof J.FieldAccess || - (tree instanceof J.ParameterizedType && ((J.ParameterizedType) tree).getClazz() instanceof J.FieldAccess) || - tree instanceof J.ArrayType; + (tree instanceof J.ParameterizedType && ((J.ParameterizedType) tree).getClazz() instanceof J.FieldAccess); } private TypeTree annotateInnerClass(TypeTree qualifiedClassRef, J.Annotation annotation) { @@ -182,10 +181,6 @@ private TypeTree annotateInnerClass(TypeTree qualifiedClassRef, J.Annotation ann J.ParameterizedType pt = (J.ParameterizedType) qualifiedClassRef; return pt.withClazz(annotateInnerClass((TypeTree) pt.getClazz(), usedAnnotation)); } - if (qualifiedClassRef instanceof J.ArrayType) { - J.ArrayType at = (J.ArrayType) qualifiedClassRef; - return at.withAnnotations(ListUtils.concat(annotation.withPrefix(Space.SINGLE_SPACE), at.getAnnotations())); - } return qualifiedClassRef; } }); diff --git a/src/test/java/org/openrewrite/staticanalysis/java/MoveFieldAnnotationToTypeTest.java b/src/test/java/org/openrewrite/staticanalysis/java/MoveFieldAnnotationToTypeTest.java index b94adf346b..a6b70f899e 100644 --- a/src/test/java/org/openrewrite/staticanalysis/java/MoveFieldAnnotationToTypeTest.java +++ b/src/test/java/org/openrewrite/staticanalysis/java/MoveFieldAnnotationToTypeTest.java @@ -93,22 +93,33 @@ class Test { } @Test - void arrayFieldAnnotation() { + void arrayFieldAnnotationUnchanged() { + // As per: https://jspecify.dev/docs/user-guide/#type-use-annotation-syntax rewriteRun( //language=java java( """ import org.openrewrite.internal.lang.Nullable; - class Test { + class ArrayOfNullableElements { @Nullable String[] l; } - """, + """ + ), + java( """ import org.openrewrite.internal.lang.Nullable; - class Test { + class ArrayItselfNullable { String @Nullable[] l; } """ + ), + java( + """ + import org.openrewrite.internal.lang.Nullable; + class NullableArrayOfNullableElements { + @Nullable String @Nullable[] l; + } + """ ) ); }