Class 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 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
    • Constructor Detail

      • AbstractCommandSpecProcessor

        protected AbstractCommandSpecProcessor()
    • 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 interface Processor
        Overrides:
        getSupportedAnnotationTypes in class AbstractProcessor
        Returns:
        the set of supported annotation types, with at least "picocli.*"
      • 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 the CommandSpec command model objects that were found during compilation.
        Parameters:
        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 processed
        roundEnv - 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; 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.
      • 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 element
        msg - the error message with optional format specifiers
        args - the arguments to use to call String.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 be null
        msg - the warning message with optional format specifiers
        args - the arguments to use to call String.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