square / javapoet

A Java API for generating .java source files.
Apache License 2.0
10.81k stars 1.37k forks source link

WildcardTypeName doesn't emit annotations #959

Open lsingh123 opened 1 year ago

lsingh123 commented 1 year ago

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;
}
ritikverma2000 commented 1 year ago

Hi, I would like to work on this issue. Since I am new to open source world it would be great if you can guide me.