<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
Hi,<br>
<br>
I have added the test case below to [1], will do some research on
it,<br>
<br>
Thanks,<br>
Vicente<br>
<br>
[1] <a href="https://bugs.openjdk.org/browse/JDK-8225377" target="_blank" class="moz-txt-link-freetext">https://bugs.openjdk.org/browse/JDK-8225377</a><br>
<br>
<div class="moz-cite-prefix">On 2/15/23 22:57, Liam Miller-Cushon
wrote:<br>
</div>
<blockquote type="cite" cite="mid:CAL4QsgsgqX2a-w+naSE2Wh+VpHDh-DxoBxhz=0m=Q73vSMbpmQ@mail.gmail.com">
<div dir="ltr">
<div>Should `<span style="color:rgb(0,0,0)">sAsType.getAnnotations()`
be `</span>sAsType.getAnnotationMirrors()`?</div>
<div><br>
</div>
<div>It works for me if B is being compiled from source as part
of the same compilation doing the annotation processing, but
not if B is loaded from the classpath, which is
consistent with this known issue: <a href="https://bugs.openjdk.org/browse/JDK-8225377" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">https://bugs.openjdk.org/browse/JDK-8225377</a></div>
<br>
$ javac -processor P -implicit:none -sourcepath : -parameters
A.java B.java<br>
Note: B.c(java.lang.@A String).s has annotations [@A]<br>
Note: B.c(java.lang.@A String).s has annotations [@A]<br>
$ javac -processor P -implicit:none -sourcepath : -parameters
A.java<br>
Note: B.c(java.lang.String).s has annotations []<br>
Note: B.c(java.lang.String).s has annotations []<br>
<br>
=== A.java ===<br>
import java.lang.annotation.ElementType;<br>
import java.lang.annotation.Retention;<br>
import java.lang.annotation.RetentionPolicy;<br>
import java.lang.annotation.Target;<br>
<br>
@Retention(RetentionPolicy.RUNTIME)<br>
@Target({ElementType.TYPE_USE})<br>
public @interface A {}<br>
=== B.java ===<br>
public final class B {<br>
public static final void c(@A String s) {}<br>
}<br>
=== P.java ===<br>
import java.util.Set;<br>
import javax.annotation.processing.AbstractProcessor;<br>
import javax.annotation.processing.RoundEnvironment;<br>
import javax.annotation.processing.SupportedAnnotationTypes;<br>
import javax.lang.model.SourceVersion;<br>
import javax.lang.model.element.Element;<br>
import javax.lang.model.element.ExecutableElement;<br>
import javax.lang.model.element.TypeElement;<br>
import javax.lang.model.element.VariableElement;<br>
import javax.lang.model.type.TypeMirror;<br>
import javax.lang.model.util.Elements;<br>
import javax.tools.Diagnostic;<br>
<br>
@SupportedAnnotationTypes("*")<br>
public class P extends AbstractProcessor {<br>
@Override<br>
public SourceVersion getSupportedSourceVersion() {<br>
return SourceVersion.latestSupported();<br>
}<br>
<br>
@Override<br>
public boolean process(Set<? extends TypeElement>
annotations, RoundEnvironment roundEnv) {<br>
Elements elements = processingEnv.getElementUtils();<br>
Element e = elements.getTypeElement("B");<br>
ExecutableElement c = (ExecutableElement)
e.getEnclosedElements().get(1);<br>
VariableElement s = c.getParameters().get(0);<br>
TypeMirror sAsType = s.asType();<br>
processingEnv<br>
.getMessager()<br>
.printMessage(<br>
Diagnostic.Kind.NOTE,<br>
String.format(<br>
"%s.%s.%s has annotations [%s]", e, c, s,
sAsType.getAnnotationMirrors()));<br>
return false;<br>
}<br>
}<br>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Wed, Feb 15, 2023 at 6:00
PM Laird Nelson <<a href="mailto:ljnelson@gmail.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">ljnelson@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div dir="ltr">On Wed, Feb 15, 2023 at 5:07 PM Alex Buckley
<<a href="mailto:alex.buckley@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">alex.buckley@oracle.com</a>>
wrote:<br>
</div>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">Via
ExecutableElement::getParameters, the VariableElement
which <br>
represents the declaration of formal parameter `s`
should expose a <br>
TypeMirror for the type `@A String`.<br>
</blockquote>
<div><br>
</div>
<div>Thank you. That is exactly what I expected. It does
not. Should I file a bug?</div>
<div><br>
</div>
<div>Test code excerpted below:</div>
<div><br>
</div>
<div>Element e = elements.getTypeElement("B");</div>
<div>ExecutableElement c =
(ExecutableElement)e.getEnclosedElements().get(1); // 0
is the implicit constructor; 1 is the c method<br>
assert "c".equals(c.getSimpleName().toString()); // yep,
got the right method</div>
<div>VariableElement s =
(VariableElement)c.getParameters().get(0);<br>
assert "s".equals(s.getSimpleName().toString()); // yep,
got the right parameter</div>
<div>DeclaredType sAsType = (DeclaredType)s.asType();</div>
<div>assert !sAsType.getAnnotations().isEmpty(); // fails;
it is empty</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Laird</div>
</div>
</div>
</blockquote>
</div>
</blockquote>
<br>
</body>
</html>