org.codehaus.groovy.classgen
Class Verifier

java.lang.Object
  extended by org.codehaus.groovy.classgen.Verifier
All Implemented Interfaces:
GroovyClassVisitor, org.objectweb.asm.Opcodes

public class Verifier
extends 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
static interface Verifier.DefaultArgsAction
           
 
Field Summary
static String __TIMESTAMP
           
static String __TIMESTAMP__
           
static String STATIC_METACLASS_BOOL
           
static String SWAP_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_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, 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, 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, INVOKEDYNAMIC_OWNER, 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, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7
 
Constructor Summary
Verifier()
           
 
Method Summary
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)
           
static ConstantExpression transformToPrimitiveConstantIfPossible(ConstantExpression constantExpression)
          When constant expressions are created, the value is always wrapped to a non primitive type.
 void visitClass(ClassNode node)
          add code to implement GroovyObject
 void visitConstructor(ConstructorNode node)
          Visit a ConstructorNode.
 void visitField(FieldNode node)
          Visit a FieldNode.
 void visitGenericType(GenericsType genericsType)
           
 void visitMethod(MethodNode node)
          Visit a MethodNode.
 void visitProperty(PropertyNode node)
          Visit a PropertyNode.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

STATIC_METACLASS_BOOL

public static final String STATIC_METACLASS_BOOL
See Also:
Constant Field Values

SWAP_INIT

public static final String SWAP_INIT
See Also:
Constant Field Values

__TIMESTAMP

public static final String __TIMESTAMP
See Also:
Constant Field Values

__TIMESTAMP__

public static final String __TIMESTAMP__
See Also:
Constant Field Values
Constructor Detail

Verifier

public Verifier()
Method Detail

getClassNode

public ClassNode getClassNode()

getMethodNode

public MethodNode getMethodNode()

visitClass

public void visitClass(ClassNode node)
add code to implement GroovyObject

Specified by:
visitClass in interface GroovyClassVisitor
Parameters:
node -

addDefaultConstructor

protected void addDefaultConstructor(ClassNode node)

addGroovyObjectInterfaceAndMethods

protected void addGroovyObjectInterfaceAndMethods(ClassNode node,
                                                  String classInternalName)

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

protected void addTimeStamp(ClassNode node)

visitConstructor

public void visitConstructor(ConstructorNode node)
Description copied from interface: GroovyClassVisitor
Visit a ConstructorNode.

Specified by:
visitConstructor in interface GroovyClassVisitor

visitMethod

public void visitMethod(MethodNode node)
Description copied from interface: GroovyClassVisitor
Visit a MethodNode.

Specified by:
visitMethod in interface GroovyClassVisitor

addReturnIfNeeded

protected void addReturnIfNeeded(MethodNode node)

visitField

public void visitField(FieldNode node)
Description copied from interface: GroovyClassVisitor
Visit a FieldNode.

Specified by:
visitField in interface GroovyClassVisitor

visitProperty

public void visitProperty(PropertyNode node)
Description copied from interface: GroovyClassVisitor
Visit a PropertyNode.

Specified by:
visitProperty in interface GroovyClassVisitor

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(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(List list,
                                      List staticList,
                                      FieldNode fieldNode,
                                      boolean isEnumClassNode,
                                      List initStmtsAfterEnumValuesInit,
                                      Set explicitStaticPropsInEnum)

capitalize

public static String capitalize(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(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.

Copyright © 2003-2012 The Codehaus. All rights reserved.