[JSR308] Note about asDefined method
Mahmood Ali
mahmood at MIT.EDU
Tue Sep 16 16:34:19 EDT 2008
Hi Artemus,
The method sounds good for your purposes.
However, it would fail for cases where type variables extend each
other, like in:
class MyClass<E, V extends E> { V field; }
You can use a while-loop instead of the first 'if' or call the method
recursively.
Regards,
Mahmood
On Sep 16, 2008, at 1:22 PM, Artemus Harper wrote:
> /**
> * Gets the a type as its defined. For example if type was @Anno
> String s = "hello". This would return the annotations as declared on
> the String class.
> * Primitives and arrays are returned without any annotations.
> * @param type
> * @param factory
> * @return The type as its defined
> */
> public static AnnotatedTypeMirror asDefined(AnnotatedTypeMirror
> type, AnnotatedTypeFactory factory)
> {
> if(type instanceof AnnotatedTypeVariable)
> {
> type = ((AnnotatedTypeVariable)type).getUpperBound();
> }
> if(type instanceof AnnotatedDeclaredType)
> return
> factory
> .getAnnotatedType
> (((AnnotatedDeclaredType)type).getUnderlyingType().asElement());
> else if(type instanceof AnnotatedPrimitiveType || type
> instanceof AnnotatedArrayType)
> return type.getCopy(false);
> else
> throw new IllegalArgumentException("type is not
> assignable");
> }
More information about the JSR308
mailing list