Class AbstractCommandSpecProcessor
- All Implemented Interfaces:
Processor
- Direct Known Subclasses:
NativeImageConfigGeneratorProcessor
@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.
- Since:
- 4.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected ProcessingEnvironment
The ProcessingEnvironment set by theinit(ProcessingEnvironment)
method. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void
Prints a compile-time error message for the specified element.protected void
fatalError
(String msg) Prints a compile-time error message prefixed with "FATAL ERROR".Returns the annotation types supported by the super class, and adds"picocli.*"
if necessary.Returns the max supported source version.protected abstract boolean
handleCommands
(Map<Element, CommandLine.Model.CommandSpec> commands, Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) Subclasses must implement this method and do something with theCommandSpec
command model objects that were found during compilation.void
init
(ProcessingEnvironment processingEnv) protected void
Prints a compile-time NOTE message.boolean
process
(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) static final void
setLoadResourceBundles
(boolean loadBundles) During annotation processing, resource bundles may not be available on the classpath and thereby cause failures.protected void
Prints a compile-time warning message for the specified element.Methods inherited from class javax.annotation.processing.AbstractProcessor
getCompletions, getSupportedOptions, isInitialized
-
Field Details
-
processingEnv
The ProcessingEnvironment set by theinit(ProcessingEnvironment)
method.
-
-
Constructor Details
-
AbstractCommandSpecProcessor
protected AbstractCommandSpecProcessor()
-
-
Method Details
-
getSupportedAnnotationTypes
Returns the annotation types supported by the super class, and adds"picocli.*"
if necessary. Subclasses can omit the@SupportedAnnotationTypes("picocli.*")
annotation, but add other annotations if desired.- Specified by:
getSupportedAnnotationTypes
in interfaceProcessor
- Overrides:
getSupportedAnnotationTypes
in classAbstractProcessor
- Returns:
- the set of supported annotation types, with at least
"picocli.*"
-
getSupportedSourceVersion
Returns the max supported source version. ReturnsSourceVersion.latest()
by default, subclasses may override or may use theSupportedSourceVersion
annotation.- Specified by:
getSupportedSourceVersion
in interfaceProcessor
- Overrides:
getSupportedSourceVersion
in classAbstractProcessor
- Returns:
- the max supported source version
-
init
- Specified by:
init
in interfaceProcessor
- Overrides:
init
in classAbstractProcessor
-
process
- Specified by:
process
in interfaceProcessor
- Specified by:
process
in classAbstractProcessor
-
setLoadResourceBundles
public static final void setLoadResourceBundles(boolean loadBundles) During annotation processing, resource bundles may not be available on the classpath and thereby cause failures. For that reason, by default, resource bundles are not loaded during annotation processing. This method allows for enabling loading of resource bundles during annotation processing.- Parameters:
loadBundles
- true if bundles should be loaded, false (default) if bundles should not be loaded- Since:
- 4.8.0
-
handleCommands
protected abstract boolean handleCommands(Map<Element, CommandLine.Model.CommandSpec> commands, Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) Subclasses must implement this method and do something with theCommandSpec
command model objects that were found during compilation.- Parameters:
commands
- a map of annotated elements to their associatedCommandSpec
. 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 withOption
or@Parameters
.annotations
- the annotation types requested to be processedroundEnv
- environment for information about the current and prior round- Returns:
- whether or not the set of annotation types are claimed by this processor.
If
true
is returned, the annotation types are claimed and subsequent processors will not be asked to process them; iffalse
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.
-
logInfo
Prints a compile-time NOTE message.- Parameters:
msg
- the info message
-
error
Prints a compile-time error message for the specified element.- Parameters:
element
- the problematic elementmsg
- the error message with optional format specifiersargs
- the arguments to use to callString.format
on the error message
-
warn
Prints a compile-time warning message for the specified element.- Parameters:
element
- the problematic element, may benull
msg
- the warning message with optional format specifiersargs
- the arguments to use to callString.format
on the warning message
-
fatalError
Prints a compile-time error message prefixed with "FATAL ERROR".- Parameters:
msg
- the error message with optional format specifiers
-