Package groovy.util

## Interface Factory

- All Known Implementing Classes:
    `AbstractFactory`, `CustomizersFactory`, `ImportCustomizerFactory`, `InlinedASTCustomizerFactory`, `SecureASTCustomizerFactory`, `SourceAwareCustomizerFactory`

      public interface Factory

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `isHandlesNodeChildren()` | Does this factory "Own" it's child closure.
    `boolean` | `isLeaf()` |
    `java.lang.Object` | `newInstance​(FactoryBuilderSupport builder, java.lang.Object name, java.lang.Object value, java.util.Map attributes)` |
    `void` | `onFactoryRegistration​(FactoryBuilderSupport builder, java.lang.String registeredName, java.lang.String registeredGroupName)` | Called when a factory is registered to a builder
    `boolean` | `onHandleNodeAttributes​(FactoryBuilderSupport builder, java.lang.Object node, java.util.Map attributes)` |
    `boolean` | `onNodeChildren​(FactoryBuilderSupport builder, java.lang.Object node, Closure childContent)` | Only called if it isLeaf is false and isHandlesNodeChildren is true
    `void` | `onNodeCompleted​(FactoryBuilderSupport builder, java.lang.Object parent, java.lang.Object node)` |
    `void` | `setChild​(FactoryBuilderSupport builder, java.lang.Object parent, java.lang.Object child)` |
    `void` | `setParent​(FactoryBuilderSupport builder, java.lang.Object parent, java.lang.Object child)` |

- - ### Method Detail

    - #### isLeaf

          boolean isLeaf()

      Returns:
        true if no child closures should be processed

    - #### isHandlesNodeChildren

          boolean isHandlesNodeChildren()

      Does this factory "Own" it's child closure.
      Returns:
        true if the factory should have onContentClosure() called, false if the builder should handle it

    - #### onFactoryRegistration

          void onFactoryRegistration​(FactoryBuilderSupport builder,
                                     java.lang.String registeredName,
                                     java.lang.String registeredGroupName)

      Called when a factory is registered to a builder
      Parameters:
        `builder` - the build the factory has been registered to
        `registeredName` - the name the factory has been registered under

    - #### newInstance

          java.lang.Object newInstance​(FactoryBuilderSupport builder,
                                       java.lang.Object name,
                                       java.lang.Object value,
                                       java.util.Map attributes)
                                throws java.lang.InstantiationException,
                                       java.lang.IllegalAccessException

      Parameters:
        `builder` - the FactoryBuilder
        `name` - the name of the node being built
        `value` - the 'value' argument in the build node
        `attributes` - the attributes of the build arg
      Returns:
        the object created for the builder
      Throws:
        `java.lang.InstantiationException` - if attempting to instantiate an interface or abstract class
        `java.lang.IllegalAccessException` - if the instance can't be created due to a security violation

    - #### onHandleNodeAttributes

          boolean onHandleNodeAttributes​(FactoryBuilderSupport builder,
                                         java.lang.Object node,
                                         java.util.Map attributes)

      Parameters:
        `builder` - the FactoryBuilder
        `node` - the node (returned from newINstance) to consider the attributes for
        `attributes` - the attributes, a mutable set
      Returns:
        true if the factory builder should use standard bean property matching for the remaining attributes

    - #### onNodeChildren

          boolean onNodeChildren​(FactoryBuilderSupport builder,
                                 java.lang.Object node,
                                 Closure childContent)

      Only called if it isLeaf is false and isHandlesNodeChildren is true
      Parameters:
        `builder` - the FactoryBuilder
        `node` - the node (returned from newINstance) to consider the attributes for
        `childContent` - the child content closure of the builder
      Returns:
        true if the factory builder should apply default node processing to the content child

    - #### onNodeCompleted

          void onNodeCompleted​(FactoryBuilderSupport builder,
                               java.lang.Object parent,
                               java.lang.Object node)

      Parameters:
        `builder` - the FactoryBuilder
        `parent` - the parent node (null if 'root')
        `node` - the node just completed

    - #### setParent

          void setParent​(FactoryBuilderSupport builder,
                         java.lang.Object parent,
                         java.lang.Object child)

    - #### setChild

          void setChild​(FactoryBuilderSupport builder,
                        java.lang.Object parent,
                        java.lang.Object child)