# TaskBasedOperation

# TaskBasedOperation


```
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.3/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.3/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.3/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.3/com/android/build/api/artifact/TaskBasedOperation) output method reference so the [TaskT](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/TaskBasedOperation) result can be retrieved after successful task execution.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| [CombiningOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/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.3/com/android/build/api/artifact/SingleArtifact) when invoking [taskInput](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/com/android/build/api/artifact/InAndOutDirectoryOperationRequest)`<TaskT>` | [wiredWithDirectories](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/com/android/build/api/artifact/SingleArtifact) when invoking [taskInput](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/TaskBasedOperation#wiredWithDirectories(kotlin.Function1,kotlin.Function1)).                                                                                                                                                                                                                                                                                                                                                                                                                      |
| [InAndOutFileOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/InAndOutFileOperationRequest)                    | [wiredWithFiles](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/com/android/build/api/artifact/SingleArtifact) when invoking [taskInput](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/com/android/build/api/artifact/TaskBasedOperation) output method reference so the [TaskT](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/com/android/build/api/artifact/OutOperationRequest)`<FileTypeT>` | The [OutOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/OutOperationRequest) to set the desired operation type and [SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/com/android/build/api/artifact/SingleArtifact) when invoking [taskInput](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/com/android/build/api/artifact/TaskBasedOperation) is combining all elements of an [SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/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.3/com/android/build/api/artifact/CombiningOperationRequest)`<FileTypeT>` | The [CombiningOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/CombiningOperationRequest) to set the desired operation type and [SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/SingleArtifact) as well as the target [SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/com/android/build/api/artifact/SingleArtifact) when invoking [taskInput](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/TaskBasedOperation#wiredWithDirectories(kotlin.Function1,kotlin.Function1)). [TaskT](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/com/android/build/api/artifact/TaskBasedOperation) is transforming an [SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/com/android/build/api/artifact/SingleArtifact)'s [Artifact.kind](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/Artifact#kind()) is [Artifact.DIRECTORY](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/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.3/com/android/build/api/artifact/InAndOutDirectoryOperationRequest)`<TaskT>` | The [InAndOutDirectoryOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/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.3/com/android/build/api/artifact/SingleArtifact) when invoking [taskInput](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/TaskBasedOperation#wiredWithFiles(kotlin.Function1,kotlin.Function1)). [TaskT](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/com/android/build/api/artifact/TaskBasedOperation) is transforming an [SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/com/android/build/api/artifact/SingleArtifact)'s [Artifact.kind](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/Artifact#kind()) is [Artifact.FILE](https://developer.android.com/reference/tools/gradle-api/7.3/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.3/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.3/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.3/com/android/build/api/artifact/InAndOutFileOperationRequest) | The [OutOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/OutOperationRequest) to set the desired operation type and [SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/SingleArtifact) as well as the target [SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/artifact/SingleArtifact). |