# TaskBasedOperation

# TaskBasedOperation

<br />

```
interface TaskBasedOperation<TaskT : Task?>
```

<br />

*** ** * ** ***

Interface with methods to wire input and output method references to[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)-based operations.

A[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)-based operation will create, transform, or append files or directories to public[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)to customize or participate in the build flow.

Each operation should indicate through the methods of this interface which method can be used to set or retrieve the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)inputs and outputs.

## Summary

|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ### Public functions                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ||
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [OutOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/OutOperationRequest)`<FileTypeT>`                         | `<FileTypeT : `[FileSystemLocation](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocation.html)`?> `[wiredWith](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1))`(` ` taskOutput: ((TaskT) `->` `[FileSystemLocationProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocationProperty.html)`<FileTypeT>)?` `)` Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)output method reference so the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)result can be retrieved after successful task execution.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| [CombiningOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/CombiningOperationRequest)`<FileTypeT>`             | `<FileTypeT : `[FileSystemLocation](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocation.html)`?> `[wiredWith](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1,kotlin.Function1))`(` ` taskInput: ((TaskT) `->` `[ListProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/ListProperty.html)`<FileTypeT>)?,` ` taskOutput: ((TaskT) `->` `[FileSystemLocationProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocationProperty.html)`<FileTypeT>)?` `)` Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)input and output methods references so the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)can retrieve the current versions of a[Artifact.Multiple](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1,kotlin.Function1))while producing a new version of the same artifact type accessible through the[taskOutput](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1,kotlin.Function1))method after successful execution. |
| [InAndOutDirectoryOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/InAndOutDirectoryOperationRequest)`<TaskT>` | [wiredWithDirectories](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWithDirectories(kotlin.Function1,kotlin.Function1))`(` ` taskInput: ((TaskT) `->` `[DirectoryProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/DirectoryProperty.html)`)?,` ` taskOutput: ((TaskT) `->` `[DirectoryProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/DirectoryProperty.html)`)?` `)` Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)input and output methods references so the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)can retrieve the current version of the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWithDirectories(kotlin.Function1,kotlin.Function1)).                                                                                                                                                                                                                                                                                                                                                                                                                  |
| [InAndOutFileOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/InAndOutFileOperationRequest)                    | [wiredWithFiles](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWithFiles(kotlin.Function1,kotlin.Function1))`(` ` taskInput: ((TaskT) `->` `[RegularFileProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFileProperty.html)`)?,` ` taskOutput: ((TaskT) `->` `[RegularFileProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFileProperty.html)`)?` `)` Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)input and output methods references so the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)can retrieve the current version of the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWithFiles(kotlin.Function1,kotlin.Function1)).                                                                                                                                                                                                                                                                                                                                                                                                                            |

## Public functions

### wiredWith

```
fun <FileTypeT : FileSystemLocation?> wiredWith(
    taskOutput: ((TaskT) -> FileSystemLocationProperty<FileTypeT>)?
): OutOperationRequest<FileTypeT>
```

Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)output method reference so the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)result can be retrieved after successful task execution.

This method is useful when creating a new version, when appending to existing artifacts, or when access to the current version of an artifact isn't required.  

|                                                                                                                       Parameters                                                                                                                        ||
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|
| `taskOutput: ((TaskT) `->` `[FileSystemLocationProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocationProperty.html)`<FileTypeT>)?` | The method reference to retrieve the task output after successful task execution. |

|                                                                                                                                                                                                                                            Returns                                                                                                                                                                                                                                             ||
|-----------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [OutOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/OutOperationRequest)`<FileTypeT>` | The[OutOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/OutOperationRequest)to set the desired operation type and[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)on which the operation applies. |

### wiredWith

```
fun <FileTypeT : FileSystemLocation?> wiredWith(
    taskInput: ((TaskT) -> ListProperty<FileTypeT>)?,
    taskOutput: ((TaskT) -> FileSystemLocationProperty<FileTypeT>)?
): CombiningOperationRequest<FileTypeT>
```

Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)input and output methods references so the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)can retrieve the current versions of a[Artifact.Multiple](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1,kotlin.Function1))while producing a new version of the same artifact type accessible through the[taskOutput](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1,kotlin.Function1))method after successful execution.

This method is useful when[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)is combining all elements of an[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)into a single element.  

|                                                                                                                                                                                                                                                           Parameters                                                                                                                                                                                                                                                            ||
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `taskInput: ((TaskT) `->` `[ListProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/ListProperty.html)`<FileTypeT>)?`                          | The method reference the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)will use to retrieve the current artifact versions during[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)execution (and only then). |
| `taskOutput: ((TaskT) `->` `[FileSystemLocationProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocationProperty.html)`<FileTypeT>)?` | The method reference to retrieve the task output after successful task execution.                                                                                                                                                                                                                                                                         |

|                                                                                                                                                                                                                                                                                                                  Returns                                                                                                                                                                                                                                                                                                                  ||
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [CombiningOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/CombiningOperationRequest)`<FileTypeT>` | The[CombiningOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/CombiningOperationRequest)to set the desired operation type and[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)as well as the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact). |

### wiredWithDirectories

```
fun wiredWithDirectories(
    taskInput: ((TaskT) -> DirectoryProperty)?,
    taskOutput: ((TaskT) -> DirectoryProperty)?
): InAndOutDirectoryOperationRequest<TaskT>
```

Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)input and output methods references so the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)can retrieve the current version of the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWithDirectories(kotlin.Function1,kotlin.Function1)).[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)will also produce a new version of the same artifact type accessible through the[taskOutput](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWithDirectories(kotlin.Function1,kotlin.Function1))method after successful execution.

This method is useful when[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)is transforming an[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)from its current version to a new one and the[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)'s[Artifact.kind](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/Artifact#kind())is[Artifact.DIRECTORY](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/Artifact.Companion#DIRECTORY())  

|                                                                                                                                                                                                                                            Parameters                                                                                                                                                                                                                                             ||
|-----------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `taskInput: ((TaskT) `->` `[DirectoryProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/DirectoryProperty.html)`)?`  | The method reference the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)will use to retrieve the current artifact version during[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)execution (and only then). |
| `taskOutput: ((TaskT) `->` `[DirectoryProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/DirectoryProperty.html)`)?` | The method reference to retrieve the task output after successful task execution.                                                                                                                                                                                                                                                                        |

|                                                                                                                                                                                                                                                                Returns                                                                                                                                                                                                                                                                 ||
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [InAndOutDirectoryOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/InAndOutDirectoryOperationRequest)`<TaskT>` | The[InAndOutDirectoryOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/InAndOutDirectoryOperationRequest)to set the desired operation type as well as the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact). |

### wiredWithFiles

```
fun wiredWithFiles(
    taskInput: ((TaskT) -> RegularFileProperty)?,
    taskOutput: ((TaskT) -> RegularFileProperty)?
): InAndOutFileOperationRequest
```

Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)input and output methods references so the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)can retrieve the current version of the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWithFiles(kotlin.Function1,kotlin.Function1)).[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)will also produce a new version of the same artifact type accessible through the[taskOutput](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation#wiredWithFiles(kotlin.Function1,kotlin.Function1))method after successful execution.

This method is useful when[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)is transforming an[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)from its current version to a new one and the[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)'s[Artifact.kind](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/Artifact#kind())is[Artifact.FILE](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/Artifact.Companion#FILE())  

|                                                                                                                                                                                                                                              Parameters                                                                                                                                                                                                                                               ||
|---------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `taskInput: ((TaskT) `->` `[RegularFileProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFileProperty.html)`)?`  | The method reference the[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)will use to retrieve the current artifact version during[TaskT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/TaskBasedOperation)execution (and only then). |
| `taskOutput: ((TaskT) `->` `[RegularFileProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFileProperty.html)`)?` | The method reference to retrieve the task output after successful task execution.                                                                                                                                                                                                                                                                        |

|                                                                                                                                                                                                                                                                                                        Returns                                                                                                                                                                                                                                                                                                         ||
|----------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [InAndOutFileOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/InAndOutFileOperationRequest) | The[OutOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/OutOperationRequest)to set the desired operation type and[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact)as well as the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/SingleArtifact). |