org.gradle.tooling

## Interface BuildController

-     @Incubating
      public interface BuildController

  Provides a `BuildAction` various ways to control a Gradle build and access information about the build.
  Since:
    1.8

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `<T> T` | `findModel(Class<T> modelType)` Fetches a snapshot of the model of the given type, if available.
    `<T,P> T` | `findModel(Class<T> modelType, Class<P> parameterType, Action<? super P> parameterInitializer)` Fetches a snapshot of the model of the given type using the given parameter, if available.
    `<T> T` | `findModel(Model target, Class<T> modelType)` Fetches a snapshot of the model of the given type, if available.
    `<T,P> T` | `findModel(Model target, Class<T> modelType, Class<P> parameterType, Action<? super P> parameterInitializer)` Fetches a snapshot of the model of the given type for the given element using the given parameter, if available.
    `GradleBuild` | `getBuildModel()` Returns an overview of the Gradle build, including some basic details of the projects that make up the build.
    `<T> T` | `getModel(Class<T> modelType)` Fetches a snapshot of the model of the given type for the default project.
    `<T,P> T` | `getModel(Class<T> modelType, Class<P> parameterType, Action<? super P> parameterInitializer)` Fetches a snapshot of the model of the given type using the given parameter.
    `<T> T` | `getModel(Model target, Class<T> modelType)` Fetches a snapshot of the model of the given type for the given element, usually a Gradle project.
    `<T,P> T` | `getModel(Model target, Class<T> modelType, Class<P> parameterType, Action<? super P> parameterInitializer)` Fetches a snapshot of the model of the given type for the given element using the given parameter.

- - ### Method Detail

    - #### getModel

          <T> T getModel(Class<T> modelType)
                  throws UnknownModelException

      Fetches a snapshot of the model of the given type for the default project. The default project is generally the project referenced when a `ProjectConnection` is created.

      Any of following models types may be available, depending on the version of Gradle being used by the target build:

      - `GradleBuild`
      - `BuildEnvironment`
      - `GradleProject`
      - `BuildInvocations`
      - `ProjectPublications`
      - `IdeaProject`
      - `BasicIdeaProject`
      - `EclipseProject`
      - `HierarchicalEclipseProject`

      A build may also expose additional custom tooling models. You can use this method to query these models.

      Type Parameters:
        `T` - The model type.
      Parameters:
        `modelType` - The model type.
      Returns:
        The model.
      Throws:
        `UnknownModelException` - When the default project does not support the requested model.
      Since:
        1.8

    - #### findModel

          @Nullable
          <T> T findModel(Class<T> modelType)

      Fetches a snapshot of the model of the given type, if available.

      See `getModel(Class)` for more details.

      Type Parameters:
        `T` - The model type.
      Parameters:
        `modelType` - The model type.
      Returns:
        The model, or null if not present.

    - #### getBuildModel

          GradleBuild getBuildModel()

      Returns an overview of the Gradle build, including some basic details of the projects that make up the build. This is equivalent to calling `#getModel(GradleBuild.class)`.
      Returns:
        The model.

    - #### getModel

          <T> T getModel(Model target,
                         Class<T> modelType)
                  throws UnknownModelException

      Fetches a snapshot of the model of the given type for the given element, usually a Gradle project.

      The following elements are supported:

      - Any `BasicGradleProject`
      - Any `GradleProject`
      - Any `EclipseProject`
      - Any `IdeaModule`

      See `getModel(Class)` for more details.

      Type Parameters:
        `T` - The model type.
      Parameters:
        `target` - The target element, usually a project.
        `modelType` - The model type.
      Returns:
        The model.
      Throws:
        `UnknownModelException` - When the target project does not support the requested model.

    - #### findModel

          @Nullable
          <T> T findModel(Model target,
                                    Class<T> modelType)

      Fetches a snapshot of the model of the given type, if available.

      See `getModel(Model, Class)` for more details.

      Type Parameters:
        `T` - The model type.
      Parameters:
        `modelType` - The model type.
      Returns:
        The model, or null if not present.

    - #### getModel

          <T,P> T getModel(Class<T> modelType,
                           Class<P> parameterType,
                           Action<? super P> parameterInitializer)
                    throws UnsupportedVersionException,
                           UnknownModelException

      Fetches a snapshot of the model of the given type using the given parameter.

      See `getModel(Model, Class, Class, Action)` for more details.

      Type Parameters:
        `T` - The model type.
        `P` - The parameter type.
      Parameters:
        `modelType` - The model type.
        `parameterType` - The parameter type.
        `parameterInitializer` - Action to configure the parameter
      Returns:
        The model.
      Throws:
        `UnknownModelException` - When the target project does not support the requested model.
        `UnsupportedVersionException` - When the target project does not support the requested model or Gradle version does not support parametrized models.
      Since:
        4.4

    - #### findModel

          @Nullable
          <T,P> T findModel(Class<T> modelType,
                                      Class<P> parameterType,
                                      Action<? super P> parameterInitializer)

      Fetches a snapshot of the model of the given type using the given parameter, if available.

      See `getModel(Model, Class, Class, Action)` for more details.

      Type Parameters:
        `T` - The model type.
        `P` - The parameter type.
      Parameters:
        `modelType` - The model type.
        `parameterType` - The parameter type.
        `parameterInitializer` - Action to configure the parameter
      Returns:
        The model.
      Since:
        4.4

    - #### getModel

          <T,P> T getModel(Model target,
                           Class<T> modelType,
                           Class<P> parameterType,
                           Action<? super P> parameterInitializer)
                    throws UnsupportedVersionException,
                           UnknownModelException

      Fetches a snapshot of the model of the given type for the given element using the given parameter.

      The parameter type must be an interface only with getters and setters and no nesting is supported. The Tooling API will create a proxy instance of this interface and use the initializer to run against that instance to configure it and then pass to the model builder.

      See `getModel(Class)` for more details.

      Type Parameters:
        `T` - The model type.
        `P` - The parameter type.
      Parameters:
        `target` - The target element, usually a project.
        `modelType` - The model type.
        `parameterType` - The parameter type.
        `parameterInitializer` - Action to configure the parameter
      Returns:
        The model.
      Throws:
        `UnknownModelException` - When the target project does not support the requested model.
        `UnsupportedVersionException` - When the target project does not support the requested model or Gradle version does not support parametrized models.
      Since:
        4.4

    - #### findModel

          @Nullable
          <T,P> T findModel(Model target,
                                      Class<T> modelType,
                                      Class<P> parameterType,
                                      Action<? super P> parameterInitializer)

      Fetches a snapshot of the model of the given type for the given element using the given parameter, if available.

      See `getModel(Model, Class, Class, Action)` for more details.

      Type Parameters:
        `T` - The model type.
        `P` - The parameter type.
      Parameters:
        `target` - The target element, usually a project.
        `modelType` - The model type.
        `parameterType` - The parameter type.
        `parameterInitializer` - Action to configure the parameter
      Returns:
        The model.
      Since:
        4.4