Package org.codehaus.groovy.classgen
Class Verifier
java.lang.Object
org.codehaus.groovy.classgen.Verifier
- All Implemented Interfaces:
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 -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Stringstatic final Stringstatic final Stringstatic final StringFields 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, V9 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidaddClosureCode(InnerClassNode node) protected voidaddConstructor(Parameter[] newParams, ConstructorNode ctor, Statement code, ClassNode node) protected voidaddCovariantMethods(ClassNode classNode) protected voidprotected voidprotected voidCreates a new helper method for each combination of default parameter expressionsprotected voidaddDefaultParameters(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(List list, List staticList, FieldNode fieldNode, boolean isEnumClassNode, List initStmtsAfterEnumValuesInit, Set explicitStaticPropsInEnum) protected voidaddGroovyObjectInterfaceAndMethods(ClassNode node, String classInternalName) protected voidaddInitialization(ClassNode node) protected voidaddInitialization(ClassNode node, ConstructorNode constructorNode) protected voidaddMethod(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 voidaddPropertyMethod(MethodNode method) protected voidaddReturnIfNeeded(MethodNode node) protected voidaddTimeStamp(ClassNode node) static Stringcapitalize(String name) Capitalizes the start of the given bean property nameprotected StatementcreateGetterBlock(PropertyNode propertyNode, FieldNode field) protected StatementcreateSetterBlock(PropertyNode propertyNode, FieldNode field) static longgetTimestamp(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 GroovyObjectvoidVisit a ConstructorNode.voidvisitField(FieldNode node) Visit a FieldNode.voidvisitGenericType(GenericsType genericsType) voidvisitMethod(MethodNode node) Visit a MethodNode.voidvisitProperty(PropertyNode node) Visit a PropertyNode.
-
Field Details
-
STATIC_METACLASS_BOOL
- See Also:
-
SWAP_INIT
- See Also:
-
__TIMESTAMP
- See Also:
-
__TIMESTAMP__
- See Also:
-
-
Constructor Details
-
Verifier
public Verifier()
-
-
Method Details
-
getClassNode
-
getMethodNode
-
visitClass
add code to implement GroovyObject- Specified by:
visitClassin interfaceGroovyClassVisitor- Parameters:
node-
-
addDefaultConstructor
-
addGroovyObjectInterfaceAndMethods
-
addMethod
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. -
addTimeStamp
-
visitConstructor
Description copied from interface:GroovyClassVisitorVisit a ConstructorNode.- Specified by:
visitConstructorin interfaceGroovyClassVisitor
-
visitMethod
Description copied from interface:GroovyClassVisitorVisit a MethodNode.- Specified by:
visitMethodin interfaceGroovyClassVisitor
-
addReturnIfNeeded
-
visitField
Description copied from interface:GroovyClassVisitorVisit a FieldNode.- Specified by:
visitFieldin interfaceGroovyClassVisitor
-
visitProperty
Description copied from interface:GroovyClassVisitorVisit a PropertyNode.- Specified by:
visitPropertyin interfaceGroovyClassVisitor
-
addPropertyMethod
-
addDefaultParameterMethods
Creates a new helper method for each combination of default parameter expressions -
addDefaultParameterConstructors
-
addConstructor
protected void addConstructor(Parameter[] newParams, ConstructorNode ctor, Statement code, ClassNode node) -
addDefaultParameters
Creates a new helper method for each combination of default parameter expressions -
addDefaultParameters
-
addClosureCode
-
addInitialization
-
addInitialization
-
addFieldInitialization
-
capitalize
Capitalizes the start of the given bean property name -
createGetterBlock
-
createSetterBlock
-
visitGenericType
-
getTimestamp
-
addCovariantMethods
-
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.
-