# InputChanges

interface InputChanges(source)

Provides access to any input files that need to be processed by an incremental work action.

An incremental work action is one that accepts a single InputChanges parameter. The work action can then query what changed for an input parameter since the last execution to only process the changes. The following example shows a task which reverses the text in each of its input files. It demonstrates how to use InputChanges to only process the changed files.

    abstract class IncrementalReverseTask extends DefaultTask {
        @Incremental
        @InputDirectory
        abstract DirectoryProperty getInputDir()

        @OutputDirectory
        abstract DirectoryProperty getOutputDir()

        @TaskAction
        void execute(InputChanges inputChanges) {
            inputChanges.getFileChanges(inputDir).each { change ->
                if (change.fileType == FileType.DIRECTORY) return

                def targetFile = outputDir.file(change.normalizedPath).get().asFile
                if (change.changeType == ChangeType.REMOVED) {
                    targetFile.delete()
                } else {
                    targetFile.text = change.file.text.reverse()
                }
            }
        }
    }

Content copied to clipboard

In the case where Gradle is unable to determine which input files need to be reprocessed, then all of the input files will be reported as ADDED. When such a full rebuild happens, the output files of the work are removed prior to executing the work action. Cases where this occurs include:

- There is no history available from a previous execution.
- A non-file input parameter has changed since the previous execution.
- One or more output files have changed since the previous execution.

#### Since

5.4

## Functions

getFileChanges
Link copied to clipboard
abstract fun getFileChanges(parameter: FileCollection): Iterable<FileChange>
abstract fun getFileChanges(parameter: Provider<out FileSystemLocation>): Iterable<FileChange>
Changes for a parameter.
isIncremental
Link copied to clipboard
abstract fun isIncremental(): Boolean
Indicates if it was possible for Gradle to determine which input files were out of date compared to a previous execution.