org.gradle.api.plugins

## Interface ExtensionContainer

- All Known Subinterfaces:
    Convention

      public interface ExtensionContainer

  Allows adding 'namespaced' DSL extensions to a target object.

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `add(String name, Object extension)` Adding an extension of name 'foo' will: add 'foo' dynamic property add 'foo' dynamic method that accepts a closure that is a configuration script block
    `<T> void` | `configure(Class<T> type, Action<? super T> action)` Looks for the extension of the specified type and configures it with the supplied action.
    `<T> T` | `create(String name, Class<T> type, Object... constructionArguments)` Adds a new extension to this container, that itself is dynamically made `ExtensionAware`.
    `Object` | `findByName(String name)` Looks for the extension of a given name.
    `<T> T` | `findByType(Class<T> type)` Looks for the extension of a given type (useful to avoid casting).
    `Object` | `getByName(String name)` Looks for the extension of a given name.
    `<T> T` | `getByType(Class<T> type)` Looks for the extension of a given type (useful to avoid casting).
    `ExtraPropertiesExtension` | `getExtraProperties()` The extra properties extension in this extension container.

- - ### Method Detail

    - #### add

          void add(String name,
                 Object extension)

      Adding an extension of name 'foo' will:
    - add 'foo' dynamic property
    - add 'foo' dynamic method that accepts a closure that is a configuration script block

Parameters:
  `name` - Will be used as a sort of namespace of properties/methods.
  `extension` - Any object whose methods and properties will extend the target object
Throws:
  `IllegalArgumentException` - When an extension with the given name already exists.

- #### create

      <T> T create(String name,
                 Class<T> type,
                 Object... constructionArguments)

  Adds a new extension to this container, that itself is dynamically made `ExtensionAware`. A new instance of the given `type` will be created using the given `constructionArguments`. The new instance will have been dynamically which means that you can cast the object to `ExtensionAware`.
  Parameters:
    `name` - The name for the extension
    `type` - The type of the extension
    `constructionArguments` - The arguments to be used to construct the extension instance
  Returns:
    The created instance
  Throws:
    `IllegalArgumentException` - When an extension with the given name already exists.
  See Also:
    `add(String, Object)`

- #### getByType

      <T> T getByType(Class<T> type)
                  throws UnknownDomainObjectException

  Looks for the extension of a given type (useful to avoid casting). If none found it will throw an exception.
  Parameters:
    `type` - extension type
  Returns:
    extension, never null
  Throws:
    `UnknownDomainObjectException` - When the given extension is not found.

- #### findByType

      <T> T findByType(Class<T> type)

  Looks for the extension of a given type (useful to avoid casting). If none found null is returned.
  Parameters:
    `type` - extension type
  Returns:
    extension or null

- #### getByName

      Object getByName(String name)
                       throws UnknownDomainObjectException

  Looks for the extension of a given name. If none found it will throw an exception.
  Parameters:
    `name` - extension name
  Returns:
    extension, never null
  Throws:
    `UnknownDomainObjectException` - When the given extension is not found.

- #### findByName

      Object findByName(String name)

  Looks for the extension of a given name. If none found null is returned.
  Parameters:
    `name` - extension name
  Returns:
    extension or null

- #### configure

      @Incubating
      <T> void configure(Class<T> type,
                                  Action<? super T> action)

  Looks for the extension of the specified type and configures it with the supplied action.
  Parameters:
    `type` - extension type
    `action` - the configure action
  Throws:
    `UnknownDomainObjectException` - if no extension is found.

- #### getExtraProperties

      ExtraPropertiesExtension getExtraProperties()

  The extra properties extension in this extension container. This extension is always present in the container, with the name “ext”.
  Returns:
    The extra properties extension in this extension container.