Package groovy.util

# Interface Factory

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

    public interface Factory

- ## Method Summary

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

- ## Method Details

  - ### isLeaf

    boolean isLeaf()
    Returns:
      true if no child closures should be processed

  - ### isHandlesNodeChildren

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

  - ### onFactoryRegistration

    void onFactoryRegistration​(FactoryBuilderSupport builder, String registeredName, 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

    Object newInstance​(FactoryBuilderSupport builder, Object name, Object value, Map attributes) throws InstantiationException, 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:
      `InstantiationException` - if attempting to instantiate an interface or abstract class
      `IllegalAccessException` - if the instance can't be created due to a security violation

  - ### onHandleNodeAttributes

    boolean onHandleNodeAttributes​(FactoryBuilderSupport builder, Object node, 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, 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, Object parent, Object node)
    Parameters:
      `builder` - the FactoryBuilder
      `parent` - the parent node (null if 'root')
      `node` - the node just completed

  - ### setParent

    void setParent​(FactoryBuilderSupport builder, Object parent, Object child)

  - ### setChild

    void setChild​(FactoryBuilderSupport builder, Object parent, Object child)