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 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: 16221 $
Author:
James Strachan

Nested Class Summary
private static interface Verifier.DefaultArgsAction
           
 
Field Summary
static java.lang.String __TIMESTAMP
           
static java.lang.String __TIMESTAMP__
           
private  ClassNode classNode
           
private static Parameter[] GET_PROPERTY_PARAMS
           
private static Parameter[] INVOKE_METHOD_PARAMS
           
private  MethodNode methodNode
           
private static Parameter[] SET_METACLASS_PARAMS
           
private static Parameter[] SET_PROPERTY_PARAMS
           
 
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, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, 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, 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, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, 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, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6
 
Constructor Summary
Verifier()
           
 
Method Summary
protected  void addClosureCode(InnerClassNode node)
           
protected  void addCovariantMethods(ClassNode classNode)
           
private  void addCovariantMethods(ClassNode classNode, java.util.List declaredMethods, java.util.Map abstractMethods, java.util.Map methodsToAdd, java.util.Map oldGenericsSpec)
           
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(java.util.List methods, Verifier.DefaultArgsAction action)
          Creates a new helper method for each combination of default parameter expressions
protected  void addFieldInitialization(java.util.List list, java.util.List staticList, FieldNode fieldNode, boolean isEnumClassNode, java.util.List initStmtsAfterEnumValuesInit, java.util.Set explicitStaticPropsInEnum)
           
protected  void addInitialization(ClassNode node)
           
protected  void addInitialization(ClassNode node, ConstructorNode constructorNode)
           
protected  void addPropertyMethod(MethodNode method)
           
private  void addReturnIfNeeded(MethodNode node)
           
private  Statement addReturnsIfNeeded(Statement statement, VariableScope scope)
           
protected  void addTimeStamp(ClassNode node)
           
static java.lang.String capitalize(java.lang.String name)
          Capitalizes the start of the given bean property name
private  void checkReturnInObjectInitializer(java.util.List init)
           
private  Parameter[] cleanParameters(Parameter[] parameters)
           
private  ClassNode correctToGenericsSpec(java.util.Map genericsSpec, ClassNode type)
           
private  ClassNode correctToGenericsSpec(java.util.Map genericsSpec, GenericsType type)
           
private  java.util.Map createGenericsSpec(ClassNode current, java.util.Map oldSpec)
           
protected  Statement createGetterBlock(PropertyNode propertyNode, FieldNode field)
           
protected  Statement createSetterBlock(PropertyNode propertyNode, FieldNode field)
           
private  boolean equalParametersNormal(MethodNode m1, MethodNode m2)
           
private  boolean equalParametersWithGenerics(MethodNode m1, MethodNode m2, java.util.Map genericsSpec)
           
 ClassNode getClassNode()
           
private  MethodNode getCovariantImplementation(MethodNode oldMethod, MethodNode overridingMethod, java.util.Map genericsSpec)
           
private  ConstructorCallExpression getFirstIfSpecialConstructorCall(Statement code)
           
private  FieldNode getMetaClassField(ClassNode node)
           
 MethodNode getMethodNode()
           
static long getTimestamp(java.lang.Class clazz)
           
private  boolean isAssignable(ClassNode node, ClassNode testNode)
           
private  boolean isEnum(ClassNode node)
           
private  boolean methodNeedsReplacement(MethodNode m)
           
private  FieldNode setMetaClassFieldIfNotExists(ClassNode node, FieldNode metaClassField)
           
private  boolean statementReturns(Statement last)
           
private  void storeMissingCovariantMethods(java.util.Collection methods, MethodNode method, java.util.Map methodsToAdd, java.util.Map genericsSpec)
           
 void visitClass(ClassNode node)
          add code to implement GroovyObject
 void visitConstructor(ConstructorNode node)
           
 void visitField(FieldNode node)
           
 void visitGenericType(GenericsType genericsType)
           
 void visitMethod(MethodNode node)
           
 void visitProperty(PropertyNode node)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

__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

INVOKE_METHOD_PARAMS

private static final Parameter[] INVOKE_METHOD_PARAMS

SET_PROPERTY_PARAMS

private static final Parameter[] SET_PROPERTY_PARAMS

GET_PROPERTY_PARAMS

private static final Parameter[] GET_PROPERTY_PARAMS

SET_METACLASS_PARAMS

private static final Parameter[] SET_METACLASS_PARAMS

classNode

private ClassNode classNode

methodNode

private MethodNode methodNode
Constructor Detail

Verifier

public Verifier()
Method Detail

getClassNode

public ClassNode getClassNode()

getMethodNode

public MethodNode getMethodNode()

setMetaClassFieldIfNotExists

private FieldNode setMetaClassFieldIfNotExists(ClassNode node,
                                               FieldNode metaClassField)

getMetaClassField

private FieldNode getMetaClassField(ClassNode node)

visitClass

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

Specified by:
visitClass in interface GroovyClassVisitor
Parameters:
node -

addTimeStamp

protected void addTimeStamp(ClassNode node)

checkReturnInObjectInitializer

private void checkReturnInObjectInitializer(java.util.List init)

visitConstructor

public void visitConstructor(ConstructorNode node)
Specified by:
visitConstructor in interface GroovyClassVisitor

visitMethod

public void visitMethod(MethodNode node)
Specified by:
visitMethod in interface GroovyClassVisitor

addReturnIfNeeded

private void addReturnIfNeeded(MethodNode node)

addReturnsIfNeeded

private Statement addReturnsIfNeeded(Statement statement,
                                     VariableScope scope)

statementReturns

private boolean statementReturns(Statement last)

visitField

public void visitField(FieldNode node)
Specified by:
visitField in interface GroovyClassVisitor

methodNeedsReplacement

private boolean methodNeedsReplacement(MethodNode m)

visitProperty

public void visitProperty(PropertyNode node)
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)

addDefaultParameters

protected void addDefaultParameters(java.util.List methods,
                                    Verifier.DefaultArgsAction action)
Creates a new helper method for each combination of default parameter expressions


addClosureCode

protected void addClosureCode(InnerClassNode node)

addInitialization

protected void addInitialization(ClassNode node)

addInitialization

protected void addInitialization(ClassNode node,
                                 ConstructorNode constructorNode)

isEnum

private boolean isEnum(ClassNode node)

getFirstIfSpecialConstructorCall

private ConstructorCallExpression getFirstIfSpecialConstructorCall(Statement code)

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)

addCovariantMethods

private void addCovariantMethods(ClassNode classNode,
                                 java.util.List declaredMethods,
                                 java.util.Map abstractMethods,
                                 java.util.Map methodsToAdd,
                                 java.util.Map oldGenericsSpec)

getCovariantImplementation

private MethodNode getCovariantImplementation(MethodNode oldMethod,
                                              MethodNode overridingMethod,
                                              java.util.Map genericsSpec)

isAssignable

private boolean isAssignable(ClassNode node,
                             ClassNode testNode)

cleanParameters

private Parameter[] cleanParameters(Parameter[] parameters)

storeMissingCovariantMethods

private void storeMissingCovariantMethods(java.util.Collection methods,
                                          MethodNode method,
                                          java.util.Map methodsToAdd,
                                          java.util.Map genericsSpec)

correctToGenericsSpec

private ClassNode correctToGenericsSpec(java.util.Map genericsSpec,
                                        GenericsType type)

correctToGenericsSpec

private ClassNode correctToGenericsSpec(java.util.Map genericsSpec,
                                        ClassNode type)

equalParametersNormal

private boolean equalParametersNormal(MethodNode m1,
                                      MethodNode m2)

equalParametersWithGenerics

private boolean equalParametersWithGenerics(MethodNode m1,
                                            MethodNode m2,
                                            java.util.Map genericsSpec)

createGenericsSpec

private java.util.Map createGenericsSpec(ClassNode current,
                                         java.util.Map oldSpec)


Copyright © ${year} The Codehaus. All Rights Reserved.