public class SuperTypeApplier extends Object
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.
|
Modifier and Type | Method and Description |
---|---|
protected com.sun.tools.javac.code.TargetType[] |
annotatedTargets() |
static void |
annotateSupers(List<AnnotatedTypeMirror.AnnotatedDeclaredType> supertypes,
TypeElement subtypeElement)
Annotates each supertype with annotations from subtypeElement's extends/implements clauses.
|
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 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[] |
validTargets() |
protected final AnnotatedTypeMirror type
protected final Element element
public static void annotateSupers(List<AnnotatedTypeMirror.AnnotatedDeclaredType> supertypes, TypeElement subtypeElement)
supertypes
- supertypes to annotatesubtypeElement
- element that may have annotations to apply to supertypespublic int getElementIndex()
public int getTypeCompoundIndex(com.sun.tools.javac.code.Attribute.TypeCompound anno)
anno
- an annotation we might wish to applyprotected com.sun.tools.javac.code.TargetType[] annotatedTargets()
protected com.sun.tools.javac.code.TargetType[] validTargets()
protected Iterable<com.sun.tools.javac.code.Attribute.TypeCompound> getRawTypeAttributes()
In Java 8 and later these annotations are generally contained by elements to which they apply. However, in earlier versions of Java many of these annotations are handled by either the enclosing method, e.g. parameters and method type parameters, or enclosing class, e.g. class type parameters. Therefore, many annotations are addressed by first getting all annotations on a method or class and the picking out only the ones we wish to target (see extractAndApply).
protected void handleTargeted(List<com.sun.tools.javac.code.Attribute.TypeCompound> targeted)
targeted
- the list of annotations that were returned by getRawTypeAttributes and had a
TargetType contained by annotatedTargetsprotected boolean isAccepted()
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()
This method will throw a runtime exception if isAccepted returns false.