Skip to content

Commit 456976e

Browse files
Fix parsing of type-use annotations on qualified types in array declarations (#7289)
1 parent 8ce5581 commit 456976e

6 files changed

Lines changed: 68 additions & 5 deletions

File tree

rewrite-java-11/src/main/java/org/openrewrite/java/isolated/ReloadableJava11ParserVisitor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1357,7 +1357,12 @@ private TypeTree arrayTypeTree(Tree tree, Map<Integer, JCAnnotation> annotationP
13571357

13581358
List<J.Annotation> leadingAnnotations = leadingAnnotations(annotationPosTable);
13591359
Space prefix = whitespace();
1360-
TypeTree elemType = convert(typeIdent);
1360+
TypeTree elemType;
1361+
if (!annotationPosTable.isEmpty() && typeIdent instanceof JCFieldAccess) {
1362+
elemType = annotatedTypeTree(typeIdent, annotationPosTable);
1363+
} else {
1364+
elemType = convert(typeIdent);
1365+
}
13611366
List<J.Annotation> annotations = leadingAnnotations(annotationPosTable);
13621367
JLeftPadded<Space> dimension = padLeft(sourceBefore("["), sourceBefore("]"));
13631368
assert arrayTypeTree != null;

rewrite-java-17/src/main/java/org/openrewrite/java/isolated/ReloadableJava17ParserVisitor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1500,7 +1500,12 @@ private TypeTree arrayTypeTree(Tree tree, Map<Integer, JCAnnotation> annotationP
15001500

15011501
List<J.Annotation> leadingAnnotations = leadingAnnotations(annotationPosTable);
15021502
Space prefix = whitespace();
1503-
TypeTree elemType = convert(typeIdent);
1503+
TypeTree elemType;
1504+
if (!annotationPosTable.isEmpty() && typeIdent instanceof JCFieldAccess) {
1505+
elemType = annotatedTypeTree(typeIdent, annotationPosTable);
1506+
} else {
1507+
elemType = convert(typeIdent);
1508+
}
15041509
List<J.Annotation> annotations = leadingAnnotations(annotationPosTable);
15051510
JLeftPadded<Space> dimension = padLeft(sourceBefore("["), sourceBefore("]"));
15061511
assert arrayTypeTree != null;

rewrite-java-21/src/main/java/org/openrewrite/java/isolated/ReloadableJava21ParserVisitor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1531,7 +1531,12 @@ private TypeTree arrayTypeTree(Tree tree, Map<Integer, JCAnnotation> annotationP
15311531

15321532
List<J.Annotation> leadingAnnotations = leadingAnnotations(annotationPosTable);
15331533
Space prefix = whitespace();
1534-
TypeTree elemType = convert(typeIdent);
1534+
TypeTree elemType;
1535+
if (!annotationPosTable.isEmpty() && typeIdent instanceof JCFieldAccess) {
1536+
elemType = annotatedTypeTree(typeIdent, annotationPosTable);
1537+
} else {
1538+
elemType = convert(typeIdent);
1539+
}
15351540
List<J.Annotation> annotations = leadingAnnotations(annotationPosTable);
15361541
JLeftPadded<Space> dimension = padLeft(sourceBefore("["), sourceBefore("]"));
15371542
assert arrayTypeTree != null;

rewrite-java-25/src/main/java/org/openrewrite/java/isolated/ReloadableJava25ParserVisitor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1565,7 +1565,12 @@ private TypeTree arrayTypeTree(Tree tree, Map<Integer, JCAnnotation> annotationP
15651565

15661566
List<J.Annotation> leadingAnnotations = leadingAnnotations(annotationPosTable);
15671567
Space prefix = whitespace();
1568-
TypeTree elemType = convert(typeIdent);
1568+
TypeTree elemType;
1569+
if (!annotationPosTable.isEmpty() && typeIdent instanceof JCFieldAccess) {
1570+
elemType = annotatedTypeTree(typeIdent, annotationPosTable);
1571+
} else {
1572+
elemType = convert(typeIdent);
1573+
}
15691574
List<J.Annotation> annotations = leadingAnnotations(annotationPosTable);
15701575
JLeftPadded<Space> dimension = padLeft(sourceBefore("["), sourceBefore("]"));
15711576
assert arrayTypeTree != null;

rewrite-java-8/src/main/java/org/openrewrite/java/ReloadableJava8ParserVisitor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1350,7 +1350,12 @@ private TypeTree arrayTypeTree(Tree tree, Map<Integer, JCAnnotation> annotationP
13501350

13511351
List<J.Annotation> leadingAnnotations = leadingAnnotations(annotationPosTable);
13521352
Space prefix = whitespace();
1353-
TypeTree elemType = convert(typeIdent);
1353+
TypeTree elemType;
1354+
if (!annotationPosTable.isEmpty() && typeIdent instanceof JCFieldAccess) {
1355+
elemType = annotatedTypeTree(typeIdent, annotationPosTable);
1356+
} else {
1357+
elemType = convert(typeIdent);
1358+
}
13541359
List<J.Annotation> annotations = leadingAnnotations(annotationPosTable);
13551360
JLeftPadded<Space> dimension = padLeft(sourceBefore("["), sourceBefore("]"));
13561361
assert arrayTypeTree != null;

rewrite-java-test/src/test/java/org/openrewrite/java/RemoveUnusedImportsTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2412,4 +2412,42 @@ public void init() {
24122412
)
24132413
);
24142414
}
2415+
2416+
@Test
2417+
void retainTypeUseAnnotationOnQualifiedArrayType() {
2418+
rewriteRun(
2419+
java(
2420+
"""
2421+
package ann;
2422+
import java.lang.annotation.ElementType;
2423+
import java.lang.annotation.Retention;
2424+
import java.lang.annotation.RetentionPolicy;
2425+
import java.lang.annotation.Target;
2426+
2427+
@Retention(RetentionPolicy.RUNTIME)
2428+
@Target(ElementType.TYPE_USE)
2429+
public @interface Nullable {
2430+
}
2431+
"""
2432+
),
2433+
java(
2434+
"""
2435+
package foo;
2436+
public class Outer {
2437+
public static class Inner {}
2438+
}
2439+
"""
2440+
),
2441+
java(
2442+
"""
2443+
import ann.Nullable;
2444+
import foo.Outer;
2445+
2446+
class Test {
2447+
Outer.@Nullable Inner[] items;
2448+
}
2449+
"""
2450+
)
2451+
);
2452+
}
24152453
}

0 commit comments

Comments
 (0)