Class MemoizeExtension
- java.lang.Object
-
- com.google.auto.value.extension.AutoValueExtension
-
- com.google.auto.value.extension.memoized.processor.MemoizeExtension
-
@AutoService(AutoValueExtension.class) public final class MemoizeExtension extends AutoValueExtension
An extension that implements theMemoized
contract.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.google.auto.value.extension.AutoValueExtension
AutoValueExtension.BuilderContext, AutoValueExtension.Context, AutoValueExtension.IncrementalExtensionType
-
-
Constructor Summary
Constructors Constructor Description MemoizeExtension()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
applicable(AutoValueExtension.Context context)
Determines whether this Extension applies to the given context.String
generateClass(AutoValueExtension.Context context, String className, String classToExtend, boolean isFinal)
Returns the generated source code of the class namedclassName
to extendclassToExtend
, ornull
if this extension does not generate a class in the hierarchy.AutoValueExtension.IncrementalExtensionType
incrementalType(ProcessingEnvironment processingEnvironment)
Determines the incremental type of this Extension.-
Methods inherited from class com.google.auto.value.extension.AutoValueExtension
consumeBuilderMethods, consumeMethods, consumeProperties, getSupportedOptions, mustBeFinal
-
-
-
-
Method Detail
-
incrementalType
public AutoValueExtension.IncrementalExtensionType incrementalType(ProcessingEnvironment processingEnvironment)
Description copied from class:AutoValueExtension
Determines the incremental type of this Extension.The
ProcessingEnvironment
can be used, among other things, to obtain the processor options, usingProcessingEnvironment.getOptions()
.The actual incremental type of the AutoValue processor as a whole will be the loosest incremental types of the Extensions present in the annotation processor path. The default returned value is
AutoValueExtension.IncrementalExtensionType.UNKNOWN
, which will disable incremental annotation processing entirely.- Overrides:
incrementalType
in classAutoValueExtension
-
applicable
public boolean applicable(AutoValueExtension.Context context)
Description copied from class:AutoValueExtension
Determines whether this Extension applies to the given context. If an Extension returnsfalse
for a given class, it will not be called again during the processing of that class. An Extension can returntrue
and still choose not to generate any code for the class, by returningnull
fromAutoValueExtension.generateClass(com.google.auto.value.extension.AutoValueExtension.Context, java.lang.String, java.lang.String, boolean)
. That is often a more flexible approach.- Overrides:
applicable
in classAutoValueExtension
- Parameters:
context
- The Context of the code generation for this class.
-
generateClass
public String generateClass(AutoValueExtension.Context context, String className, String classToExtend, boolean isFinal)
Description copied from class:AutoValueExtension
Returns the generated source code of the class namedclassName
to extendclassToExtend
, ornull
if this extension does not generate a class in the hierarchy. If there is a generated class, it should be final ifisFinal
is true; otherwise it should be abstract. The returned string should be a complete Java class definition of the classclassName
in the packagecontext.packageName()
.The returned string will typically look like this:
package <package>; ... <finalOrAbstract> class <className> extends <classToExtend> { // Constructor <className>(<constructorParameters>) { super(<constructorParameterNames>); ... } ... }
Here,
<package>
isAutoValueExtension.Context.packageName()
;<finalOrAbstract>
is the keywordfinal
ifisFinal
is true orabstract
otherwise; and<className>
and<classToExtend>
are the values of this method's parameters of the same name. The<constructorParameters>
and<constructorParameterNames>
are typically derived fromAutoValueExtension.Context.propertyTypes()
.An extension can also generate a subclass of the nested
Builder
class if there is one. In that case, it should check ifAutoValueExtension.BuilderContext.toBuilderMethods()
is empty. If not, theBuilder
subclass should include a "copy constructor", like this:... <finalOrAbstract> class <className> extends <classToExtend> { ... static class Builder extends <classToExtend>.Builder { Builder() {} Builder(<autoValueClass> copyFrom) { super(copyFrom); } ... } }
Here,
<autoValueClass>
isAutoValueExtension.Context.autoValueClass()
.}- Specified by:
generateClass
in classAutoValueExtension
- Parameters:
context
- TheAutoValueExtension.Context
of the code generation for this class.className
- The simple name of the resulting class. The returned code will be written to a file named accordingly.classToExtend
- The simple name of the direct parent of the generated class. This could be the AutoValue generated class, or a class generated as the result of another Extension.isFinal
- True if this class is the last class in the chain, meaning it should be marked as final. Otherwise it should be marked as abstract.- Returns:
- The source code of the generated class, or
null
if this extension does not generate a class in the hierarchy.
-
-