public class ApNavigator extends java.lang.Object implements Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
Navigator
implementation for annotation processing.
TODO: check the spec on how generics are supposed to be handledREFLECTION
Constructor and Description |
---|
ApNavigator(javax.annotation.processing.ProcessingEnvironment env) |
Modifier and Type | Method and Description |
---|---|
javax.lang.model.element.TypeElement |
asDecl(java.lang.Class c)
Gets the
C representation for the given class. |
javax.lang.model.element.TypeElement |
asDecl(javax.lang.model.type.TypeMirror m)
If the given type is an use of class declaration,
returns the type casted as
C . |
javax.lang.model.type.TypeMirror |
erasure(javax.lang.model.type.TypeMirror t)
Computes the erasure
|
javax.lang.model.element.TypeElement |
findClass(java.lang.String className,
javax.lang.model.element.TypeElement referencePoint)
Finds the class/interface/enum/annotation of the given name.
|
javax.lang.model.type.TypeMirror |
getBaseClass(javax.lang.model.type.TypeMirror type,
javax.lang.model.element.TypeElement sup)
Gets the parameterization of the given base type.
|
Location |
getClassLocation(javax.lang.model.element.TypeElement typeElement)
Returns a location of the specified class.
|
java.lang.String |
getClassName(javax.lang.model.element.TypeElement t)
Gets the fully-qualified name of the class.
|
java.lang.String |
getClassShortName(javax.lang.model.element.TypeElement t)
Gets the short name of the class ("Object" for
Object .)
For nested classes, this method should just return the inner name. |
javax.lang.model.type.TypeMirror |
getComponentType(javax.lang.model.type.TypeMirror t)
Gets the component type of the array.
|
javax.lang.model.element.VariableElement |
getDeclaredField(javax.lang.model.element.TypeElement clazz,
java.lang.String fieldName)
Gets the named field declared on the given class.
|
java.util.Collection<javax.lang.model.element.VariableElement> |
getDeclaredFields(javax.lang.model.element.TypeElement typeElement)
Gets all the declared fields of the given class.
|
java.util.Collection<javax.lang.model.element.ExecutableElement> |
getDeclaredMethods(javax.lang.model.element.TypeElement typeElement)
Gets all the declared methods of the given class
(regardless of their access modifiers, regardless
of whether they override methods of the base classes.)
|
javax.lang.model.element.TypeElement |
getDeclaringClassForField(javax.lang.model.element.VariableElement f)
Gets the class that declares the given field.
|
javax.lang.model.element.TypeElement |
getDeclaringClassForMethod(javax.lang.model.element.ExecutableElement m)
Gets the class that declares the given method.
|
javax.lang.model.element.VariableElement[] |
getEnumConstants(javax.lang.model.element.TypeElement clazz)
Gets the enumeration constants from an enum class.
|
Location |
getFieldLocation(javax.lang.model.element.VariableElement variableElement) |
java.lang.String |
getFieldName(javax.lang.model.element.VariableElement f)
Gets the name of the field.
|
javax.lang.model.type.TypeMirror |
getFieldType(javax.lang.model.element.VariableElement f)
Gets the type of the field.
|
Location |
getMethodLocation(javax.lang.model.element.ExecutableElement executableElement) |
java.lang.String |
getMethodName(javax.lang.model.element.ExecutableElement m)
Gets the name of the method, such as "toString" or "equals".
|
javax.lang.model.type.TypeMirror[] |
getMethodParameters(javax.lang.model.element.ExecutableElement m)
Returns the list of parameters to the method.
|
java.lang.String |
getPackageName(javax.lang.model.element.TypeElement clazz)
Gets the package name of the given class.
|
javax.lang.model.type.TypeMirror |
getPrimitive(java.lang.Class primitiveType)
Returns the representation for the given primitive type.
|
javax.lang.model.type.TypeMirror |
getReturnType(javax.lang.model.element.ExecutableElement m)
Gets the return type of a method.
|
javax.lang.model.element.TypeElement |
getSuperClass(javax.lang.model.element.TypeElement typeElement)
Gets the base class of the specified class.
|
javax.lang.model.type.TypeMirror |
getTypeArgument(javax.lang.model.type.TypeMirror typeMirror,
int i)
Gets the i-th type argument from a parameterized type.
|
java.lang.String |
getTypeName(javax.lang.model.type.TypeMirror typeMirror)
Gets the display name of the type object
|
javax.lang.model.type.TypeMirror |
getVoidType()
Gets the representation of the primitive "void" type.
|
boolean |
hasDefaultConstructor(javax.lang.model.element.TypeElement t)
Returns true if the given class has a no-arg default constructor.
|
boolean |
isAbstract(javax.lang.model.element.TypeElement clazz)
Returns true if this is an abstract class.
|
boolean |
isArray(javax.lang.model.type.TypeMirror type)
Checks if the type is an array type.
|
boolean |
isArrayButNotByteArray(javax.lang.model.type.TypeMirror t)
Checks if the type is an array type but not byte[].
|
boolean |
isBridgeMethod(javax.lang.model.element.ExecutableElement method)
Returns true if this method is a bridge method as defined in JLS.
|
boolean |
isEnum(javax.lang.model.element.TypeElement t)
Returns true if this is an enum class.
|
boolean |
isFinal(javax.lang.model.element.TypeElement clazz)
Returns true if this is a final class.
|
boolean |
isFinalMethod(javax.lang.model.element.ExecutableElement m)
Returns true if the method is final.
|
boolean |
isInnerClass(javax.lang.model.element.TypeElement clazz)
Returns true if the given class is an inner class.
|
boolean |
isInterface(javax.lang.model.element.TypeElement clazz)
Returns true if 'clazz' is an interface.
|
boolean |
isOverriding(javax.lang.model.element.ExecutableElement method,
javax.lang.model.element.TypeElement base)
Returns true if the given method is overriding another one
defined in the base class 'base' or its ancestors.
|
boolean |
isParameterizedType(javax.lang.model.type.TypeMirror typeMirror)
Returns true if t is a parameterized type.
|
boolean |
isPrimitive(javax.lang.model.type.TypeMirror t)
Checks if the given type is a primitive type.
|
boolean |
isPublicField(javax.lang.model.element.VariableElement f)
Returns true if the field is public.
|
boolean |
isPublicMethod(javax.lang.model.element.ExecutableElement m)
Returns true if the method is public.
|
boolean |
isSameType(javax.lang.model.type.TypeMirror t1,
javax.lang.model.type.TypeMirror t2)
Checks if types are the same
|
boolean |
isStaticField(javax.lang.model.element.VariableElement f)
Returns true if the field is static.
|
boolean |
isStaticMethod(javax.lang.model.element.ExecutableElement m)
Returns true if the method is static.
|
boolean |
isSubClassOf(javax.lang.model.type.TypeMirror sub,
javax.lang.model.type.TypeMirror sup)
Checks if
sub is a sub-type of sup . |
boolean |
isTransient(javax.lang.model.element.VariableElement f)
Returns true if the field is transient.
|
javax.lang.model.type.TypeMirror |
ref(java.lang.Class c)
Gets the representation of the given Java type in
T . |
javax.lang.model.type.TypeMirror |
use(javax.lang.model.element.TypeElement t)
Gets the T for the given C.
|
public ApNavigator(javax.annotation.processing.ProcessingEnvironment env)
public javax.lang.model.element.TypeElement getSuperClass(javax.lang.model.element.TypeElement typeElement)
Navigator
getSuperClass
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
Object
.public javax.lang.model.type.TypeMirror getBaseClass(javax.lang.model.type.TypeMirror type, javax.lang.model.element.TypeElement sup)
Navigator
For example, given the following
This method works like this:interface Foo extends List > {} interface Bar extends Foo
{}
getBaseClass( Bar, List ) = List getBaseClass( Bar, Foo ) = Foo
getBaseClass( Foo extends Number>, Collection ) = Collection > getBaseClass( ArrayList extends BigInteger>, List ) = List extends BigInteger>
getBaseClass
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
type
- The type that derives from baseType
sup
- The class whose parameterization we are interested in.baseType
in type
.
or null if the type is not assignable to the base type.public java.lang.String getClassName(javax.lang.model.element.TypeElement t)
Navigator
Object
)getClassName
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public java.lang.String getTypeName(javax.lang.model.type.TypeMirror typeMirror)
Navigator
getTypeName
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public java.lang.String getClassShortName(javax.lang.model.element.TypeElement t)
Navigator
Object
.)
For nested classes, this method should just return the inner name.
(for example "Inner" for "com.acme.Outer$Inner".getClassShortName
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public java.util.Collection<javax.lang.model.element.VariableElement> getDeclaredFields(javax.lang.model.element.TypeElement typeElement)
Navigator
getDeclaredFields
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public javax.lang.model.element.VariableElement getDeclaredField(javax.lang.model.element.TypeElement clazz, java.lang.String fieldName)
Navigator
getDeclaredField
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public java.util.Collection<javax.lang.model.element.ExecutableElement> getDeclaredMethods(javax.lang.model.element.TypeElement typeElement)
Navigator
Note that this method does not list methods declared on base classes.
getDeclaredMethods
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public javax.lang.model.element.TypeElement getDeclaringClassForField(javax.lang.model.element.VariableElement f)
Navigator
getDeclaringClassForField
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public javax.lang.model.element.TypeElement getDeclaringClassForMethod(javax.lang.model.element.ExecutableElement m)
Navigator
getDeclaringClassForMethod
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public javax.lang.model.type.TypeMirror getFieldType(javax.lang.model.element.VariableElement f)
Navigator
getFieldType
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public java.lang.String getFieldName(javax.lang.model.element.VariableElement f)
Navigator
getFieldName
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public java.lang.String getMethodName(javax.lang.model.element.ExecutableElement m)
Navigator
getMethodName
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public javax.lang.model.type.TypeMirror getReturnType(javax.lang.model.element.ExecutableElement m)
Navigator
getReturnType
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public javax.lang.model.type.TypeMirror[] getMethodParameters(javax.lang.model.element.ExecutableElement m)
Navigator
getMethodParameters
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isStaticMethod(javax.lang.model.element.ExecutableElement m)
Navigator
isStaticMethod
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isFinalMethod(javax.lang.model.element.ExecutableElement m)
Navigator
isFinalMethod
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isSubClassOf(javax.lang.model.type.TypeMirror sub, javax.lang.model.type.TypeMirror sup)
Navigator
sub
is a sub-type of sup
.
TODO: should this method take T or C?isSubClassOf
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public javax.lang.model.type.TypeMirror ref(java.lang.Class c)
Navigator
T
.ref
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
c
- can be a primitive, array, class, or anything.
(therefore the return type has to be T, not C)public javax.lang.model.type.TypeMirror use(javax.lang.model.element.TypeElement t)
Navigator
public javax.lang.model.element.TypeElement asDecl(javax.lang.model.type.TypeMirror m)
Navigator
C
.
Otherwise null.
TODO: define the exact semantics.
public javax.lang.model.element.TypeElement asDecl(java.lang.Class c)
Navigator
C
representation for the given class.
The behavior is undefined if the class object represents
primitives, arrays, and other types that are not class declaration.public javax.lang.model.type.TypeMirror erasure(javax.lang.model.type.TypeMirror t)
Navigator
public boolean isAbstract(javax.lang.model.element.TypeElement clazz)
Navigator
isAbstract
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isFinal(javax.lang.model.element.TypeElement clazz)
Navigator
public javax.lang.model.element.VariableElement[] getEnumConstants(javax.lang.model.element.TypeElement clazz)
Navigator
getEnumConstants
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
clazz
- must derive from Enum
.public javax.lang.model.type.TypeMirror getVoidType()
Navigator
getVoidType
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public java.lang.String getPackageName(javax.lang.model.element.TypeElement clazz)
Navigator
getPackageName
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public javax.lang.model.element.TypeElement findClass(java.lang.String className, javax.lang.model.element.TypeElement referencePoint)
Navigator
public boolean isBridgeMethod(javax.lang.model.element.ExecutableElement method)
Navigator
isBridgeMethod
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isOverriding(javax.lang.model.element.ExecutableElement method, javax.lang.model.element.TypeElement base)
Navigator
isOverriding
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isInterface(javax.lang.model.element.TypeElement clazz)
Navigator
isInterface
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isTransient(javax.lang.model.element.VariableElement f)
Navigator
isTransient
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isInnerClass(javax.lang.model.element.TypeElement clazz)
Navigator
isInnerClass
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isSameType(javax.lang.model.type.TypeMirror t1, javax.lang.model.type.TypeMirror t2)
Navigator
isSameType
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
t1
- typet2
- typepublic boolean isArray(javax.lang.model.type.TypeMirror type)
Navigator
public boolean isArrayButNotByteArray(javax.lang.model.type.TypeMirror t)
Navigator
isArrayButNotByteArray
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public javax.lang.model.type.TypeMirror getComponentType(javax.lang.model.type.TypeMirror t)
Navigator
getComponentType
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
t
- must be an array.public javax.lang.model.type.TypeMirror getTypeArgument(javax.lang.model.type.TypeMirror typeMirror, int i)
Navigator
getTypeArgument([Map<Integer,String>],0)=Integer
getTypeArgument
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
Navigator.isParameterizedType(Object)
public boolean isParameterizedType(javax.lang.model.type.TypeMirror typeMirror)
Navigator
isParameterizedType
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isPrimitive(javax.lang.model.type.TypeMirror t)
Navigator
isPrimitive
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public javax.lang.model.type.TypeMirror getPrimitive(java.lang.Class primitiveType)
Navigator
getPrimitive
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
primitiveType
- must be Class objects like Integer.TYPE
.public Location getClassLocation(javax.lang.model.element.TypeElement typeElement)
Navigator
getClassLocation
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public Location getFieldLocation(javax.lang.model.element.VariableElement variableElement)
getFieldLocation
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public Location getMethodLocation(javax.lang.model.element.ExecutableElement executableElement)
getMethodLocation
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean hasDefaultConstructor(javax.lang.model.element.TypeElement t)
Navigator
hasDefaultConstructor
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isStaticField(javax.lang.model.element.VariableElement f)
Navigator
isStaticField
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isPublicMethod(javax.lang.model.element.ExecutableElement m)
Navigator
isPublicMethod
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isPublicField(javax.lang.model.element.VariableElement f)
Navigator
isPublicField
in interface Navigator<javax.lang.model.type.TypeMirror,javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,javax.lang.model.element.ExecutableElement>
public boolean isEnum(javax.lang.model.element.TypeElement t)
Navigator