Class AbstractGrailsArtefactTransformer

    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      protected void addApiLookupFieldAndSetter​(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.ClassNode implementationNode, java.lang.String apiProperty, org.codehaus.groovy.ast.expr.Expression initialValueExpression)  
      protected void addDelegateInstanceMethod​(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.Expression delegate, org.codehaus.groovy.ast.MethodNode declaredMethod, org.codehaus.groovy.ast.AnnotationNode markerAnnotation, java.util.Map<java.lang.String,​org.codehaus.groovy.ast.ClassNode> genericsPlaceholders)  
      protected void addDelegateStaticMethod​(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.MethodCallExpression apiLookupMethod, org.codehaus.groovy.ast.MethodNode declaredMethod, java.util.Map<java.lang.String,​org.codehaus.groovy.ast.ClassNode> genericsPlaceholders)  
      protected void addEnhancedAnnotation​(org.codehaus.groovy.ast.ClassNode classNode)  
      static void addToTransformedClasses​(java.lang.String name)  
      void clearCachedState()  
      int compareTo​(java.lang.Object o)
      Used for ordering not equality.
      protected java.lang.String getArtefactType()  
      java.lang.String[] getArtefactTypes()  
      abstract java.lang.Class getInstanceImplementation()
      The class that provides the implementation of all instance methods and properties
      protected org.codehaus.groovy.ast.AnnotationNode getMarkerAnnotation()
      A marker annotation to be applied to added methods, defaults to null
      abstract java.lang.Class getStaticImplementation()
      The class that provides static methods
      static java.util.Collection<java.lang.String> getTransformedClassNames()  
      protected boolean hasArtefactAnnotation​(org.codehaus.groovy.ast.ClassNode classNode)  
      protected boolean isCandidateInstanceMethod​(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode declaredMethod)  
      protected boolean isStaticCandidateMethod​(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode declaredMethod)  
      protected boolean isStaticMethodExcluded​(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode declaredMethod)  
      protected boolean isStaticMethodIncluded​(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.MethodNode declaredMethod)  
      protected boolean isValidArtefactType()  
      protected boolean isValidTargetClassNode​(org.codehaus.groovy.ast.ClassNode classNode)  
      void performInjection​(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.ast.ClassNode classNode)
      Handles injection of properties, methods etc.
      void performInjection​(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.classgen.GeneratorContext context, org.codehaus.groovy.ast.ClassNode classNode)
      Handles injection of properties, methods etc.
      protected void performInjectionInternal​(java.lang.String apiInstanceProperty, org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.ast.ClassNode classNode)
      Subclasses can override to provide additional transformation
      void performInjectionOnAnnotatedClass​(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.ast.ClassNode classNode)
      Handles injection of properties, methods etc.
      void performInjectionOnAnnotatedClass​(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.classgen.GeneratorContext context, org.codehaus.groovy.ast.ClassNode classNode)
      Performs injection on an annotated entity
      protected void performInstanceImplementationInjection​(org.codehaus.groovy.control.SourceUnit source, org.codehaus.groovy.ast.ClassNode classNode, java.util.Map<java.lang.String,​org.codehaus.groovy.ast.ClassNode> genericsPlaceholders, java.lang.Class instanceImplementation)  
      protected void performStaticImplementationInjection​(org.codehaus.groovy.ast.ClassNode classNode, java.util.Map<java.lang.String,​org.codehaus.groovy.ast.ClassNode> genericsPlaceholders, java.lang.Class staticImplementation)  
      protected org.codehaus.groovy.ast.MethodNode populateAutowiredApiLookupMethod​(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.ClassNode implementationNode, java.lang.String apiProperty, java.lang.String methodName, org.codehaus.groovy.ast.stmt.BlockStatement methodBody)  
      protected org.codehaus.groovy.ast.MethodNode populateDefaultApiLookupMethod​(org.codehaus.groovy.ast.ClassNode implementationNode, java.lang.String apiInstanceProperty, java.lang.String methodName, org.codehaus.groovy.ast.stmt.BlockStatement methodBody)  
      protected boolean requiresAutowiring()
      If the API requires autowiring then a @Autowired property will be added.
      protected boolean requiresStaticLookupMethod()
      Subclasses should override in the instance API requires a static lookup method instead of autowiring.
      protected java.util.Map<java.lang.String,​org.codehaus.groovy.ast.ClassNode> resolveGenericsPlaceHolders​(org.codehaus.groovy.ast.ClassNode classNode)  
      protected boolean shouldSkipInjection​(org.codehaus.groovy.ast.ClassNode classNode)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • OBJECT_CLASS

        protected static final org.codehaus.groovy.ast.ClassNode OBJECT_CLASS
      • METHOD_MISSING_METHOD_NAME

        public static final java.lang.String METHOD_MISSING_METHOD_NAME
        See Also:
        Constant Field Values
      • STATIC_METHOD_MISSING_METHOD_NAME

        public static final java.lang.String STATIC_METHOD_MISSING_METHOD_NAME
        See Also:
        Constant Field Values
    • Constructor Detail

      • AbstractGrailsArtefactTransformer

        public AbstractGrailsArtefactTransformer()
    • Method Detail

      • getArtefactType

        protected java.lang.String getArtefactType()
      • clearCachedState

        public void clearCachedState()
      • compareTo

        public int compareTo​(java.lang.Object o)
        Used for ordering not equality. Note: this class has a natural ordering that is inconsistent with equals.
        Specified by:
        compareTo in interface java.lang.Comparable
        See Also:
        Comparable.compareTo(Object)
      • performInjection

        public void performInjection​(org.codehaus.groovy.control.SourceUnit source,
                                     org.codehaus.groovy.classgen.GeneratorContext context,
                                     org.codehaus.groovy.ast.ClassNode classNode)
        Description copied from interface: ClassInjector
        Handles injection of properties, methods etc. into a class.
        Specified by:
        performInjection in interface ClassInjector
        Parameters:
        source - The source unit
        context - The generator context
        classNode - The ClassNode instance
      • performInjectionOnAnnotatedClass

        public void performInjectionOnAnnotatedClass​(org.codehaus.groovy.control.SourceUnit source,
                                                     org.codehaus.groovy.ast.ClassNode classNode)
        Description copied from interface: ClassInjector
        Handles injection of properties, methods etc. into a class.
        Specified by:
        performInjectionOnAnnotatedClass in interface ClassInjector
        Parameters:
        source - The source unit
        classNode - The ClassNode instance
      • performInjectionOnAnnotatedClass

        public void performInjectionOnAnnotatedClass​(org.codehaus.groovy.control.SourceUnit source,
                                                     org.codehaus.groovy.classgen.GeneratorContext context,
                                                     org.codehaus.groovy.ast.ClassNode classNode)
        Description copied from interface: AnnotatedClassInjector
        Performs injection on an annotated entity
        Specified by:
        performInjectionOnAnnotatedClass in interface AnnotatedClassInjector
        Parameters:
        source - The source unit
        classNode - The class node
      • performInstanceImplementationInjection

        protected void performInstanceImplementationInjection​(org.codehaus.groovy.control.SourceUnit source,
                                                              org.codehaus.groovy.ast.ClassNode classNode,
                                                              java.util.Map<java.lang.String,​org.codehaus.groovy.ast.ClassNode> genericsPlaceholders,
                                                              java.lang.Class instanceImplementation)
      • performStaticImplementationInjection

        protected void performStaticImplementationInjection​(org.codehaus.groovy.ast.ClassNode classNode,
                                                            java.util.Map<java.lang.String,​org.codehaus.groovy.ast.ClassNode> genericsPlaceholders,
                                                            java.lang.Class staticImplementation)
      • addEnhancedAnnotation

        protected void addEnhancedAnnotation​(org.codehaus.groovy.ast.ClassNode classNode)
      • shouldSkipInjection

        protected boolean shouldSkipInjection​(org.codehaus.groovy.ast.ClassNode classNode)
      • hasArtefactAnnotation

        protected boolean hasArtefactAnnotation​(org.codehaus.groovy.ast.ClassNode classNode)
      • isValidTargetClassNode

        protected boolean isValidTargetClassNode​(org.codehaus.groovy.ast.ClassNode classNode)
      • isValidArtefactType

        protected boolean isValidArtefactType()
      • resolveGenericsPlaceHolders

        protected java.util.Map<java.lang.String,​org.codehaus.groovy.ast.ClassNode> resolveGenericsPlaceHolders​(org.codehaus.groovy.ast.ClassNode classNode)
      • addDelegateInstanceMethod

        protected void addDelegateInstanceMethod​(org.codehaus.groovy.ast.ClassNode classNode,
                                                 org.codehaus.groovy.ast.expr.Expression delegate,
                                                 org.codehaus.groovy.ast.MethodNode declaredMethod,
                                                 org.codehaus.groovy.ast.AnnotationNode markerAnnotation,
                                                 java.util.Map<java.lang.String,​org.codehaus.groovy.ast.ClassNode> genericsPlaceholders)
      • addDelegateStaticMethod

        protected void addDelegateStaticMethod​(org.codehaus.groovy.ast.ClassNode classNode,
                                               org.codehaus.groovy.ast.expr.MethodCallExpression apiLookupMethod,
                                               org.codehaus.groovy.ast.MethodNode declaredMethod,
                                               java.util.Map<java.lang.String,​org.codehaus.groovy.ast.ClassNode> genericsPlaceholders)
      • isCandidateInstanceMethod

        protected boolean isCandidateInstanceMethod​(org.codehaus.groovy.ast.ClassNode classNode,
                                                    org.codehaus.groovy.ast.MethodNode declaredMethod)
      • isStaticCandidateMethod

        protected boolean isStaticCandidateMethod​(org.codehaus.groovy.ast.ClassNode classNode,
                                                  org.codehaus.groovy.ast.MethodNode declaredMethod)
      • isStaticMethodExcluded

        protected boolean isStaticMethodExcluded​(org.codehaus.groovy.ast.ClassNode classNode,
                                                 org.codehaus.groovy.ast.MethodNode declaredMethod)
      • isStaticMethodIncluded

        protected boolean isStaticMethodIncluded​(org.codehaus.groovy.ast.ClassNode classNode,
                                                 org.codehaus.groovy.ast.MethodNode declaredMethod)
      • requiresStaticLookupMethod

        protected boolean requiresStaticLookupMethod()
        Subclasses should override in the instance API requires a static lookup method instead of autowiring. Defaults to false.
        Returns:
        Whether a static lookup method is used for the instance API
      • populateAutowiredApiLookupMethod

        protected org.codehaus.groovy.ast.MethodNode populateAutowiredApiLookupMethod​(org.codehaus.groovy.ast.ClassNode classNode,
                                                                                      org.codehaus.groovy.ast.ClassNode implementationNode,
                                                                                      java.lang.String apiProperty,
                                                                                      java.lang.String methodName,
                                                                                      org.codehaus.groovy.ast.stmt.BlockStatement methodBody)
      • addApiLookupFieldAndSetter

        protected void addApiLookupFieldAndSetter​(org.codehaus.groovy.ast.ClassNode classNode,
                                                  org.codehaus.groovy.ast.ClassNode implementationNode,
                                                  java.lang.String apiProperty,
                                                  org.codehaus.groovy.ast.expr.Expression initialValueExpression)
      • populateDefaultApiLookupMethod

        protected org.codehaus.groovy.ast.MethodNode populateDefaultApiLookupMethod​(org.codehaus.groovy.ast.ClassNode implementationNode,
                                                                                    java.lang.String apiInstanceProperty,
                                                                                    java.lang.String methodName,
                                                                                    org.codehaus.groovy.ast.stmt.BlockStatement methodBody)
      • requiresAutowiring

        protected boolean requiresAutowiring()
        If the API requires autowiring then a @Autowired property will be added. If not a private field that instantiates the API will be crated. Defaults to true.
        Returns:
        Whether autowiring is required
      • performInjectionInternal

        protected void performInjectionInternal​(java.lang.String apiInstanceProperty,
                                                org.codehaus.groovy.control.SourceUnit source,
                                                org.codehaus.groovy.ast.ClassNode classNode)
        Subclasses can override to provide additional transformation
        Parameters:
        apiInstanceProperty -
        source - The source
        classNode - The class node
      • getInstanceImplementation

        public abstract java.lang.Class getInstanceImplementation()
        The class that provides the implementation of all instance methods and properties
        Returns:
        A class whose methods contain a first argument of type object that is the instance
      • getStaticImplementation

        public abstract java.lang.Class getStaticImplementation()
        The class that provides static methods
        Returns:
        A class or null if non is provided
      • performInjection

        public void performInjection​(org.codehaus.groovy.control.SourceUnit source,
                                     org.codehaus.groovy.ast.ClassNode classNode)
        Description copied from interface: ClassInjector
        Handles injection of properties, methods etc. into a class.
        Specified by:
        performInjection in interface ClassInjector
        Parameters:
        source - The source unit
        classNode - The ClassNode instance
      • getMarkerAnnotation

        protected org.codehaus.groovy.ast.AnnotationNode getMarkerAnnotation()
        A marker annotation to be applied to added methods, defaults to null
        Returns:
        The annotation node
      • getTransformedClassNames

        public static java.util.Collection<java.lang.String> getTransformedClassNames()
      • addToTransformedClasses

        public static void addToTransformedClasses​(java.lang.String name)