Class 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 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
    Added code includes:
    • Methods needed to implement GroovyObject
    • Property accessor methods
    • Covariant methods
    • Additional methods/constructors as needed for default parameters
    • Constructor Detail

      • Verifier

        public Verifier()
    • Method Detail

      • getClassNode

        public ClassNode getClassNode()
      • setClassNode

        protected void setClassNode​(ClassNode classNode)
      • getMethodNode

        public MethodNode getMethodNode()
      • addDefaultConstructor

        protected void addDefaultConstructor​(ClassNode node)
      • addGroovyObjectInterfaceAndMethods

        protected void addGroovyObjectInterfaceAndMethods​(ClassNode node,
                                                          java.lang.String classInternalName)
      • addMethod

        protected MethodNode 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.
      • addMethod$$bridge

        protected void addMethod$$bridge​(ClassNode node,
                                         boolean shouldBeSynthetic,
                                         java.lang.String name,
                                         int modifiers,
                                         ClassNode returnType,
                                         Parameter[] parameters,
                                         ClassNode[] exceptions,
                                         Statement code)
      • addTimeStamp

        protected void addTimeStamp​(ClassNode node)
      • addReturnIfNeeded

        protected void addReturnIfNeeded​(MethodNode node)
      • 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)
      • 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
      • visitGenericType

        public void visitGenericType​(GenericsType genericsType)
      • getTimestampFromFieldName

        public static java.lang.Long getTimestampFromFieldName​(java.lang.String fieldName)
      • 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.

        Additionally, single char strings are converted to 'char' types.

        constantExpression - a constant expression
        the same instance of constant expression if the type is already primitive, or a primitive constant if possible.