[Java] Class Verifier
- org.codehaus.groovy.classgen.Verifier
- All Implemented Interfaces and Traits:
- GroovyClassVisitor, org.objectweb.asm.Opcodes
public class Verifier extends Object implements GroovyClassVisitor, org.objectweb.asm.Opcodes
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 type) | |
protected void |
addCovariantMethods(ClassNode classNode) | |
protected void |
addDefaultConstructor(ClassNode node) | |
protected void |
addDefaultParameterConstructors(ClassNode type) Creates a new constructor for each combination of default parameter expressions. | |
protected void |
addDefaultParameterMethods(ClassNode type) Creates a new method for each combination of default parameter expressions. | |
protected void |
addDefaultParameters(List<? extends MethodNode> 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 MethodNode |
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 |
addMethod$$bridge(ClassNode node, boolean shouldBeSynthetic, String name, int modifiers, ClassNode returnType, Parameter[] parameters, ClassNode[] exceptions, Statement code) | |
protected void |
addPropertyMethod(MethodNode method) | |
protected void |
addReturnIfNeeded(MethodNode node) | |
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() | |
protected VariableNotFinalCallback |
getFinalVariablesCallback() | |
public MethodNode |
getMethodNode() | |
public static long |
getTimestamp(Class<?> clazz) | |
public static Long |
getTimestampFromFieldName(String fieldName) | |
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. | |
public void |
variableNotAlwaysInitialized(VariableExpression var) | |
public void |
variableNotFinal(Variable var, Expression bexp) | |
public void |
visit(org.objectweb.asm.MethodVisitor mv) | |
public void |
visit(org.objectweb.asm.MethodVisitor mv) | |
public void |
visit(org.objectweb.asm.MethodVisitor mv) | |
public void |
visit(org.objectweb.asm.MethodVisitor mv) | |
public void |
visit(org.objectweb.asm.MethodVisitor mv) | |
public void |
visit(org.objectweb.asm.MethodVisitor mv) | |
public void |
visit(org.objectweb.asm.MethodVisitor mv) | |
public void |
visitClass(ClassNode node) | |
public void |
visitClosureExpression(ClosureExpression expression) | |
public void |
visitClosureExpression(ClosureExpression ce) | |
public void |
visitClosureExpression(ClosureExpression e) | |
public void |
visitConstructor(ConstructorNode node) | |
public void |
visitConstructorCallExpression(ConstructorCallExpression cce) | |
public void |
visitConstructorCallExpression(ConstructorCallExpression call) | |
public void |
visitConstructorCallExpression(ConstructorCallExpression call) | |
public void |
visitField(FieldNode node) | |
public void |
visitGenericType(GenericsType genericsType) | |
public void |
visitMethod(MethodNode node) | |
public void |
visitMethodCallExpression(MethodCallExpression mce) | |
public void |
visitProperty(PropertyNode node) | |
public void |
visitReturnStatement(ReturnStatement statement) | |
public void |
visitVariableExpression(VariableExpression ve) | |
public void |
visitVariableExpression(VariableExpression e) | |
public void |
visitVariableExpression(VariableExpression e) |
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 type)
protected void addCovariantMethods(ClassNode classNode)
protected void addDefaultConstructor(ClassNode node)
protected void addDefaultParameterConstructors(ClassNode type)
Creates a new constructor for each combination of default parameter expressions.
protected void addDefaultParameterMethods(ClassNode type)
Creates a new method for each combination of default parameter expressions.
protected void addDefaultParameters(List<? extends MethodNode> 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 MethodNode 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 addMethod$$bridge(ClassNode node, boolean shouldBeSynthetic, String name, int modifiers, ClassNode returnType, Parameter[] parameters, ClassNode[] exceptions, Statement code)
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()
protected VariableNotFinalCallback getFinalVariablesCallback()
public MethodNode getMethodNode()
public static long getTimestamp(Class<?> clazz)
public static Long getTimestampFromFieldName(String fieldName)
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.
@Override public void variableNotAlwaysInitialized(VariableExpression var)
@Override public void variableNotFinal(Variable var, Expression bexp)
@Override public void visit(org.objectweb.asm.MethodVisitor mv)
@Override public void visit(org.objectweb.asm.MethodVisitor mv)
@Override public void visit(org.objectweb.asm.MethodVisitor mv)
@Override public void visit(org.objectweb.asm.MethodVisitor mv)
public void visit(org.objectweb.asm.MethodVisitor mv)
@Override public void visit(org.objectweb.asm.MethodVisitor mv)
@Override public void visit(org.objectweb.asm.MethodVisitor mv)
@Override public void visitClass(ClassNode node)
@Override public void visitClosureExpression(ClosureExpression expression)
@Override public void visitClosureExpression(ClosureExpression ce)
@Override public void visitClosureExpression(ClosureExpression e)
@Override public void visitConstructor(ConstructorNode node)
@Override public void visitConstructorCallExpression(ConstructorCallExpression cce)
@Override public void visitConstructorCallExpression(ConstructorCallExpression call)
@Override public void visitConstructorCallExpression(ConstructorCallExpression call)
@Override public void visitField(FieldNode node)
public void visitGenericType(GenericsType genericsType)
@Override public void visitMethod(MethodNode node)
@Override public void visitMethodCallExpression(MethodCallExpression mce)
@Override public void visitProperty(PropertyNode node)
@Override public void visitReturnStatement(ReturnStatement statement)
@Override public void visitVariableExpression(VariableExpression ve)
@Override public void visitVariableExpression(VariableExpression e)
@Override public void visitVariableExpression(VariableExpression e)
© 2003-2020 The Apache Software Foundation
Licensed under the Apache license.
https://docs.groovy-lang.org/3.0.7/html/gapi/org/codehaus/groovy/classgen/Verifier.html