Class CommonProcessor
- All Implemented Interfaces:
Processor
- Direct Known Subclasses:
ExtendedEnumProcessor
Handles low-level Javac API access and provides:
- Field/Method existence checks
- Qualified type name construction
- Custom javac environment unwrapping
- Logging facilities
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected booleanprotected com.sun.tools.javac.tree.TreeMakerFactory for creating Javac AST nodes (JCTree).protected MessagerInterface for reporting errors, warnings, and other notices during annotation processing.protected com.sun.tools.javac.util.NamesFactory for creating JavacNameobjects (identifiers).protected TreesUtility for working with Javac ASTs (JCTree).Fields inherited from class javax.annotation.processing.AbstractProcessor
processingEnv -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidaddToStaticInitializer(@NotNull com.sun.tools.javac.tree.JCTree.JCClassDecl classDecl, com.sun.tools.javac.tree.JCTree.JCStatement stmt) protected @NotNull Stringcapitalize(@NotNull String str) Capitalizes the first character of the input string.protected com.sun.tools.javac.tree.JCTree.JCExpressioncreateQualifiedName(int pos, @NotNull String fullTypeName) Creates a Javac AST expression (JCTree.JCExpression) representing a fully qualified name (e.g.,java.util.List).protected booleanfieldExists(@NotNull com.sun.tools.javac.tree.JCTree.JCClassDecl classDecl, String fieldName) Checks if a field with the specified name already exists within the given class declaration.protected @Nullable com.sun.tools.javac.tree.JCTree.JCExpressionfindFieldType(@NotNull com.sun.tools.javac.tree.JCTree.JCClassDecl classDecl, String fieldName) Finds the field type of a given field name in a class declaration.protected com.sun.tools.javac.tree.JCTree.JCExpressionfindMethodReturnType(@NotNull Element element, String methodName, int pos) Finds the return type of a given method name in the given class declaration.protected @NotNull com.sun.tools.javac.tree.JCTree.JCExpressiongetBoxedType(@NotNull com.sun.tools.javac.tree.JCTree.JCExpression primitiveOrRefType, int pos) Returns the boxed type expression for a given primitive type expression.protected com.sun.tools.javac.processing.JavacProcessingEnvironmentgetJavacProcessingEnvironment(Object procEnv) Attempts to retrieve the underlyingJavacProcessingEnvironmentfrom a potentially wrapped processing environment object.Specifies the latest supported Java source version.voidinit(ProcessingEnvironment procEnv) protected voidLogs an informational message using the processing environment'sMessager.protected voidLogs an error message using the processing environment'sMessager.protected voidLogs a warning message using the processing environment'sMessager.protected booleanmethodExists(@NotNull com.sun.tools.javac.tree.JCTree.JCClassDecl classDecl, String methodName, int paramCount) Checks method existence with parameter count constraintprotected voidprintCompilationUnitAst(com.sun.tools.javac.tree.JCTree.JCCompilationUnit compilationUnit) Prints the Abstract Syntax Tree (AST) of the given compilation unit to the log.Methods inherited from class javax.annotation.processing.AbstractProcessor
getCompletions, getSupportedAnnotationTypes, getSupportedOptions, isInitialized, process
-
Field Details
-
maker
protected com.sun.tools.javac.tree.TreeMaker makerFactory for creating Javac AST nodes (JCTree). Initialized ininit(ProcessingEnvironment). -
trees
Utility for working with Javac ASTs (JCTree). Initialized ininit(ProcessingEnvironment). Provides access to source tree structures. -
messager
Interface for reporting errors, warnings, and other notices during annotation processing. Obtained from theProcessingEnvironment. -
names
protected com.sun.tools.javac.util.Names namesFactory for creating JavacNameobjects (identifiers). Initialized ininit(ProcessingEnvironment). -
isVerbose
protected boolean isVerbose
-
-
Constructor Details
-
CommonProcessor
public CommonProcessor()
-
-
Method Details
-
getSupportedSourceVersion
Specifies the latest supported Java source version.- Specified by:
getSupportedSourceVersionin interfaceProcessor- Overrides:
getSupportedSourceVersionin classAbstractProcessor- Returns:
- The latest
SourceVersion.
-
init
Initializes the processor, setting up common utilities likeMessager,TreeMaker,Trees, andNames.This implementation attempts to unwrap the
ProcessingEnvironmentif it's potentially wrapped by JetBrains tools (like in IntelliJ IDEA) to ensure access to the underlyingJavacProcessingEnvironment. If the unwrapping fails or the environment is not aJavacProcessingEnvironment, an error is logged, and the Javac-specific tools (maker,trees,names) will remain null. -
fieldExists
protected boolean fieldExists(@NotNull @NotNull com.sun.tools.javac.tree.JCTree.JCClassDecl classDecl, String fieldName) Checks if a field with the specified name already exists within the given class declaration.- Parameters:
classDecl- The Javac AST node representing the class declaration.fieldName- The name of the field to check for.- Returns:
trueif a field with the given name exists,falseotherwise.
-
methodExists
protected boolean methodExists(@NotNull @NotNull com.sun.tools.javac.tree.JCTree.JCClassDecl classDecl, String methodName, int paramCount) Checks method existence with parameter count constraint- Parameters:
classDecl- The class declaration to checkmethodName- Target method nameparamCount- Expected number of parameters- Returns:
trueif method exists with specified name and parameter count
-
createQualifiedName
protected com.sun.tools.javac.tree.JCTree.JCExpression createQualifiedName(int pos, @NotNull @NotNull String fullTypeName) Creates a Javac AST expression (JCTree.JCExpression) representing a fully qualified name (e.g.,java.util.List).- Parameters:
fullTypeName- The fully qualified name as a String (e.g., "java.lang.String").- Returns:
- A
JCTree.JCExpressionrepresenting the qualified name, suitable for use in AST generation. This will typically be aJCTree.JCIdentfor single-part names or aJCTree.JCFieldAccess(Select) for multi-part names.
-
findFieldType
@Nullable protected @Nullable com.sun.tools.javac.tree.JCTree.JCExpression findFieldType(@NotNull @NotNull com.sun.tools.javac.tree.JCTree.JCClassDecl classDecl, String fieldName) Finds the field type of a given field name in a class declaration.- Parameters:
classDecl- The class declaration in which to search for the field.fieldName- The name of the field whose type is to be found.- Returns:
- The type of the field if found, otherwise null.
-
findMethodReturnType
protected com.sun.tools.javac.tree.JCTree.JCExpression findMethodReturnType(@NotNull @NotNull Element element, String methodName, int pos) Finds the return type of a given method name in the given class declaration.- Parameters:
element- The class declaration in which to search for the method.methodName- The name of the method whose return type is to be found.pos- The maker position- Returns:
- The type of the method return if found, otherwise null.
-
addToStaticInitializer
protected void addToStaticInitializer(@NotNull @NotNull com.sun.tools.javac.tree.JCTree.JCClassDecl classDecl, com.sun.tools.javac.tree.JCTree.JCStatement stmt) -
capitalize
Capitalizes the first character of the input string.- Parameters:
str- The string to be capitalized.- Returns:
- The capitalized string.
-
getBoxedType
@NotNull protected @NotNull com.sun.tools.javac.tree.JCTree.JCExpression getBoxedType(@NotNull @NotNull com.sun.tools.javac.tree.JCTree.JCExpression primitiveOrRefType, int pos) Returns the boxed type expression for a given primitive type expression. If the input type is not a primitive type, it is returned unchanged.- Parameters:
primitiveOrRefType- TheJCTree.JCExpressionrepresenting the type.- Returns:
- The
JCTree.JCExpressionfor the boxed type or the original type if not primitive.
-
getJavacProcessingEnvironment
protected com.sun.tools.javac.processing.JavacProcessingEnvironment getJavacProcessingEnvironment(Object procEnv) Attempts to retrieve the underlyingJavacProcessingEnvironmentfrom a potentially wrapped processing environment object. This method handles various wrapping strategies used by different tools and environments, such as Gradle and IntelliJ IDEA.If the input object is already an instance of
JavacProcessingEnvironment, it is returned directly. Otherwise, the method attempts to unwrap it by searching for delegate fields recursively until the desired environment is found.- Parameters:
procEnv- The processing environment object, potentially wrapped.- Returns:
- The unwrapped
JavacProcessingEnvironmentif found, otherwisenull.
-
printCompilationUnitAst
protected void printCompilationUnitAst(com.sun.tools.javac.tree.JCTree.JCCompilationUnit compilationUnit) Prints the Abstract Syntax Tree (AST) of the given compilation unit to the log.This method uses the
Prettyprinter to generate a textual representation of the AST for debugging or analysis purposes. If an error occurs during printing, an error message is logged along with the stack trace.- Parameters:
compilationUnit- theJCTree.JCCompilationUnitrepresenting the compilation unit whose AST is to be printed; may benull- See Also:
-
log
Logs an informational message using the processing environment'sMessager. The message is prefixed with the simple name of this processor class.- Parameters:
msg- The message to log.
-
logError
Logs an error message using the processing environment'sMessager. The message is prefixed with the simple name of this processor class. Note that reporting an error typically halts the compilation process.- Parameters:
msg- The error message to log.
-
logWarn
Logs a warning message using the processing environment'sMessager. The message is prefixed with the simple name of this processor class.- Parameters:
msg- The warning message to log.
-