Interface ExtensionContainer

All Known Subinterfaces:
Convention

public interface ExtensionContainer
Allows adding 'namespaced' DSL extensions to a target object.
  • Method Summary

    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.
    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).
    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).
    The extra properties extension in this extension container.
    Provides access to all known extensions types.
  • Method Details

    • 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:
    • 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:
    • 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:
    • 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

      @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

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

      @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
    • configure

      @Incubating <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.