Skip to content

Commit 41b5d9f

Browse files
authored
Fix Parameterized is hidden by withFullyQualifiedName (#4245)
* Fix `Parametrized` is hidden by `withFullyQualifiedName` Signed-off-by: Oleh Dokuka <[email protected]> * Use referential check Signed-off-by: OlegDokuka <[email protected]> --------- Signed-off-by: Oleh Dokuka <[email protected]> Signed-off-by: OlegDokuka <[email protected]>
1 parent 1a7b14f commit 41b5d9f

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

rewrite-java/src/main/java/org/openrewrite/java/tree/JavaType.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -715,7 +715,12 @@ public String getFullyQualifiedName() {
715715

716716
@Override
717717
public FullyQualified withFullyQualifiedName(String fullyQualifiedName) {
718-
return type.withFullyQualifiedName(fullyQualifiedName);
718+
FullyQualified qualified = type.withFullyQualifiedName(fullyQualifiedName);
719+
if (type == qualified) {
720+
return this;
721+
}
722+
723+
return new Parameterized(managedReference, qualified, typeParameters);
719724
}
720725

721726
@Override

rewrite-java/src/test/java/org/openrewrite/java/internal/template/TypeParameterTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,25 @@ void parameterized(String name) {
8989
assertThat(TypeUtils.toString(type)).isEqualTo(name);
9090
}
9191

92+
@ParameterizedTest
93+
@ValueSource(strings = {
94+
"java.util.List<java.lang.String>",
95+
"java.util.Map<java.lang.String, java.lang.Integer>",
96+
"java.util.List<? extends java.lang.Object>",
97+
"java.util.List<? super java.lang.Integer>",
98+
"java.util.List<java.util.List<? super java.lang.Integer>>",
99+
})
100+
void parameterizedWithModifierShouldNeverHideParametrizedType(String name) {
101+
TemplateParameterParser parser = new TemplateParameterParser(new CommonTokenStream(new TemplateParameterLexer(
102+
CharStreams.fromString(name))));
103+
JavaType type = TypeParameter.toFullyQualifiedName(parser.type());
104+
105+
JavaType.Parameterized pType = (JavaType.Parameterized) type;
106+
assertThat(pType.withFullyQualifiedName("test")).isInstanceOf(JavaType.Parameterized.class);
107+
assertThat(pType.withFullyQualifiedName("test")).isNotSameAs(pType);
108+
assertThat(pType.withFullyQualifiedName(pType.getFullyQualifiedName())).isSameAs(pType);
109+
}
110+
92111
@ParameterizedTest
93112
@ValueSource(strings = {
94113
"java.util.List<?>",

0 commit comments

Comments
 (0)