Class ClassNodeUtils


  • public class ClassNodeUtils
    extends java.lang.Object
    Utility class for working with ClassNodes
    • Method Detail

      • formatTypeName

        public static java.lang.String formatTypeName​(ClassNode cNode)
        Formats a type name into a human readable version. For arrays, appends "[]" to the formatted type name of the component. For unit class nodes, uses the class node name.
        Parameters:
        cNode - the type to format
        Returns:
        a human readable version of the type name (java.lang.String[] for example)
      • getDeclaredMethodsFromSuper

        public static java.util.Map<java.lang.String,​MethodNode> getDeclaredMethodsFromSuper​(ClassNode cNode)
        Add methods from the super class.
        Parameters:
        cNode - The ClassNode
        Returns:
        A map of methods
      • addDeclaredMethodsFromInterfaces

        public static void addDeclaredMethodsFromInterfaces​(ClassNode cNode,
                                                            java.util.Map<java.lang.String,​MethodNode> methodsMap)
        Adds methods from all interfaces. Existing entries in the methods map take precedence. Methods from interfaces visited early take precedence over later ones.
        Parameters:
        cNode - The ClassNode
        methodsMap - A map of existing methods to alter
      • getDeclaredMethodsFromInterfaces

        public static java.util.Map<java.lang.String,​MethodNode> getDeclaredMethodsFromInterfaces​(ClassNode cNode)
        Gets methods from all interfaces. Methods from interfaces visited early take precedence over later ones.
        Parameters:
        cNode - The ClassNode
        Returns:
        A map of methods
      • addDeclaredMethodsFromAllInterfaces

        public static void addDeclaredMethodsFromAllInterfaces​(ClassNode cNode,
                                                               java.util.Map<java.lang.String,​MethodNode> methodsMap)
        Adds methods from interfaces and parent interfaces. Existing entries in the methods map take precedence. Methods from interfaces visited early take precedence over later ones.
        Parameters:
        cNode - The ClassNode
        methodsMap - A map of existing methods to alter
      • hasPossibleStaticMethod

        public static boolean hasPossibleStaticMethod​(ClassNode cNode,
                                                      java.lang.String name,
                                                      Expression arguments,
                                                      boolean trySpread)
        Returns true if the given method has a possibly matching static method with the given name and arguments. Handles default arguments and optionally spread expressions.
        Parameters:
        cNode - the ClassNode of interest
        name - the name of the method of interest
        arguments - the arguments to match against
        trySpread - whether to try to account for SpreadExpressions within the arguments
        Returns:
        true if a matching method was found
      • hasPossibleStaticProperty

        public static boolean hasPossibleStaticProperty​(ClassNode cNode,
                                                        java.lang.String methodName)
        Return true if we have a static accessor
      • getPropNameForAccessor

        public static java.lang.String getPropNameForAccessor​(java.lang.String accessorName)
        Returns the property name, e.g. age, given an accessor name, e.g. getAge. Returns the original if a valid prefix cannot be removed.
        Parameters:
        accessorName - the accessor name of interest, e.g. getAge
        Returns:
        the property name, e.g. age, or original if not a valid property accessor name
      • isValidAccessorName

        public static boolean isValidAccessorName​(java.lang.String accessorName)
        Detect whether the given accessor name starts with "get", "set" or "is" followed by at least one character.
        Parameters:
        accessorName - the accessor name of interest, e.g. getAge
        Returns:
        true if a valid prefix is found
      • hasStaticProperty

        public static boolean hasStaticProperty​(ClassNode cNode,
                                                java.lang.String propName)
      • getStaticProperty

        public static PropertyNode getStaticProperty​(ClassNode cNode,
                                                     java.lang.String propName)
        Detect whether a static property with the given name is within the class or a super class.
        Parameters:
        cNode - the ClassNode of interest
        propName - the property name
        Returns:
        the static property if found or else null
      • isInnerClass

        public static boolean isInnerClass​(ClassNode cNode)
        Detect whether a given ClassNode is a inner class (non-static).
        Parameters:
        cNode - the ClassNode of interest
        Returns:
        true if the given node is a (non-static) inner class, else false
      • hasNoArgConstructor

        public static boolean hasNoArgConstructor​(ClassNode cNode)
      • hasExplicitConstructor

        public static boolean hasExplicitConstructor​(AbstractASTTransformation xform,
                                                     ClassNode cNode)
        Determine if an explicit (non-generated) constructor is in the class.
        Parameters:
        xform - if non null, add an error if an explicit constructor is found
        cNode - the type of the containing class
        Returns:
        true if an explicit (non-generated) constructor was found
      • samePackageName

        public static boolean samePackageName​(ClassNode first,
                                              ClassNode second)
        Determine if the given ClassNode values have the same package name.
        Parameters:
        first - a ClassNode
        second - a ClassNode
        Returns:
        true if both given nodes have the same package name
        Throws:
        java.lang.NullPointerException - if either of the given nodes are null
      • getField

        public static FieldNode getField​(ClassNode classNode,
                                         java.lang.String fieldName)
        Return the (potentially inherited) field of the classnode.
        Parameters:
        classNode - the classnode
        fieldName - the name of the field
        Returns:
        the field or null if not found