Class AbstractCommandSpecProcessor
- java.lang.Object
-
- javax.annotation.processing.AbstractProcessor
-
- picocli.codegen.annotation.processing.AbstractCommandSpecProcessor
-
- All Implemented Interfaces:
Processor
- Direct Known Subclasses:
NativeImageConfigGeneratorProcessor
public abstract class AbstractCommandSpecProcessor extends AbstractProcessor
Abstract annotation processor for@picocli.*
annotations that produces a set ofCommandLine.Model.CommandSpec
objects built from the annotated source code.Subclasses should override the
handleCommands(Map, Set, RoundEnvironment)
method to do something useful with theseCommandSpec
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 asClass
values at compile time, but only asTypeMirror
values. Picocli 4.0 introduces a newCommandLine.Model.ITypeInfo
interface that providesArgSpec
type metadata that can be used both at compile time and at runtime.Similarly,
ArgSpec
objects constructed by the annotation processor will have aCommandLine.Model.IGetter
andCommandLine.Model.ISetter
implementation that is different from the one used at runtime and cannot be invoked directly: the annotation processor will assign anAnnotatedElementHolder
implementation that gives subclass annotation processors access to the annotated element.CommandSpec
objects constructed by the annotation processor will have anVersionProviderMetaData
version provider and aDefaultValueProviderMetaData
default value provider, which gives subclass annotation processors access to theTypeMirror
of the version provider and default value provider specified in the annotation.- Since:
- 4.0
-
-
Field Summary
Fields Modifier and Type Field Description protected ProcessingEnvironment
processingEnv
The ProcessingEnvironment set by theinit(ProcessingEnvironment)
method.
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractCommandSpecProcessor()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
error(Element element, String msg, Object... args)
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".Set<String>
getSupportedAnnotationTypes()
Returns the annotation types supported by the super class, and adds"picocli.*"
if necessary.SourceVersion
getSupportedSourceVersion()
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
logInfo(String msg)
Prints a compile-time NOTE message.boolean
process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv)
static void
setLoadResourceBundles(boolean loadBundles)
During annotation processing, resource bundles may not be available on the classpath and thereby cause failures.protected void
warn(Element element, String msg, Object... args)
Prints a compile-time warning message for the specified element.-
Methods inherited from class javax.annotation.processing.AbstractProcessor
getCompletions, getSupportedOptions, isInitialized
-
-
-
-
Field Detail
-
processingEnv
protected ProcessingEnvironment processingEnv
The ProcessingEnvironment set by theinit(ProcessingEnvironment)
method.
-
-
Method Detail
-
getSupportedAnnotationTypes
public Set<String> 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
public SourceVersion 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
public void init(ProcessingEnvironment processingEnv)
- Specified by:
init
in interfaceProcessor
- Overrides:
init
in classAbstractProcessor
-
process
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv)
- 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
protected void logInfo(String msg)
Prints a compile-time NOTE message.- Parameters:
msg
- the info message
-
error
protected void error(Element element, String msg, Object... args)
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
protected void warn(Element element, String msg, Object... args)
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
protected void fatalError(String msg)
Prints a compile-time error message prefixed with "FATAL ERROR".- Parameters:
msg
- the error message with optional format specifiers
-
-