Package org.codehaus.groovy.classgen
Class Verifier
- java.lang.Object
-
- org.codehaus.groovy.classgen.Verifier
-
- All Implemented Interfaces:
GroovyClassVisitor,org.objectweb.asm.Opcodes
public class Verifier extends java.lang.Object implements GroovyClassVisitor, org.objectweb.asm.Opcodes
Verifies the AST node and adds any defaulted AST code before bytecode generation occurs.- Version:
- $Revision$
- Author:
- James Strachan
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceVerifier.DefaultArgsAction
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String__TIMESTAMPstatic java.lang.String__TIMESTAMP__static java.lang.StringSTATIC_METACLASS_BOOLstatic java.lang.StringSWAP_INIT-
Fields inherited from interface org.objectweb.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V25, V26, V9
-
-
Constructor Summary
Constructors Constructor Description Verifier()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddClosureCode(InnerClassNode node)protected voidaddConstructor(Parameter[] newParams, ConstructorNode ctor, Statement code, ClassNode node)protected voidaddCovariantMethods(ClassNode classNode)protected voidaddDefaultConstructor(ClassNode node)protected voidaddDefaultParameterConstructors(ClassNode node)protected voidaddDefaultParameterMethods(ClassNode node)Creates a new helper method for each combination of default parameter expressionsprotected voidaddDefaultParameters(java.util.List methods, Verifier.DefaultArgsAction action)Creates a new helper method for each combination of default parameter expressionsprotected voidaddDefaultParameters(Verifier.DefaultArgsAction action, MethodNode method)protected voidaddFieldInitialization(java.util.List list, java.util.List staticList, FieldNode fieldNode, boolean isEnumClassNode, java.util.List initStmtsAfterEnumValuesInit, java.util.Set explicitStaticPropsInEnum)protected voidaddGroovyObjectInterfaceAndMethods(ClassNode node, java.lang.String classInternalName)protected voidaddInitialization(ClassNode node)protected voidaddInitialization(ClassNode node, ConstructorNode constructorNode)protected voidaddMethod(ClassNode node, boolean shouldBeSynthetic, java.lang.String name, int modifiers, ClassNode returnType, Parameter[] parameters, ClassNode[] exceptions, Statement code)Helper method to add a new method to a ClassNode.protected voidaddPropertyMethod(MethodNode method)protected voidaddReturnIfNeeded(MethodNode node)protected voidaddTimeStamp(ClassNode node)static java.lang.Stringcapitalize(java.lang.String name)Capitalizes the start of the given bean property nameprotected StatementcreateGetterBlock(PropertyNode propertyNode, FieldNode field)protected StatementcreateSetterBlock(PropertyNode propertyNode, FieldNode field)ClassNodegetClassNode()MethodNodegetMethodNode()static longgetTimestamp(java.lang.Class clazz)static ConstantExpressiontransformToPrimitiveConstantIfPossible(ConstantExpression constantExpression)When constant expressions are created, the value is always wrapped to a non primitive type.voidvisitClass(ClassNode node)add code to implement GroovyObjectvoidvisitConstructor(ConstructorNode node)Visit a ConstructorNode.voidvisitField(FieldNode node)Visit a FieldNode.voidvisitGenericType(GenericsType genericsType)voidvisitMethod(MethodNode node)Visit a MethodNode.voidvisitProperty(PropertyNode node)Visit a PropertyNode.
-
-
-
Field Detail
-
STATIC_METACLASS_BOOL
public static final java.lang.String STATIC_METACLASS_BOOL
- See Also:
- Constant Field Values
-
SWAP_INIT
public static final java.lang.String SWAP_INIT
- See Also:
- Constant Field Values
-
__TIMESTAMP
public static final java.lang.String __TIMESTAMP
- See Also:
- Constant Field Values
-
__TIMESTAMP__
public static final java.lang.String __TIMESTAMP__
- See Also:
- Constant Field Values
-
-
Method Detail
-
getClassNode
public ClassNode getClassNode()
-
getMethodNode
public MethodNode getMethodNode()
-
visitClass
public void visitClass(ClassNode node)
add code to implement GroovyObject- Specified by:
visitClassin interfaceGroovyClassVisitor- Parameters:
node-
-
addDefaultConstructor
protected void addDefaultConstructor(ClassNode node)
-
addGroovyObjectInterfaceAndMethods
protected void addGroovyObjectInterfaceAndMethods(ClassNode node, java.lang.String classInternalName)
-
addMethod
protected void addMethod(ClassNode node, boolean shouldBeSynthetic, java.lang.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.
-
addTimeStamp
protected void addTimeStamp(ClassNode node)
-
visitConstructor
public void visitConstructor(ConstructorNode node)
Description copied from interface:GroovyClassVisitorVisit a ConstructorNode.- Specified by:
visitConstructorin interfaceGroovyClassVisitor
-
visitMethod
public void visitMethod(MethodNode node)
Description copied from interface:GroovyClassVisitorVisit a MethodNode.- Specified by:
visitMethodin interfaceGroovyClassVisitor
-
addReturnIfNeeded
protected void addReturnIfNeeded(MethodNode node)
-
visitField
public void visitField(FieldNode node)
Description copied from interface:GroovyClassVisitorVisit a FieldNode.- Specified by:
visitFieldin interfaceGroovyClassVisitor
-
visitProperty
public void visitProperty(PropertyNode node)
Description copied from interface:GroovyClassVisitorVisit a PropertyNode.- Specified by:
visitPropertyin interfaceGroovyClassVisitor
-
addPropertyMethod
protected void addPropertyMethod(MethodNode method)
-
addDefaultParameterMethods
protected void addDefaultParameterMethods(ClassNode node)
Creates a new helper method for each combination of default parameter expressions
-
addDefaultParameterConstructors
protected void addDefaultParameterConstructors(ClassNode node)
-
addConstructor
protected void addConstructor(Parameter[] newParams, ConstructorNode ctor, Statement code, ClassNode node)
-
addDefaultParameters
protected void addDefaultParameters(java.util.List methods, Verifier.DefaultArgsAction action)Creates a new helper method for each combination of default parameter expressions
-
addDefaultParameters
protected void addDefaultParameters(Verifier.DefaultArgsAction action, MethodNode method)
-
addClosureCode
protected void addClosureCode(InnerClassNode node)
-
addInitialization
protected void addInitialization(ClassNode node)
-
addInitialization
protected void addInitialization(ClassNode node, ConstructorNode constructorNode)
-
addFieldInitialization
protected void addFieldInitialization(java.util.List list, java.util.List staticList, FieldNode fieldNode, boolean isEnumClassNode, java.util.List initStmtsAfterEnumValuesInit, java.util.Set explicitStaticPropsInEnum)
-
capitalize
public static java.lang.String capitalize(java.lang.String name)
Capitalizes the start of the given bean property name
-
createGetterBlock
protected Statement createGetterBlock(PropertyNode propertyNode, FieldNode field)
-
createSetterBlock
protected Statement createSetterBlock(PropertyNode propertyNode, FieldNode field)
-
visitGenericType
public void visitGenericType(GenericsType genericsType)
-
getTimestamp
public static long getTimestamp(java.lang.Class clazz)
-
addCovariantMethods
protected void addCovariantMethods(ClassNode classNode)
-
transformToPrimitiveConstantIfPossible
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. Additionaly, 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.
-
-