@AutoService(value=javax.annotation.processing.Processor.class) public class AutoAnnotationProcessor extends javax.annotation.processing.AbstractProcessor
Modifier and Type | Class and Description |
---|---|
static class |
AutoAnnotationProcessor.Member |
static class |
AutoAnnotationProcessor.Parameter |
Modifier and Type | Field and Description |
---|---|
private javax.lang.model.util.Types |
typeUtils |
Constructor and Description |
---|
AutoAnnotationProcessor() |
Modifier and Type | Method and Description |
---|---|
private AbortProcessingException |
abortWithError(java.lang.String msg,
javax.lang.model.element.Element e)
Issue a compilation error and return an exception that, when thrown, will cause the processing
of this class to be abandoned.
|
private boolean |
compatibleTypes(javax.lang.model.type.TypeMirror parameterType,
javax.lang.model.type.TypeMirror memberType)
Returns true if
parameterType can be used to provide the value of an annotation member
of type memberType . |
private static boolean |
containsArrayType(java.util.Set<javax.lang.model.type.TypeMirror> types) |
private java.lang.String |
generatedClassName(javax.lang.model.element.ExecutableElement method) |
private javax.lang.model.element.TypeElement |
getAnnotationReturnType(javax.lang.model.element.ExecutableElement method) |
private com.google.common.collect.ImmutableMap<java.lang.String,javax.lang.model.element.AnnotationValue> |
getDefaultValues(javax.lang.model.element.TypeElement annotationElement) |
private com.google.common.collect.ImmutableMap<java.lang.String,javax.lang.model.element.ExecutableElement> |
getMemberMethods(javax.lang.model.element.TypeElement annotationElement) |
private com.google.common.collect.ImmutableMap<java.lang.String,AutoAnnotationProcessor.Member> |
getMembers(javax.lang.model.element.Element context,
com.google.common.collect.ImmutableMap<java.lang.String,javax.lang.model.element.ExecutableElement> memberMethods,
TypeSimplifier typeSimplifier,
AnnotationOutput annotationOutput) |
private java.util.Set<javax.lang.model.type.TypeMirror> |
getMemberTypes(java.util.Collection<javax.lang.model.element.ExecutableElement> memberMethods) |
private com.google.common.collect.ImmutableMap<java.lang.String,AutoAnnotationProcessor.Parameter> |
getParameters(javax.lang.model.element.TypeElement annotationElement,
javax.lang.model.element.ExecutableElement method,
java.util.Map<java.lang.String,AutoAnnotationProcessor.Member> members,
TypeSimplifier typeSimplifier) |
private java.util.Set<javax.lang.model.type.TypeMirror> |
getReferencedTypes(javax.lang.model.type.TypeMirror annotation,
javax.lang.model.element.ExecutableElement method,
java.util.Set<javax.lang.model.type.TypeMirror> memberTypes,
java.util.Set<java.lang.Class<?>> wrapperTypesUsedInCollections) |
java.util.Set<java.lang.String> |
getSupportedAnnotationTypes() |
javax.lang.model.SourceVersion |
getSupportedSourceVersion() |
private javax.lang.model.type.TypeMirror |
getTypeMirror(java.lang.Class<?> c) |
private static boolean |
isGwtCompatible(javax.lang.model.element.TypeElement annotationElement) |
private boolean |
methodsAreOverloaded(java.util.List<javax.lang.model.element.ExecutableElement> methods) |
private void |
process(javax.annotation.processing.RoundEnvironment roundEnv) |
boolean |
process(java.util.Set<? extends javax.lang.model.element.TypeElement> annotations,
javax.annotation.processing.RoundEnvironment roundEnv) |
private void |
processMethod(javax.lang.model.element.ExecutableElement method) |
private void |
reportError(javax.lang.model.element.Element e,
java.lang.String msg,
java.lang.Object... msgParams)
Issue a compilation error.
|
private void |
validateParameters(javax.lang.model.element.TypeElement annotationElement,
javax.lang.model.element.ExecutableElement method,
com.google.common.collect.ImmutableMap<java.lang.String,AutoAnnotationProcessor.Member> members,
com.google.common.collect.ImmutableMap<java.lang.String,AutoAnnotationProcessor.Parameter> parameters,
com.google.common.collect.ImmutableMap<java.lang.String,javax.lang.model.element.AnnotationValue> defaultValues) |
private java.util.Set<java.lang.Class<?>> |
wrapperTypesUsedInCollections(javax.lang.model.element.ExecutableElement method)
Returns the wrapper types (
Integer.class etc) that are used in collection parameters
like List<Integer> . |
private void |
writeSourceFile(java.lang.String className,
java.lang.String text,
javax.lang.model.element.TypeElement originatingType) |
public java.util.Set<java.lang.String> getSupportedAnnotationTypes()
getSupportedAnnotationTypes
in interface javax.annotation.processing.Processor
getSupportedAnnotationTypes
in class javax.annotation.processing.AbstractProcessor
public javax.lang.model.SourceVersion getSupportedSourceVersion()
getSupportedSourceVersion
in interface javax.annotation.processing.Processor
getSupportedSourceVersion
in class javax.annotation.processing.AbstractProcessor
private void reportError(javax.lang.model.element.Element e, java.lang.String msg, java.lang.Object... msgParams)
private AbortProcessingException abortWithError(java.lang.String msg, javax.lang.model.element.Element e)
public boolean process(java.util.Set<? extends javax.lang.model.element.TypeElement> annotations, javax.annotation.processing.RoundEnvironment roundEnv)
process
in interface javax.annotation.processing.Processor
process
in class javax.annotation.processing.AbstractProcessor
private void process(javax.annotation.processing.RoundEnvironment roundEnv)
private void processMethod(javax.lang.model.element.ExecutableElement method)
private boolean methodsAreOverloaded(java.util.List<javax.lang.model.element.ExecutableElement> methods)
private java.lang.String generatedClassName(javax.lang.model.element.ExecutableElement method)
private javax.lang.model.element.TypeElement getAnnotationReturnType(javax.lang.model.element.ExecutableElement method)
private com.google.common.collect.ImmutableMap<java.lang.String,javax.lang.model.element.ExecutableElement> getMemberMethods(javax.lang.model.element.TypeElement annotationElement)
private com.google.common.collect.ImmutableMap<java.lang.String,AutoAnnotationProcessor.Member> getMembers(javax.lang.model.element.Element context, com.google.common.collect.ImmutableMap<java.lang.String,javax.lang.model.element.ExecutableElement> memberMethods, TypeSimplifier typeSimplifier, AnnotationOutput annotationOutput)
private com.google.common.collect.ImmutableMap<java.lang.String,javax.lang.model.element.AnnotationValue> getDefaultValues(javax.lang.model.element.TypeElement annotationElement)
private java.util.Set<javax.lang.model.type.TypeMirror> getMemberTypes(java.util.Collection<javax.lang.model.element.ExecutableElement> memberMethods)
private com.google.common.collect.ImmutableMap<java.lang.String,AutoAnnotationProcessor.Parameter> getParameters(javax.lang.model.element.TypeElement annotationElement, javax.lang.model.element.ExecutableElement method, java.util.Map<java.lang.String,AutoAnnotationProcessor.Member> members, TypeSimplifier typeSimplifier)
private void validateParameters(javax.lang.model.element.TypeElement annotationElement, javax.lang.model.element.ExecutableElement method, com.google.common.collect.ImmutableMap<java.lang.String,AutoAnnotationProcessor.Member> members, com.google.common.collect.ImmutableMap<java.lang.String,AutoAnnotationProcessor.Parameter> parameters, com.google.common.collect.ImmutableMap<java.lang.String,javax.lang.model.element.AnnotationValue> defaultValues)
private boolean compatibleTypes(javax.lang.model.type.TypeMirror parameterType, javax.lang.model.type.TypeMirror memberType)
parameterType
can be used to provide the value of an annotation member
of type memberType
. They must either be the same type, or the member type must be an
array and the parameter type must be a collection of a compatible type.private java.util.Set<java.lang.Class<?>> wrapperTypesUsedInCollections(javax.lang.model.element.ExecutableElement method)
Integer.class
etc) that are used in collection parameters
like List<Integer>
. This is needed because we will emit a helper method for each such
type, for example to convert Collection<Integer>
into int[]
.private java.util.Set<javax.lang.model.type.TypeMirror> getReferencedTypes(javax.lang.model.type.TypeMirror annotation, javax.lang.model.element.ExecutableElement method, java.util.Set<javax.lang.model.type.TypeMirror> memberTypes, java.util.Set<java.lang.Class<?>> wrapperTypesUsedInCollections)
private javax.lang.model.type.TypeMirror getTypeMirror(java.lang.Class<?> c)
private static boolean containsArrayType(java.util.Set<javax.lang.model.type.TypeMirror> types)
private static boolean isGwtCompatible(javax.lang.model.element.TypeElement annotationElement)
private void writeSourceFile(java.lang.String className, java.lang.String text, javax.lang.model.element.TypeElement originatingType)