WildcardTypeName doesn't emit annotations
Author: lsingh123Created Feb 14, 2023Updated Feb 25, 2023
WildcardTypeName ignores its annotations when emitting. For example, consider the following code:
WildcardTypeName wildcard = WildcardTypeName.subtypeOf(com.squareup.javapoet.TypeName.LONG.box())
.annotated(List.of(AnnotationSpec.builder(Safe.class).build()));
ParameterizedTypeName paramTypeName = ParameterizedTypeName.get(ClassName.get(Optional.class), wildcard);
TypeSpec testTypeSpec = TypeSpec.classBuilder("PoetTestClass")
.addField(paramTypeName, "testWildcardField", Modifier.PRIVATE)
.build();
JavaFile file = JavaFile.builder("com.poet.test", testTypeSpec)
.skipJavaLangImports(true)
.indent(" ")
.build();
file.writeTo(tempDir.toPath(), StandardCharsets.UTF_8);We expect this to output:
package com.poet.test;
import java.util.Optional;
class PoetTestClass {
private Optional<@Safe ? extends Long> testWildcardField;
}But instead it outputs:
package com.poet.test;
import java.util.Optional;
class PoetTestClass {
private Optional<? extends Long> testWildcardField;
}Source: square/javapoet