/*
 * Copyright 2017 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.gradle.api.internal.tasks.execution;

import com.google.common.collect.ImmutableSortedSet;
import org.gradle.api.file.FileCollection;
import org.gradle.api.internal.tasks.TaskInputFilePropertySpec;
import org.gradle.api.internal.tasks.TaskOutputFilePropertySpec;
import org.gradle.api.internal.tasks.TaskValidationContext;
import org.gradle.internal.Factory;

import java.util.Map;

public interface TaskProperties {

    Factory<Map<String, Object>> getInputPropertyValues();

    ImmutableSortedSet<TaskInputFilePropertySpec> getInputFileProperties();

    FileCollection getInputFiles();

    boolean hasSourceFiles();

    FileCollection getSourceFiles();

    ImmutableSortedSet<TaskOutputFilePropertySpec> getOutputFileProperties();

    FileCollection getOutputFiles();

    boolean hasDeclaredOutputs();

    FileCollection getLocalStateFiles();

    FileCollection getDestroyableFiles();

    void validate(TaskValidationContext validationContext);
}

@@ -739,27 +739,106 @@
 api.
-file.FileCollection
+NonNullApi;%0Aimport org.gradle.api.file.FileCollection;%0Aimport org.gradle.api.internal.TaskInternal
 ;%0Aim
@@ -1046,564 +1046,2125 @@
 dle.
-internal.Factory;%0A%0Aimport java.util.Map;%0A%0Apublic interface TaskProperties %7B%0A%0A    Factory%3CMap%3CString, Object%3E%3E getInputPropertyValues();%0A%0A    ImmutableSortedSet%3CTaskInputFilePropertySpec%3E getInputFileProperties();%0A%0A    FileCollection getInputFiles();%0A%0A    boolean hasSourceFiles();%0A%0A    FileCollection getSourceFiles();%0A%0A    ImmutableSortedSet%3CTaskOutputFilePropertySpec%3E getOutputFileProperties();%0A%0A    FileCollection getOutputFiles();%0A%0A    boolean hasDeclaredOutputs();%0A%0A    FileCollection getLocalStateFiles();%0A%0A    FileCollection getDestroyableFiles();%0A
+api.internal.tasks.properties.PropertyWalker;%0Aimport org.gradle.internal.Factory;%0Aimport org.gradle.internal.file.PathToFileResolver;%0A%0Aimport java.util.Map;%0A%0A/**%0A * A view of the properties of a task.%0A *%0A * This includes inputs, outputs, destroyables and local state properties.%0A *%0A * Once created, the view is immutable and registering additional or changing existing task properties will not be detected.%0A *%0A * Created by %7B@link DefaultTaskProperties#resolve(PropertyWalker, PathToFileResolver, TaskInternal)%7D.%0A */%0A@NonNullApi%0Apublic interface TaskProperties %7B%0A%0A    /**%0A     * A factory for the input properties.%0A     *%0A     * Calling %60create%60 on the factory results in evaluating the input properties and gathering them into a Map.%0A     */%0A    Factory%3CMap%3CString, Object%3E%3E getInputPropertyValues();%0A%0A    /**%0A     * Input file properties.%0A     *%0A     * It is guaranteed that all the %7B@link TaskInputFilePropertySpec%7Ds have a name and that the names are unique.%0A     */%0A    ImmutableSortedSet%3CTaskInputFilePropertySpec%3E getInputFileProperties();%0A%0A    /**%0A     * The input files.%0A     */%0A    FileCollection getInputFiles();%0A%0A    /**%0A     * Whether there are source files.%0A     *%0A     * Source files are %7B@link TaskInputFilePropertySpec%7Ds where %7B@link TaskInputFilePropertySpec#isSkipWhenEmpty()%7D returns true.%0A     */%0A    boolean hasSourceFiles();%0A%0A    /**%0A     * The source files.%0A     */%0A    FileCollection getSourceFiles();%0A%0A    /**%0A     * Output file properties.%0A     *%0A     * It is guaranteed that all the %7B@link TaskOutputFilePropertySpec%7Ds have a name and that the names are unique.%0A     */%0A    ImmutableSortedSet%3CTaskOutputFilePropertySpec%3E getOutputFileProperties();%0A%0A    /**%0A     * The output files.%0A     */%0A    FileCollection getOutputFiles();%0A%0A    /**%0A     * Whether output properties have been declared.%0A     */%0A    boolean hasDeclaredOutputs();%0A%0A    /**%0A     * The files that represent the local state.%0A     */%0A    FileCollection getLocalStateFiles();%0A%0A    /**%0A     * The files that are destroyed.%0A     */%0A    FileCollection getDestroyableFiles();%0A%0A    /**%0A     * Validations for the properties.%0A     */
 %0A   

Add Javadoc for `TaskProperties`