Package org.gradle.api.plugins

## Interface ExtensionContainer

- All Known Subinterfaces:
    `Convention`

      public interface ExtensionContainer

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

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | 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​(String name, Action<? super T> action)` | Looks for the extension with the specified name 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).
    `ExtensionsSchema` | `getExtensionsSchema()` | Provides access to the schema of all known extensions.
    `ExtraPropertiesExtension` | `getExtraProperties()` | The extra properties extension in this extension container.

- - ### Method Detail

    - #### add

          <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

          <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

          <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

          <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)`

    - #### getExtensionsSchema

          ExtensionsSchema getExtensionsSchema()

      Provides access to the schema of all known extensions.
      Since:
        4.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

          <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

          @Nullable
          <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

          @Nullable
          <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

          @Nullable
          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

          <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

          <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

    - #### configure

          <T> void configure​(String name,
                             Action<? super T> action)

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

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