public class ClassTypeParamApplier extends Object
TypeParamElementAnnotationApplier
for details.Modifier and Type | Field and Description |
---|---|
protected Element |
element
An Element that type represents.
|
protected AnnotatedTypeMirror |
type
The type to which we wish to apply annotations.
|
protected AnnotatedTypeFactory |
typeFactory |
protected AnnotatedTypeMirror.AnnotatedTypeVariable |
typeParam |
Modifier and Type | Method and Description |
---|---|
static boolean |
accepts(AnnotatedTypeMirror type,
Element element) |
protected com.sun.tools.javac.code.TargetType[] |
annotatedTargets() |
static void |
apply(AnnotatedTypeMirror.AnnotatedTypeVariable type,
Element element,
AnnotatedTypeFactory typeFactory) |
void |
extractAndApply()
Reads the list of annotations that apply to this element (see getRawTypeAttributes).
|
int |
getElementIndex()
The index of element in the list of elements that contains it
|
protected Iterable<com.sun.tools.javac.code.Attribute.TypeCompound> |
getRawTypeAttributes()
Annotations on elements are represented as Attribute.TypeCompounds ( a subtype of AnnotationMirror) that
are usually accessed through a getRawTypeAttributes method on the element.
|
int |
getTypeCompoundIndex(com.sun.tools.javac.code.Attribute.TypeCompound anno)
A TypeAnnotationPosition has a number of different indexes (type_index, bound_index, param_index)
Return the index we are interested in.
|
protected void |
handleInvalid(List<com.sun.tools.javac.code.Attribute.TypeCompound> invalid) |
protected void |
handleTargeted(List<com.sun.tools.javac.code.Attribute.TypeCompound> targeted)
This method should apply all annotations that are handled by this object.
|
protected void |
handleValid(List<com.sun.tools.javac.code.Attribute.TypeCompound> valid)
The default implementation of this method does nothing.
|
protected boolean |
isAccepted()
Tests element/type fields to ensure that this TargetedElementAnnotationApplier is valid for
this element/type pair.
|
protected com.sun.tools.javac.code.TargetType |
lowerBoundTarget() |
protected Map<org.checkerframework.framework.util.element.TargetedElementAnnotationApplier.TargetClass,List<com.sun.tools.javac.code.Attribute.TypeCompound>> |
sift(Iterable<com.sun.tools.javac.code.Attribute.TypeCompound> typeCompounds)
Separate the input annotations into a Map of TargetClass (TARGETED, VALID, INVALID) to the annotations
that fall into each of those categories.
|
protected com.sun.tools.javac.code.TargetType |
upperBoundTarget() |
protected com.sun.tools.javac.code.TargetType[] |
validTargets() |
protected final AnnotatedTypeMirror.AnnotatedTypeVariable typeParam
protected final AnnotatedTypeFactory typeFactory
protected final AnnotatedTypeMirror type
protected final Element element
public static void apply(AnnotatedTypeMirror.AnnotatedTypeVariable type, Element element, AnnotatedTypeFactory typeFactory)
public static boolean accepts(AnnotatedTypeMirror type, Element element)
protected com.sun.tools.javac.code.TargetType lowerBoundTarget()
protected com.sun.tools.javac.code.TargetType upperBoundTarget()
public int getElementIndex()
protected com.sun.tools.javac.code.TargetType[] validTargets()
protected Iterable<com.sun.tools.javac.code.Attribute.TypeCompound> getRawTypeAttributes()
protected boolean isAccepted()
protected com.sun.tools.javac.code.TargetType[] annotatedTargets()
public int getTypeCompoundIndex(com.sun.tools.javac.code.Attribute.TypeCompound anno)
anno
- an annotation we might wish to applyprotected void handleTargeted(List<com.sun.tools.javac.code.Attribute.TypeCompound> targeted)
targeted
- the list of annotations that were on the lower/upper bounds of the type parameter
Note: When handling type parameters we NEVER add primary annotations to the type parameter.
Primary annotations are reserved for the use of a type parameter (e.g. @Nullable T t; )
If an annotation is present on the type parameter itself, it represents the lower-bound annotation
of that type parameter. Any annotation on the extends bound of a type parameter is placed on
that bound.protected Map<org.checkerframework.framework.util.element.TargetedElementAnnotationApplier.TargetClass,List<com.sun.tools.javac.code.Attribute.TypeCompound>> sift(Iterable<com.sun.tools.javac.code.Attribute.TypeCompound> typeCompounds)
typeCompounds
- annotations to sift through, should be those returned by getRawTypeAttributesprotected void handleValid(List<com.sun.tools.javac.code.Attribute.TypeCompound> valid)
valid
- the list of annotations that were returned by getRawTypeAttributes and had a TargetType
contained by valid and NOT annotatedTargetsprotected void handleInvalid(List<com.sun.tools.javac.code.Attribute.TypeCompound> invalid)
invalid
- the list of annotations that were returned by getRawTypeAttributes and were not
handled by handleTargeted or handleValidpublic void extractAndApply()