@AutoService(value=javax.annotation.processing.Processor.class) public class AutoValueProcessor extends javax.annotation.processing.AbstractProcessor
AutoValue
,
AutoValue User's GuideModifier and Type | Class and Description |
---|---|
private static class |
AutoValueProcessor.ExtensionName |
private static class |
AutoValueProcessor.ObjectMethodToOverride |
static class |
AutoValueProcessor.Property
A property of an
@AutoValue class, defined by one of its abstract methods. |
Modifier and Type | Field and Description |
---|---|
private java.util.List<java.lang.String> |
deferredTypeNames
Qualified names of
@AutoValue classes that we attempted to process but had to abandon
because we needed other types that they referenced and those other types were missing. |
private ErrorReporter |
errorReporter |
private java.lang.Iterable<? extends AutoValueExtension> |
extensions |
private javax.lang.model.util.Types |
typeUtils |
Constructor and Description |
---|
AutoValueProcessor() |
AutoValueProcessor(java.lang.Iterable<? extends AutoValueExtension> extensions) |
Modifier and Type | Method and Description |
---|---|
private com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> |
abstractMethodsIn(com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> methods) |
private java.util.Set<javax.lang.model.type.TypeMirror> |
allMethodAnnotationTypes(java.lang.Iterable<javax.lang.model.element.ExecutableElement> methods) |
private boolean |
ancestorIsAutoValue(javax.lang.model.element.TypeElement type) |
private com.google.common.collect.ImmutableList<AutoValueExtension> |
applicableExtensions(javax.lang.model.element.TypeElement type,
ExtensionContext context) |
private void |
checkModifiersIfNested(javax.lang.model.element.TypeElement type) |
private boolean |
checkReturnType(javax.lang.model.element.TypeElement autoValueClass,
javax.lang.model.element.ExecutableElement getter) |
private static boolean |
containsArrayType(java.util.Set<javax.lang.model.type.TypeMirror> types) |
private void |
defineVarsForType(javax.lang.model.element.TypeElement type,
AutoValueTemplateVars vars,
com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> toBuilderMethods,
com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> propertyMethods,
com.google.common.base.Optional<BuilderSpec.Builder> builder) |
private static void |
determineObjectMethodsToGenerate(java.util.Set<javax.lang.model.element.ExecutableElement> methods,
AutoValueTemplateVars vars)
Given a list of all methods defined in or inherited by a class, sets the equals, hashCode, and
toString fields of vars according as the corresponding methods should be generated.
|
private java.lang.String |
disambiguate(java.lang.String name,
java.util.Collection<java.lang.String> existingNames) |
private EclipseHack |
eclipseHack() |
private static java.lang.String |
extensionName(AutoValueExtension extension) |
private void |
fixReservedIdentifiers(java.util.Map<javax.lang.model.element.ExecutableElement,java.lang.String> methodToIdentifier) |
private java.lang.String |
generatedClassName(javax.lang.model.element.TypeElement type,
java.lang.String prefix) |
private java.lang.String |
generatedSubclassName(javax.lang.model.element.TypeElement type,
int depth) |
private java.lang.String |
getSerialVersionUID(javax.lang.model.element.TypeElement type) |
java.util.Set<java.lang.String> |
getSupportedAnnotationTypes() |
javax.lang.model.SourceVersion |
getSupportedSourceVersion() |
private static boolean |
gettersAllPrefixed(java.util.Set<javax.lang.model.element.ExecutableElement> methods) |
private javax.lang.model.type.TypeMirror |
getTypeMirror(java.lang.Class<?> c) |
private static <E> com.google.common.collect.ImmutableSet<E> |
immutableSetDifference(com.google.common.collect.ImmutableSet<E> a,
com.google.common.collect.ImmutableSet<E> b) |
private boolean |
implementsAnnotation(javax.lang.model.element.TypeElement type) |
void |
init(javax.annotation.processing.ProcessingEnvironment processingEnv) |
private static boolean |
isJavaLangObject(javax.lang.model.element.TypeElement type) |
private com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> |
methodsConsumedByExtensions(javax.lang.model.element.TypeElement type,
com.google.common.collect.ImmutableList<AutoValueExtension> applicableExtensions,
ExtensionContext context,
com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> abstractMethods,
com.google.common.collect.ImmutableBiMap<java.lang.String,javax.lang.model.element.ExecutableElement> properties) |
private java.lang.String |
nameWithoutPrefix(java.lang.String name) |
private static AutoValueProcessor.ObjectMethodToOverride |
objectMethodToOverride(javax.lang.model.element.ExecutableElement method) |
(package private) static com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> |
prefixedGettersIn(java.lang.Iterable<javax.lang.model.element.ExecutableElement> methods) |
boolean |
process(java.util.Set<? extends javax.lang.model.element.TypeElement> annotations,
javax.annotation.processing.RoundEnvironment roundEnv) |
private void |
processType(javax.lang.model.element.TypeElement type) |
private com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> |
propertyMethodsIn(com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> abstractMethods) |
private com.google.common.collect.ImmutableBiMap<java.lang.String,javax.lang.model.element.ExecutableElement> |
propertyNameToMethodMap(java.util.Set<javax.lang.model.element.ExecutableElement> propertyMethods) |
private java.util.Set<javax.lang.model.type.TypeMirror> |
returnTypesOf(java.lang.Iterable<javax.lang.model.element.ExecutableElement> methods) |
private void |
validateMethods(javax.lang.model.element.TypeElement type,
com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> abstractMethods,
com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> toBuilderMethods,
com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> propertyMethods,
boolean extensionsPresent) |
private void |
warnAboutPrimitiveArrays(javax.lang.model.element.TypeElement autoValueClass,
javax.lang.model.element.ExecutableElement getter) |
private static java.lang.String |
wildcardTypeParametersString(javax.lang.model.element.TypeElement type) |
private void |
writeExtensions(javax.lang.model.element.TypeElement type,
ExtensionContext context,
com.google.common.collect.ImmutableList<AutoValueExtension> applicableExtensions,
java.lang.String subclass) |
private void |
writeSourceFile(java.lang.String className,
java.lang.String text,
javax.lang.model.element.TypeElement originatingType) |
private ErrorReporter errorReporter
private final java.util.List<java.lang.String> deferredTypeNames
@AutoValue
classes that we attempted to process but had to abandon
because we needed other types that they referenced and those other types were missing.private java.lang.Iterable<? extends AutoValueExtension> extensions
private javax.lang.model.util.Types typeUtils
public AutoValueProcessor()
public AutoValueProcessor(java.lang.Iterable<? extends AutoValueExtension> extensions)
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
public void init(javax.annotation.processing.ProcessingEnvironment processingEnv)
init
in interface javax.annotation.processing.Processor
init
in class javax.annotation.processing.AbstractProcessor
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 java.lang.String generatedClassName(javax.lang.model.element.TypeElement type, java.lang.String prefix)
private java.lang.String generatedSubclassName(javax.lang.model.element.TypeElement type, int depth)
private static boolean isJavaLangObject(javax.lang.model.element.TypeElement type)
private static AutoValueProcessor.ObjectMethodToOverride objectMethodToOverride(javax.lang.model.element.ExecutableElement method)
private void processType(javax.lang.model.element.TypeElement type)
private void writeExtensions(javax.lang.model.element.TypeElement type, ExtensionContext context, com.google.common.collect.ImmutableList<AutoValueExtension> applicableExtensions, java.lang.String subclass)
private com.google.common.collect.ImmutableList<AutoValueExtension> applicableExtensions(javax.lang.model.element.TypeElement type, ExtensionContext context)
private com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> methodsConsumedByExtensions(javax.lang.model.element.TypeElement type, com.google.common.collect.ImmutableList<AutoValueExtension> applicableExtensions, ExtensionContext context, com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> abstractMethods, com.google.common.collect.ImmutableBiMap<java.lang.String,javax.lang.model.element.ExecutableElement> properties)
private void validateMethods(javax.lang.model.element.TypeElement type, com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> abstractMethods, com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> toBuilderMethods, com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> propertyMethods, boolean extensionsPresent)
private static java.lang.String extensionName(AutoValueExtension extension)
private void defineVarsForType(javax.lang.model.element.TypeElement type, AutoValueTemplateVars vars, com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> toBuilderMethods, com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> propertyMethods, com.google.common.base.Optional<BuilderSpec.Builder> builder)
private com.google.common.collect.ImmutableBiMap<java.lang.String,javax.lang.model.element.ExecutableElement> propertyNameToMethodMap(java.util.Set<javax.lang.model.element.ExecutableElement> propertyMethods)
private static boolean gettersAllPrefixed(java.util.Set<javax.lang.model.element.ExecutableElement> methods)
static com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> prefixedGettersIn(java.lang.Iterable<javax.lang.model.element.ExecutableElement> methods)
private java.util.Set<javax.lang.model.type.TypeMirror> allMethodAnnotationTypes(java.lang.Iterable<javax.lang.model.element.ExecutableElement> methods)
private java.lang.String nameWithoutPrefix(java.lang.String name)
private void checkModifiersIfNested(javax.lang.model.element.TypeElement type)
private void fixReservedIdentifiers(java.util.Map<javax.lang.model.element.ExecutableElement,java.lang.String> methodToIdentifier)
private java.lang.String disambiguate(java.lang.String name, java.util.Collection<java.lang.String> existingNames)
private java.util.Set<javax.lang.model.type.TypeMirror> returnTypesOf(java.lang.Iterable<javax.lang.model.element.ExecutableElement> methods)
private static boolean containsArrayType(java.util.Set<javax.lang.model.type.TypeMirror> types)
private static void determineObjectMethodsToGenerate(java.util.Set<javax.lang.model.element.ExecutableElement> methods, AutoValueTemplateVars vars)
private com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> abstractMethodsIn(com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> methods)
private com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> propertyMethodsIn(com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> abstractMethods)
private boolean checkReturnType(javax.lang.model.element.TypeElement autoValueClass, javax.lang.model.element.ExecutableElement getter)
private void warnAboutPrimitiveArrays(javax.lang.model.element.TypeElement autoValueClass, javax.lang.model.element.ExecutableElement getter)
private void writeSourceFile(java.lang.String className, java.lang.String text, javax.lang.model.element.TypeElement originatingType)
private boolean ancestorIsAutoValue(javax.lang.model.element.TypeElement type)
private boolean implementsAnnotation(javax.lang.model.element.TypeElement type)
private java.lang.String getSerialVersionUID(javax.lang.model.element.TypeElement type)
private javax.lang.model.type.TypeMirror getTypeMirror(java.lang.Class<?> c)
private static java.lang.String wildcardTypeParametersString(javax.lang.model.element.TypeElement type)
private static <E> com.google.common.collect.ImmutableSet<E> immutableSetDifference(com.google.common.collect.ImmutableSet<E> a, com.google.common.collect.ImmutableSet<E> b)
private EclipseHack eclipseHack()