Merged some `PropertyState` implementations and moved some `Provider` implementations into a `Providers` class.
17 Aug 17 ac52c20a8e6f4f735a6b9f1f806341de368f270e
Added APIs that allow a specific task output directory or output file to be wired in as an input for another task, in a way that allows the task dependencies to be inferred and that deals with later changes to the configured locations of those outputs. This is intended to be a more robust, performant and descriptive alternative to using `File` property types and calls to `Task.dependsOn`
Specifically, added factory methods on `DefaultTask` to allow a task implementation class to create `DirectoryVar` instances that represent an output directory, and `RegularFileVar` instances that represent an output file or directory. When used as an output directory or file property, these instances carry dependency information about the producing task. When used as an input file property, the producing task is tracked as a dependency of the consuming task.
Similar support for input files is done using `ConfigurableFileCollection` and friends, as has been possible for quite a while. There is intentionally no concept of an input directory in these changes. However, it is possible to view a `Directory` or `DirectoryVar` as a `FileTree` which can be wired in as a task input.
14 Jun 17 a86da0b9fa4f79c25eab3d7e19680123e82477cf