After the fix for https://bugs.openjdk.java.net/browse/JDK-8281238, TypeMirror#toString does not print the enclosing class name for static member classes with type annotations, e.g. it prints `java.util.@p.T.A Entry<?,?>` for `java.util.Map.Entry` (omitting the 'Map')
```
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic;
@SupportedAnnotationTypes("*")
public class P extends AbstractProcessor {
@Override
public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latestSupported();
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element e : processingEnv.getElementUtils().getTypeElement("p.T").getEnclosedElements()) {
if (e.getKind().equals(ElementKind.FIELD)) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, e.asType().toString());
}
}
return false;
}
}
```
```
package p;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.util.Map.Entry;
class T {
@Target(ElementType.TYPE_USE)
@interface A {}
@A Entry<?, ?> e;
}
```
$ javac -fullversion -processor P T.java
javac full version "18-ea+35-2085"
Note: @p.T.A java.util.Map.Entry<?,?>
Note: @p.T.A java.util.Map.Entry<?,?>
$ javac -fullversion -processor P T.java
javac full version "19-ea+15-942"
Note: java.util.@p.T.A Entry<?,?>
Note: java.util.@p.T.A Entry<?,?>
```
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic;
@SupportedAnnotationTypes("*")
public class P extends AbstractProcessor {
@Override
public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latestSupported();
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element e : processingEnv.getElementUtils().getTypeElement("p.T").getEnclosedElements()) {
if (e.getKind().equals(ElementKind.FIELD)) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, e.asType().toString());
}
}
return false;
}
}
```
```
package p;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.util.Map.Entry;
class T {
@Target(ElementType.TYPE_USE)
@interface A {}
@A Entry<?, ?> e;
}
```
$ javac -fullversion -processor P T.java
javac full version "18-ea+35-2085"
Note: @p.T.A java.util.Map.Entry<?,?>
Note: @p.T.A java.util.Map.Entry<?,?>
$ javac -fullversion -processor P T.java
javac full version "19-ea+15-942"
Note: java.util.@p.T.A Entry<?,?>
Note: java.util.@p.T.A Entry<?,?>
- relates to
-
JDK-8281238 TYPE_USE annotations not printed in correct position in toString output
-
- Resolved
-