interactions between type annotations and language model APIs.
Alex Buckley
alex.buckley at oracle.com
Mon May 5 20:48:38 UTC 2014
On 5/5/2014 12:52 PM, Jonathan Gibbons wrote:
> In particular, TypeMirror is now an AnnotatedConstruct, and various
> methods in javax.lang.model.util.Types return computed TypeMirrors --
> for example, capture(TypeMirror), directSupertypes(TypeMirror),
> erasure(TypeMirror), etc.
Right, because jx.l.m.t.TypeMirror always represented the use of a type
at a particular location in source - which can now usually be annotated.
> In cases where the argument has type annotations, what type annotations
> (if any) should appear on the return value?
>
> It would help to see clarification added to the specifications, either
> generally, or on a case-by-case basis for the affected methods.
To be specific, the "generator" methods in jx.l.m.u.Types are these ten:
asMemberOf
boxedClass
capture
directSupertypes
erasure
getArrayType
getDeclaredType x2
getWildcardType
unboxedType
Generally, the "correct" thing to do would be to inspect the TypeMirror
argument and thread its type annotations into the TypeMirror result. But
not always: just because '@Foo String' appears in source does not mean
that calling directSupertypes on its mirror should return '@Foo Object'.
There is also a limitation of the API for wildcard annotations:
getWildcardType could produce a mirror for '? extends @Foo ...' and '?
super @Foo ...' but not '@Foo ? extends ...' or '@Foo ? super ...'.
Joe, what is your view on retrofitting type annotations into Types?
Alex
More information about the compiler-dev
mailing list