[Java] Class Verifier
- org.codehaus.groovy.classgen.Verifier
- All Implemented Interfaces and Traits:
- GroovyClassVisitor, org.objectweb.asm.Opcodes
public class Verifier extends Object
Verifies the AST node and adds any default AST code before bytecode generation occurs. Checks include:
- Methods with duplicate signatures
- Duplicate interfaces
- Reassigned final variables/parameters
- Uninitialized variables
- Bad code in object initializers or constructors
- Mismatches in modifiers or return types between implementations and interfaces/abstract classes
- Methods needed to implement GroovyObject
- Property accessor methods
- Covariant methods
- Additional methods/constructors as needed for default parameters
Nested Class Summary
Modifiers | Name | Description |
---|---|---|
interface | Verifier.DefaultArgsAction |
Field Summary
Modifiers | Name | Description |
---|---|---|
static String | DEFAULT_PARAMETER_GENERATED | |
static String | INITIAL_EXPRESSION | |
static String | STATIC_METACLASS_BOOL | |
static String | SWAP_INIT | |
static String | __TIMESTAMP | |
static String | __TIMESTAMP__ |
Methods Summary
Type Params | Return Type | Name and description |
---|---|---|
protected void |
addClosureCode(InnerClassNode node) | |
protected void |
addConstructor(Parameter[] newParams, ConstructorNode ctor, Statement code, ClassNode node) | |
protected void |
addCovariantMethods(ClassNode classNode) | |
protected void |
addDefaultConstructor(ClassNode node) | |
protected void |
addDefaultParameterConstructors(ClassNode node) | |
protected void |
addDefaultParameterMethods(ClassNode node) Creates a new helper method for each combination of default parameter expressions | |
protected void |
addDefaultParameters(List methods, Verifier.DefaultArgsAction action) Creates a new helper method for each combination of default parameter expressions | |
protected void |
addDefaultParameters(Verifier.DefaultArgsAction action, MethodNode method) | |
protected void |
addFieldInitialization(List list, List staticList, FieldNode fieldNode, boolean isEnumClassNode, List initStmtsAfterEnumValuesInit, Set explicitStaticPropsInEnum) | |
protected void |
addGroovyObjectInterfaceAndMethods(ClassNode node, String classInternalName) | |
protected void |
addInitialization(ClassNode node) | |
protected void |
addInitialization(ClassNode node, ConstructorNode constructorNode) | |
protected void |
addMethod(ClassNode node, boolean shouldBeSynthetic, String name, int modifiers, ClassNode returnType, Parameter[] parameters, ClassNode[] exceptions, Statement code) Helper method to add a new method to a ClassNode. | |
protected void |
addPropertyMethod(MethodNode method) | |
protected void |
addReturnIfNeeded(MethodNode node) | |
protected void |
addTimeStamp(ClassNode node) | |
static String |
capitalize(String name) Capitalizes the start of the given bean property name | |
protected Statement |
createGetterBlock(PropertyNode propertyNode, FieldNode field) | |
protected Statement |
createSetterBlock(PropertyNode propertyNode, FieldNode field) | |
ClassNode |
getClassNode() | |
MethodNode |
getMethodNode() | |
static long |
getTimestamp(Class clazz) | |
protected void |
setClassNode(ClassNode classNode) | |
static ConstantExpression |
transformToPrimitiveConstantIfPossible(ConstantExpression constantExpression) When constant expressions are created, the value is always wrapped to a non primitive type. | |
void |
visitClass(ClassNode node) walk the class | |
void |
visitConstructor(ConstructorNode node) | |
void |
visitField(FieldNode node) | |
void |
visitGenericType(GenericsType genericsType) | |
void |
visitMethod(MethodNode node) | |
void |
visitProperty(PropertyNode node) |
Inherited Methods Summary
Methods inherited from class | Name |
---|---|
class Object | wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll |
Field Detail
public static final String DEFAULT_PARAMETER_GENERATED
public static final String INITIAL_EXPRESSION
public static final String STATIC_METACLASS_BOOL
public static final String SWAP_INIT
public static final String __TIMESTAMP
public static final String __TIMESTAMP__
Method Detail
protected void addClosureCode(InnerClassNode node)
protected void addConstructor(Parameter[] newParams, ConstructorNode ctor, Statement code, ClassNode node)
protected void addCovariantMethods(ClassNode classNode)
protected void addDefaultConstructor(ClassNode node)
protected void addDefaultParameterConstructors(ClassNode node)
protected void addDefaultParameterMethods(ClassNode node)
Creates a new helper method for each combination of default parameter expressions
protected void addDefaultParameters(List methods, Verifier.DefaultArgsAction action)
Creates a new helper method for each combination of default parameter expressions
protected void addDefaultParameters(Verifier.DefaultArgsAction action, MethodNode method)
protected void addFieldInitialization(List list, List staticList, FieldNode fieldNode, boolean isEnumClassNode, List initStmtsAfterEnumValuesInit, Set explicitStaticPropsInEnum)
protected void addGroovyObjectInterfaceAndMethods(ClassNode node, String classInternalName)
protected void addInitialization(ClassNode node)
protected void addInitialization(ClassNode node, ConstructorNode constructorNode)
protected void addMethod(ClassNode node, boolean shouldBeSynthetic, String name, int modifiers, ClassNode returnType, Parameter[] parameters, ClassNode[] exceptions, Statement code)
Helper method to add a new method to a ClassNode. Depending on the shouldBeSynthetic flag the call will either be made to ClassNode.addSyntheticMethod() or ClassNode.addMethod(). If a non-synthetic method is to be added the ACC_SYNTHETIC modifier is removed if it has been accidentally supplied.
protected void addPropertyMethod(MethodNode method)
protected void addReturnIfNeeded(MethodNode node)
@Deprecated protected void addTimeStamp(ClassNode node)
public static String capitalize(String name)
Capitalizes the start of the given bean property name
protected Statement createGetterBlock(PropertyNode propertyNode, FieldNode field)
protected Statement createSetterBlock(PropertyNode propertyNode, FieldNode field)
public ClassNode getClassNode()
public MethodNode getMethodNode()
public static long getTimestamp(Class clazz)
protected void setClassNode(ClassNode classNode)
public static ConstantExpression transformToPrimitiveConstantIfPossible(ConstantExpression constantExpression)
When constant expressions are created, the value is always wrapped to a non primitive type. Some constant expressions are optimized to return primitive types, but not all primitives are handled. This method guarantees to return a similar constant expression but with a primitive type instead of a boxed type.
Additionally, single char strings are converted to 'char' types.- Parameters:
-
constantExpression
- a constant expression
- Returns:
- the same instance of constant expression if the type is already primitive, or a primitive constant if possible.
public void visitClass(ClassNode node)
walk the class
- Parameters:
-
node
- the node to visit
public void visitConstructor(ConstructorNode node)
public void visitField(FieldNode node)
public void visitGenericType(GenericsType genericsType)
public void visitMethod(MethodNode node)
public void visitProperty(PropertyNode node)
© 2003-2020 The Apache Software Foundation
Licensed under the Apache license.
https://docs.groovy-lang.org/2.4.21/html/gapi/org/codehaus/groovy/classgen/Verifier.html