Annotation on Intersectingtype

Jan Lahoda jan.lahoda at oracle.com
Wed Jan 22 06:11:15 PST 2014


Alex,

On 01/21/2014 11:08 PM, Alex Buckley wrote:
> Mohan,
>
> Yes, it is possible. The class file can encode an annotation on the i'th
> bound of the j'th type parameter of a generic class, interface, method,
> or constructor. In the Language Model API, you need to get the
> TypeParameterElement for T, then call getBounds() to get a list of
> TypeMirrors, one mirror per bound. Each mirror should expose the
> annotations appearing before the corresponding bound. Unfortunately,
> you'll probably run into the bug that TypeParameterElements don't return
> anything useful.
>
> Joe, Eric,
>
> I am suspicious of the following text from jx.l.m.t.IntersectionType:
>
> "For example, the bound of the type parameter <T extends Number &
> Runnable> is an (implicit) intersection type. As of RELEASE_8, this is
> represented by an IntersectionType with Number and Runnable as its bounds."
>
> While "Number & Runnable" is technically an intersection type, there is
> no way to get a single IntersectionType mirror for the entire 'extends'
> clause of a type parameter. A TypeParameterElement exposes a list of
> mirrors. (I suppose it could be a one-element list, where the sole
> mirror is an IntersectionType, but that would be a behavioral change
> from SE 7.) Literally any other use of an intersection type would be a

I think one can (currently) get an IntersectionType from 
javax.lang.model.type.TypeVariable.getUpperBound(), if the type variable 
was declared with multiple (upper) bounds.

Jan

> better example here, e.g. in a cast.
>
> Alex
>
> On 1/19/2014 10:15 PM, Mohan Radhakrishnan wrote:
>>
>> Subject was missed.
>>
>> On Mon, Jan 20, 2014 at 11:44 AM, Mohan Radhakrishnan
>> <radhakrishnan.mohan at gmail.com <mailto:radhakrishnan.mohan at gmail.com>>
>> wrote:
>>
>>     Hi,
>>
>>              I was trying to detect an intersection type and print the
>>     annotation only if it is. Is that possible ? I may be
>>     misunderstanding this.
>>
>>                     Should I try this
>>     " if( typeMirror instanceof javax.lang.model.type.IntersectionType)
>>     { }" ?
>>
>>
>>
>>     public class IntersectionType {
>>
>>          @Retention(RetentionPolicy.RUNTIME)
>>          @Target(ElementType.TYPE_USE)
>>          public @interface TypeUses {
>>              TypeUse[] value();
>>          }
>>
>>          @Retention(RetentionPolicy.RUNTIME)
>>          @Target(ElementType.TYPE_USE)
>>          @Repeatable(TypeUses.class)
>>          protected @interface  TypeUse {
>>              int value();
>>          }
>>
>>          class Test<T extends String & @IntersectionType.TypeUse(value =
>>     2) Serializable>{
>>
>>          }
>>
>>          class Test1<T extends @IntersectionType.TypeUse(value =
>> 2)String>{
>>
>>          }
>>
>>     }
>>
>>     Thanks,
>>     Mohan
>>
>>


More information about the type-annotations-dev mailing list