Question about type annotations
Julian Bangert
bangert at google.com
Tue Oct 18 00:46:28 UTC 2016
Thanks for the quick response -- how would you prefer the stripped down
example? Should I send an error-prone testcase?
On Mon, Oct 17, 2016 at 5:38 PM Jonathan Gibbons <
jonathan.gibbons at oracle.com> wrote:
> As is typically the case in requests like this, it would help if you
> could post a working, stripped down example.
>
> You're also working with javac internal objects. It would help if you
> could post an example in terms of the public API, such as is available
> using
> com.sun.source.*
> javax.lang.model.*
>
> For example, if you have identified a node in an AST by a TreePath, use
> com.sun.source.util.Trees.getTypeMirror(TreePath)
> and then, since TypeMirror extends AnnotatedConstruct, you can get the
> annotation mirrors.
>
> See:
>
> http://download.java.net/java/jdk9/docs/jdk/api/javac/tree/com/sun/source/util/Trees.html
>
> http://download.java.net/java/jdk9/docs/api/javax/lang/model/type/TypeMirror.html
>
> http://download.java.net/java/jdk9/docs/api/javax/lang/model/AnnotatedConstruct.html
>
> -- Jon
>
> On 10/17/2016 05:18 PM, Julian Bangert wrote:
> > Hello (re-sending due to moderation),
> >
> > I am working on a checker based on the error-prone framework that
> > works with (Java 8) type annotations. The javac AST seems to be
> > missing annotation types for generic methods (and constructors on
> > generic types):
> >
> > // Annotation .java
> > package test;
> > import java.lang.annotation.ElementType;
> > import java.lang.annotation.Target;
> >
> > @Target({
> > ElementType.TYPE_USE,
> > ElementType.FIELD,
> > ElementType.LOCAL_VARIABLE,
> > ElementType.PARAMETER,
> > ElementType.METHOD
> > })
> > public interface @Annotation {}
> >
> >
> > // Generic.java
> > package test;
> > public class Generic {
> > public static <V> void Method(V value) {
> > }
> > }
> >
> > // Testcase.java
> >
> > package test;
> > import java.util.List;
> > public class Testcase {
> > void test(List<@Annotation String> list, String foo) {
> > list.add(foo);
> > Generic.<@Annotation String>Method(foo);
> > }
> > }
> >
> > Now call node.getMethodSelect() on the MethodInvocation AST nodes
> > generated by this snippet. For the first call site (list.add(foo)),
> > node.getMethodSelect() returns a JCFieldAccess with type
> >
> > "(@test.Annotation java.lang.String)boolean" (note the annotation).
> >
> > When I do the same for Generic.<@Annotation String>Method, I merely get
> > "(java.lang.String)void".
> >
> > Is this a bug or intended behaviour? Is there a way to get annotation
> > on the types (besides implementing my own lookup, which might be
> > buggy/unelegant).
> >
> > Regards,
> > Julian
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20161018/4f74ab4d/attachment-0001.html>
More information about the compiler-dev
mailing list