ExtensionContainer (Gradle API 3.5)
Date: 2017-04-10

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
    --- | ---
    `<T> void` | `add(Class<T> publicType, String name, T extension)` Adds a new extension to this container.
    `void` | `add(String name, Object extension)` Adds a new extension to this container.
    `<T> void` | `add(TypeOf<T> publicType, String name, T extension)` Adds a new extension to this container.
    `<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> void` | `configure(TypeOf<T> type, Action<? super T> action)` Looks for the extension of the specified type and configures it with the supplied action.
    `<T> T` | `create(Class<T> publicType, String name, Class<? extends T> instanceType, Object... constructionArguments)` Creates and adds a new extension to this container.
    `<T> T` | `create(String name, Class<T> type, Object... constructionArguments)` Creates and adds a new extension to this container.
    `<T> T` | `create(TypeOf<T> publicType, String name, Class<? extends T> instanceType, Object... constructionArguments)` Creates and adds a new extension to this container.
    `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).
    `<T> T` | `findByType(TypeOf<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).
    `<T> T` | `getByType(TypeOf<T> type)` Looks for the extension of a given type (useful to avoid casting).
    `ExtraPropertiesExtension` | `getExtraProperties()` The extra properties extension in this extension container.
    `Map<String,TypeOf<?>>` | `getSchema()` Provides access to all known extensions types.

- - ### Method Detail

    - #### add

          @Incubating
          <T> void add(Class<T> publicType,
                                String name,
                                T extension)

      Adds a new extension to this container. 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 The extension will be exposed as `publicType`.

Parameters:
  `publicType` - The extension public type
  `name` - The name for the extension
  `extension` - Any object implementing `publicType`
Throws:
  `IllegalArgumentException` - When an extension with the given name already exists.
Since:
  3.5

- #### add

      @Incubating
      <T> void add(TypeOf<T> publicType,
                            String name,
                            T extension)

  Adds a new extension to this container. 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 The extension will be exposed as `publicType`.

Parameters:
  `publicType` - The extension public type
  `name` - The name for the extension
  `extension` - Any object implementing `publicType`
Throws:
  `IllegalArgumentException` - When an extension with the given name already exists.
Since:
  3.5

- #### add

      void add(String name,
             Object extension)

  Adds a new extension to this container. 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 The extension will be exposed as `extension.getClass()` unless the extension itself declares a preferred public type via the `HasPublicType` protocol.
  Parameters:
    `name` - The name for the extension
    `extension` - Any object
  Throws:
    `IllegalArgumentException` - When an extension with the given name already exists

- #### create

      @Incubating
      <T> T create(Class<T> publicType,
                            String name,
                            Class<? extends T> instanceType,
                            Object... constructionArguments)

  Creates and adds a new extension to this container. A new instance of the given `instanceType` will be created using the given `constructionArguments`. The extension will be exposed as `publicType`. The new instance will have been dynamically made `ExtensionAware`, which means that you can cast it to `ExtensionAware`.
  Type Parameters:
    `T` - the extension public type
  Parameters:
    `publicType` - The extension public type
    `name` - The name for the extension
    `instanceType` - The extension instance type
    `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.
  Since:
    3.5
  See Also:
    `add(Class, String, Object)`

- #### create

      @Incubating
      <T> T create(TypeOf<T> publicType,
                            String name,
                            Class<? extends T> instanceType,
                            Object... constructionArguments)

  Creates and adds a new extension to this container. A new instance of the given `instanceType` will be created using the given `constructionArguments`. The extension will be exposed as `publicType`. The new instance will have been dynamically made `ExtensionAware`, which means that you can cast it to `ExtensionAware`.
  Type Parameters:
    `T` - the extension public type
  Parameters:
    `publicType` - The extension public type
    `name` - The name for the extension
    `instanceType` - The extension instance type
    `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.
  Since:
    3.5
  See Also:
    `add(Class, String, Object)`

- #### create

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

  Creates and adds a new extension to this container. A new instance of the given `type` will be created using the given `constructionArguments`. The extension will be exposed as `type` unless the extension itself declares a preferred public type via the `HasPublicType` protocol. The new instance will have been dynamically made `ExtensionAware`, which means that you can cast it 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)`

- #### getSchema

      @Incubating
      Map<String,TypeOf<?>> getSchema()

  Provides access to all known extensions types.
  Returns:
    A map of extensions public types, keyed by name
  Since:
    3.5

- #### 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.

- #### getByType

      @Incubating
      <T> T getByType(TypeOf<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.
  Since:
    3.5

- #### 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

- #### findByType

      @Incubating
      <T> T findByType(TypeOf<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
  Since:
    3.5

- #### 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.

- #### configure

      @Incubating
      <T> void configure(TypeOf<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.
  Since:
    3.5

- #### 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.