Re: Accessing type annotations at runtime

2014-03-13 Thread Joe Darcy

Hello,

See the methods in java.lang.reflect named getAnnotedFoo which return 
java.lang.reflect.AnnotedType or a subinterface.


-Joe

On 3/13/2014 6:24 AM, Gunnar Morling wrote:

Hi,

Is it possible to retrieve type annotations (as defined by JSR 308) using
reflection at runtime? E.g. I would like to retrieve the @NotNull
annotation from a member declared like this:

 private List@NotNull String names;

I assumed that this would be possible using reflection, but I couldn't find
a way to do it. Is there an example for this somewhere? Or are type
annotations only meant to be accessed by compile-time tools such as the
Checker framework?

I noticed that the byte code of my class contains information about the
annotation, so I guess one could access it by examining the class file if
it's really not possible via the reflection API.

Many thanks,

--Gunnar




Re: Accessing type annotations at runtime

2014-03-13 Thread Gunnar Morling
Hi Joe,

Thanks for the reply and hinting me the right direction!

I had seen these methods but was missing the down-cast to
AnnotatedParameterizedType which gives access to
getAnnotatedActualTypeArguments(). In case it's helpful to others, that's
what I ended up with:

Field myField = ...;

// ListString
AnnotatedParameterizedType type = (AnnotatedParameterizedType)
declaredField.getAnnotatedType();

// String
AnnotatedType typeArg = type.getAnnotatedActualTypeArguments()[0];

// @NotNull
Annotation annotation = typeArg.getAnnotations()[0];

Thanks again,

--Gunnar



2014-03-13 15:39 GMT+01:00 Joe Darcy joe.da...@oracle.com:

 Hello,

 See the methods in java.lang.reflect named getAnnotedFoo which return
 java.lang.reflect.AnnotedType or a subinterface.

 -Joe


 On 3/13/2014 6:24 AM, Gunnar Morling wrote:

 Hi,

 Is it possible to retrieve type annotations (as defined by JSR 308) using
 reflection at runtime? E.g. I would like to retrieve the @NotNull
 annotation from a member declared like this:

  private List@NotNull String names;

 I assumed that this would be possible using reflection, but I couldn't
 find
 a way to do it. Is there an example for this somewhere? Or are type
 annotations only meant to be accessed by compile-time tools such as the
 Checker framework?

 I noticed that the byte code of my class contains information about the
 annotation, so I guess one could access it by examining the class file if
 it's really not possible via the reflection API.

 Many thanks,

 --Gunnar