public abstract class AbstractCommandSpecProcessor
extends javax.annotation.processing.AbstractProcessor
@picocli.* annotations that produces a set of
CommandLine.Model.CommandSpec objects built from the annotated source code.
Subclasses should override the handleCommands(Map, Set, RoundEnvironment)
method to do something useful with these CommandSpec objects,
like generating source code, documentation or configuration files.
Note that due to the limitations of annotation processing and the compiler API,
annotation attributes of type Class are not available
as Class values at compile time, but only as TypeMirror values.
Picocli 4.0 introduces a new CommandLine.Model.ITypeInfo interface that provides ArgSpec
type metadata that can be used both at compile time and at runtime.
Similarly, ArgSpec objects constructed by the annotation processor will have a
CommandLine.Model.IGetter and CommandLine.Model.ISetter
implementation that is different from the one used at runtime and cannot be invoked directly:
the annotation processor will assign an AnnotatedElementHolder
implementation that gives subclass annotation processors access to the annotated element.
CommandSpec objects constructed by the annotation processor will have an
VersionProviderMetaData version provider and a DefaultValueProviderMetaData
default value provider, which gives subclass annotation processors access to the
TypeMirror of the version provider and default value provider specified in the
annotation.
| Modifier and Type | Field and Description |
|---|---|
protected javax.annotation.processing.ProcessingEnvironment |
processingEnv
The ProcessingEnvironment set by the
init(ProcessingEnvironment) method. |
| Constructor and Description |
|---|
AbstractCommandSpecProcessor() |
| Modifier and Type | Method and Description |
|---|---|
protected void |
error(javax.lang.model.element.Element element,
java.lang.String msg,
java.lang.Object... args)
Prints a compile-time error message for the specified element.
|
protected void |
fatalError(java.lang.String msg)
Prints a compile-time error message prefixed with "FATAL ERROR".
|
java.util.Set<java.lang.String> |
getSupportedAnnotationTypes()
Returns the annotation types supported by the super class, and adds
"picocli.*" if necessary. |
protected abstract boolean |
handleCommands(java.util.Map<javax.lang.model.element.Element,picocli.CommandLine.Model.CommandSpec> commands,
java.util.Set<? extends javax.lang.model.element.TypeElement> annotations,
javax.annotation.processing.RoundEnvironment roundEnv)
Subclasses must implement this method and do something with the
CommandSpec command model objects that were found during compilation. |
void |
init(javax.annotation.processing.ProcessingEnvironment processingEnv) |
protected void |
logInfo(java.lang.String msg)
Prints a compile-time NOTE message.
|
boolean |
process(java.util.Set<? extends javax.lang.model.element.TypeElement> annotations,
javax.annotation.processing.RoundEnvironment roundEnv) |
protected void |
warn(javax.lang.model.element.Element element,
java.lang.String msg,
java.lang.Object... args)
Prints a compile-time warning message for the specified element.
|
protected javax.annotation.processing.ProcessingEnvironment processingEnv
init(ProcessingEnvironment) method.public java.util.Set<java.lang.String> getSupportedAnnotationTypes()
"picocli.*" if necessary.
Subclasses can omit the @SupportedAnnotationTypes("picocli.*") annotation,
but add other annotations if desired.getSupportedAnnotationTypes in interface javax.annotation.processing.ProcessorgetSupportedAnnotationTypes in class javax.annotation.processing.AbstractProcessor"picocli.*"public void init(javax.annotation.processing.ProcessingEnvironment processingEnv)
init in interface javax.annotation.processing.Processorinit in class javax.annotation.processing.AbstractProcessorpublic boolean process(java.util.Set<? extends javax.lang.model.element.TypeElement> annotations,
javax.annotation.processing.RoundEnvironment roundEnv)
process in interface javax.annotation.processing.Processorprocess in class javax.annotation.processing.AbstractProcessorprotected abstract boolean handleCommands(java.util.Map<javax.lang.model.element.Element,picocli.CommandLine.Model.CommandSpec> commands,
java.util.Set<? extends javax.lang.model.element.TypeElement> annotations,
javax.annotation.processing.RoundEnvironment roundEnv)
CommandSpec command model objects that were found during compilation.commands - a map of annotated elements to their associated CommandSpec.
Note that the key set may contain classes that do not have a @Command
annotation but were added to the map because the class has fields
annotated with Option or @Parameters.annotations - the annotation types requested to be processedroundEnv - environment for information about the current and prior roundtrue is returned, the annotation types are claimed and subsequent
processors will not be asked to process them; if false is returned,
the annotation types are unclaimed and subsequent processors may be asked
to process them. A processor may always return the same boolean value or
may vary the result based on chosen criteria.protected void logInfo(java.lang.String msg)
msg - the info messageprotected void error(javax.lang.model.element.Element element,
java.lang.String msg,
java.lang.Object... args)
element - the problematic elementmsg - the error message with optional format specifiersargs - the arguments to use to call String.format on the error messageprotected void warn(javax.lang.model.element.Element element,
java.lang.String msg,
java.lang.Object... args)
element - the problematic element, may be nullmsg - the warning message with optional format specifiersargs - the arguments to use to call String.format on the warning messageprotected void fatalError(java.lang.String msg)
msg - the error message with optional format specifiers