org.apache.groovy.ast.tools

## Class ClassNodeUtils

- java.lang.Object
- - org.apache.groovy.ast.tools.ClassNodeUtils

-     public class ClassNodeUtils
      extends Object

  Utility class for working with ClassNodes

- - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static void` | `addDeclaredMethodsFromAllInterfaces(ClassNode cNode, Map<String,MethodNode> methodsMap)` Adds methods from interfaces and parent interfaces.
    `static void` | `addDeclaredMethodsFromInterfaces(ClassNode cNode, Map<String,MethodNode> methodsMap)` Adds methods from all interfaces.
    `static void` | `addGeneratedConstructor(ClassNode classNode, ConstructorNode consNode)` Add a method that is marked as `@Generated`.
    `static ConstructorNode` | `addGeneratedConstructor(ClassNode classNode, int modifiers, Parameter[] parameters, ClassNode[] exceptions, Statement code)` Add a method that is marked as `@Generated`.
    `static void` | `addGeneratedInnerClass(ClassNode cNode, ClassNode inner)` Add an inner class that is marked as `@Generated`.
    `static void` | `addGeneratedMethod(ClassNode cNode, MethodNode mNode)` Add a method and mark it as `@Generated`.
    `static MethodNode` | `addGeneratedMethod(ClassNode cNode, String name, int modifiers, ClassNode returnType, Parameter[] parameters, ClassNode[] exceptions, Statement code)` Return an existing method if one exists or else create a new method and mark it as `@Generated`.
    `static String` | `formatTypeName(ClassNode cNode)` Formats a type name into a human readable version.
    `static Map<String,MethodNode>` | `getDeclaredMethodsFromInterfaces(ClassNode cNode)` Gets methods from all interfaces.
    `static Map<String,MethodNode>` | `getDeclaredMethodsFromSuper(ClassNode cNode)` Add methods from the super class.
    `static FieldNode` | `getField(ClassNode classNode, String fieldName)` Return the (potentially inherited) field of the classnode.
    `static String` | `getPropNameForAccessor(String accessorName)` Returns the property name, e.g.
    `static PropertyNode` | `getStaticProperty(ClassNode cNode, String propName)` Detect whether a static property with the given name is within the class or a super class.
    `static boolean` | `hasExplicitConstructor(AbstractASTTransformation xform, ClassNode cNode)` Determine if an explicit (non-generated) constructor is in the class.
    `static boolean` | `hasNoArgConstructor(ClassNode cNode)`
    `static boolean` | `hasPossibleStaticMethod(ClassNode cNode, String name, Expression arguments, boolean trySpread)` Returns true if the given method has a possibly matching static method with the given name and arguments.
    `static boolean` | `hasPossibleStaticProperty(ClassNode cNode, String methodName)` Return true if we have a static accessor
    `static boolean` | `hasStaticProperty(ClassNode cNode, String propName)`
    `static boolean` | `isInnerClass(ClassNode cNode)` Detect whether a given ClassNode is a inner class (non-static).
    `static boolean` | `isValidAccessorName(String accessorName)` Detect whether the given accessor name starts with "get", "set" or "is" followed by at least one character.
    `static boolean` | `samePackageName(ClassNode first, ClassNode second)` Determine if the given ClassNode values have the same package name.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

    - #### formatTypeName

          public static 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)

    - #### addGeneratedMethod

          public static MethodNode addGeneratedMethod(ClassNode cNode,
                                                      String name,
                                                      int modifiers,
                                                      ClassNode returnType,
                                                      Parameter[] parameters,
                                                      ClassNode[] exceptions,
                                                      Statement code)

      Return an existing method if one exists or else create a new method and mark it as `@Generated`.
      See Also:
        `ClassNode.addMethod(String, int, ClassNode, Parameter[], ClassNode[], Statement)`

    - #### addGeneratedMethod

          public static void addGeneratedMethod(ClassNode cNode,
                                                MethodNode mNode)

      Add a method and mark it as `@Generated`.
      See Also:
        `ClassNode.addMethod(MethodNode)`

    - #### addGeneratedInnerClass

          public static void addGeneratedInnerClass(ClassNode cNode,
                                                    ClassNode inner)

      Add an inner class that is marked as `@Generated`.
      See Also:
        `ModuleNode.addClass(ClassNode)`

    - #### addGeneratedConstructor

          public static ConstructorNode addGeneratedConstructor(ClassNode classNode,
                                                                int modifiers,
                                                                Parameter[] parameters,
                                                                ClassNode[] exceptions,
                                                                Statement code)

      Add a method that is marked as `@Generated`.
      See Also:
        `ClassNode.addConstructor(int, Parameter[], ClassNode[], Statement)`

    - #### addGeneratedConstructor

          public static void addGeneratedConstructor(ClassNode classNode,
                                                     ConstructorNode consNode)

      Add a method that is marked as `@Generated`.
      See Also:
        `ClassNode.addConstructor(ConstructorNode)`

    - #### getDeclaredMethodsFromSuper

          public static Map<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,
                                                              Map<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 Map<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,
                                                                 Map<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,
                                                        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,
                                                          String methodName)

      Return true if we have a static accessor

    - #### getPropNameForAccessor

          public static String getPropNameForAccessor(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(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,
                                                  String propName)

    - #### getStaticProperty

          public static PropertyNode getStaticProperty(ClassNode cNode,
                                                       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:
        `NullPointerException` - if either of the given nodes are null

    - #### getField

          public static FieldNode getField(ClassNode classNode,
                                           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