Package: org.apache.groovy.ast.tools

## [Java] Class ClassNodeUtils

- org.apache.groovy.ast.tools.ClassNodeUtils

-     public class ClassNodeUtils
      extends Object

  Utility class for working with ClassNodes

- - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public static void` | `addDeclaredMethodsFromAllInterfaces(ClassNode cNode, Map<String, MethodNode> methodsMap)` Adds methods from interfaces and parent interfaces.
    `` | `public static void` | `addDeclaredMethodsFromInterfaces(ClassNode cNode, Map<String, MethodNode> methodsMap)` Adds methods from all interfaces.
    `` | `public static ConstructorNode` | `addGeneratedConstructor(ClassNode classNode, int modifiers, Parameter[] parameters, ClassNode[] exceptions, Statement code)` Adds a method that is marked as `@Generated`.
    `` | `public static void` | `addGeneratedConstructor(ClassNode classNode, ConstructorNode ctorNode)` Adds a method that is marked as `@Generated`.
    `` | `public static void` | `addGeneratedInnerClass(ClassNode cNode, ClassNode inner)` Adds an inner class that is marked as `@Generated`.
    `` | `public static MethodNode` | `addGeneratedMethod(ClassNode cNode, String name, int modifiers, ClassNode returnType, Parameter[] parameters, ClassNode[] exceptions, Statement code)` Returns an existing method if one exists or else create a new method and mark it as `@Generated`.
    `` | `public static void` | `addGeneratedMethod(ClassNode cNode, MethodNode mNode)` Adds a method and mark it as `@Generated`.
    `` | `public static void` | `addGeneratedMethod(ClassNode cNode, MethodNode mNode, boolean skipChecks)` Adds a method and mark it as `@Generated`.
    `` | `public static String` | `formatTypeName(ClassNode cNode)` Formats a type name into a human-readable version.
    `` | `public static Map<String, MethodNode>` | `getDeclaredMethodsFromInterfaces(ClassNode cNode)` Gets methods from all interfaces.
    `` | `public static Map<String, MethodNode>` | `getDeclaredMethodsFromSuper(ClassNode cNode)` Gets methods from the super class.
    `` | `public static FieldNode` | `getField(ClassNode classNode, String fieldName)` Searches the class for a field that matches specified name.
    `` | `public static FieldNode` | `getField(ClassNode classNode, String fieldName, Predicate<? super FieldNode> acceptability)` Searches the class for a field that matches specified name and test.
    `` | `public static MethodNode` | `getMethod(ClassNode classNode, String methodName, Predicate<? super MethodNode> acceptability)` Searches the class for a method that matches specified name and test.
    `` | `public static ClassNode` | `getNestHost(ClassNode cNode)` Returns the nest host of the given class, which may be the class itself.
    `` | `public static String` | `getPropNameForAccessor(String accessorName)` Returns the property name, e.g. age, given an accessor name, e.g. getAge.
    `` | `public static PropertyNode` | `getStaticProperty(ClassNode cNode, String propName)` Finds static property within the class or super class.
    `` | `public static boolean` | `hasExplicitConstructor(AbstractASTTransformation xform, ClassNode cNode)` Determines if the given ClassNode declares an explicit (non-generated) constructor.
    `` | `public static boolean` | `hasNoArgConstructor(ClassNode cNode)` Determines if the given ClassNode declares a zero argument constructor.
    `` | `public static boolean` | `hasPossibleStaticMethod(ClassNode cNode, String name, Expression arguments, boolean trySpread)` Determines if the given method has a possibly matching static method with the given name and arguments.
    `` | `public static boolean` | `hasPossibleStaticProperty(ClassNode cNode, String methodName)` Determines if the given class has the named static property.
    `` | `public static boolean` | `hasStaticProperty(ClassNode cNode, String propName)` Determines if the given class has the named static property.
    `` | `public static boolean` | `isCompatibleWith(ClassNode source, ClassNode target)` Determines if the source ClassNode is compatible with the target ClassNode.
    `` | `public static boolean` | `isInnerClass(ClassNode cNode)` Determines if the given ClassNode is a non-static inner class.
    `` | `public static boolean` | `isNonSealed(ClassNode cn)` Determines if the type is declared `non-sealed`.
    `` | `public static boolean` | `isSubtype(ClassNode maybeExtendedOrImplemented, ClassNode cNode)` Determines if given class is, extends or implements a class or interface.
    `` | `public static boolean` | `isValidAccessorName(String accessorName)` Determines if the given accessor name starts with "get", "set" or "is" followed by at least one character.
    `` | `public static boolean` | `samePackageName(ClassNode first, ClassNode second)` Determines if the given ClassNode values have the same package name.

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Object` | `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

    - #### 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
      Since:
        2.5.0

    - #### 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
      Since:
        2.5.0

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

      Adds a method that is marked as `@Generated`.

      See Also:
        ClassNode.addConstructor
      Since:
        2.5.3

    - #### public static void addGeneratedConstructor(ClassNode classNode, ConstructorNode ctorNode)

      Adds a method that is marked as `@Generated`.

      See Also:
        ClassNode.addConstructor
      Since:
        2.5.3

    - #### public static void addGeneratedInnerClass(ClassNode cNode, ClassNode inner)

      Adds an inner class that is marked as `@Generated`.

      See Also:
        ModuleNode.addClass
      Since:
        2.5.7

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

      Returns an existing method if one exists or else create a new method and mark it as `@Generated`.

      See Also:
        ClassNode.addMethod
      Since:
        2.5.3

    - #### public static void addGeneratedMethod(ClassNode cNode, MethodNode mNode)

      Adds a method and mark it as `@Generated`.

      See Also:
        ClassNode.addMethod
      Since:
        2.5.3

    - #### public static void addGeneratedMethod(ClassNode cNode, MethodNode mNode, boolean skipChecks)

      Adds a method and mark it as `@Generated`.

      See Also:
        ClassNode.addMethod
      Since:
        3.0.8

    - #### 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)
      Since:
        2.5.0

    - #### 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
      Since:
        2.5.0

    - #### public static Map<String, MethodNode> getDeclaredMethodsFromSuper(ClassNode cNode)

      Gets methods from the super class.

      Since:
        2.5.0

    - #### public static FieldNode getField(ClassNode classNode, String fieldName)

      Searches the class for a field that matches specified name.

      Since:
        3.0.0

    - #### public static FieldNode getField(ClassNode classNode, String fieldName, Predicate<? super FieldNode> acceptability)

      Searches the class for a field that matches specified name and test.

      Since:
        4.0.0

    - #### public static MethodNode getMethod(ClassNode classNode, String methodName, Predicate<? super MethodNode> acceptability)

      Searches the class for a method that matches specified name and test.

      Since:
        5.0.0

    - #### public static ClassNode getNestHost(ClassNode cNode)

      Returns the nest host of the given class, which may be the class itself.

      Since:
        5.0.0

    - #### 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
      Since:
        2.5.0

    - #### public static PropertyNode getStaticProperty(ClassNode cNode, String propName)

      Finds static property within the class or super class.

      Parameters:
        `cNode` - the ClassNode of interest
        `propName` - the property name
      Returns:
        the static property if found or else null
      Since:
        2.5.0

    - #### public static boolean hasExplicitConstructor(AbstractASTTransformation xform, ClassNode cNode)

      Determines if the given ClassNode declares an explicit (non-generated) constructor.

      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
      Since:
        2.5.0

    - #### public static boolean hasNoArgConstructor(ClassNode cNode)

      Determines if the given ClassNode declares a zero argument constructor.

      Since:
        2.5.0

    - #### public static boolean hasPossibleStaticMethod(ClassNode cNode, String name, Expression arguments, boolean trySpread)

      Determines 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.
      Since:
        2.5.0

    - #### public static boolean hasPossibleStaticProperty(ClassNode cNode, String methodName)

      Determines if the given class has the named static property.

      Since:
        2.5.0

    - #### public static boolean hasStaticProperty(ClassNode cNode, String propName)

      Determines if the given class has the named static property.

      Since:
        2.5.0

    - #### public static boolean isCompatibleWith(ClassNode source, ClassNode target)

      Determines if the source ClassNode is compatible with the target ClassNode.

      Since:
        4.0.0

    - #### public static boolean isInnerClass(ClassNode cNode)

      Determines if the given ClassNode is a non-static inner class.

      Parameters:
        `cNode` - the ClassNode of interest
      Returns:
        true if the given node is a (non-static) inner class, else false
      Since:
        2.5.0

    - #### public static boolean isNonSealed(ClassNode cn)

      Determines if the type is declared `non-sealed`.

      Since:
        5.0.0

    - #### public static boolean isSubtype(ClassNode maybeExtendedOrImplemented, ClassNode cNode)

      Determines if given class is, extends or implements a class or interface.

      Since:
        4.0.16

    - #### public static boolean isValidAccessorName(String accessorName)

      Determines if 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
      Since:
        2.5.0

    - #### public static boolean samePackageName(ClassNode first, ClassNode second)

      Determines 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
      Since:
        2.5.0