/* * Copyright 2016 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; import org.gradle.api.file.FileCollection; import org.gradle.api.internal.changedetection.state.FileCollectionSnapshotter; import org.gradle.api.internal.changedetection.state.GenericFileCollectionSnapshotter; import org.gradle.api.internal.changedetection.state.SnapshotNormalizationStrategy; import org.gradle.api.internal.changedetection.state.TaskFilePropertyCompareStrategy; import org.gradle.api.internal.changedetection.state.TaskFilePropertySnapshotNormalizationStrategy; import org.gradle.api.internal.file.FileResolver; import org.gradle.api.tasks.PathSensitivity; import org.gradle.api.tasks.TaskInputFilePropertyBuilder; import org.gradle.api.tasks.TaskInputs; import java.util.Map; import static org.gradle.api.internal.changedetection.state.TaskFilePropertySnapshotNormalizationStrategy.ABSOLUTE; public class DefaultTaskInputPropertySpec extends AbstractTaskPropertyBuilder implements TaskInputPropertySpecAndBuilder { private final TaskPropertyFileCollection files; private boolean skipWhenEmpty; private boolean optional; private SnapshotNormalizationStrategy snapshotNormalizationStrategy = ABSOLUTE; private Class<? extends FileCollectionSnapshotter> snapshotter = GenericFileCollectionSnapshotter.class; public DefaultTaskInputPropertySpec(String taskName, FileResolver resolver, Object paths) { this.files = new TaskPropertyFileCollection(taskName, "input", this, resolver, paths); } @Override public FileCollection getPropertyFiles() { return files; } @Override public TaskInputFilePropertyBuilderInternal withPropertyName(String propertyName) { setPropertyName(propertyName); return this; } public boolean isSkipWhenEmpty() { return skipWhenEmpty; } @Override public TaskInputFilePropertyBuilderInternal skipWhenEmpty(boolean skipWhenEmpty) { this.skipWhenEmpty = skipWhenEmpty; return this; } @Override public TaskInputFilePropertyBuilderInternal skipWhenEmpty() { return skipWhenEmpty(true); } public boolean isOptional() { return optional; } @Override public TaskInputFilePropertyBuilderInternal optional(boolean optional) { this.optional = optional; return this; } @Override public TaskInputFilePropertyBuilderInternal optional() { return optional(true); } @Override public TaskFilePropertyCompareStrategy getCompareStrategy() { return TaskFilePropertyCompareStrategy.UNORDERED; } @Override public SnapshotNormalizationStrategy getSnapshotNormalizationStrategy() { return snapshotNormalizationStrategy; } @Override public TaskInputFilePropertyBuilderInternal withPathSensitivity(PathSensitivity sensitivity) { return withSnapshotNormalizationStrategy(TaskFilePropertySnapshotNormalizationStrategy.valueOf(sensitivity)); } @Override public TaskInputFilePropertyBuilderInternal withSnapshotNormalizationStrategy(SnapshotNormalizationStrategy snapshotNormalizationStrategy) { this.snapshotNormalizationStrategy = snapshotNormalizationStrategy; return this; } @Override public TaskInputFilePropertyBuilderInternal withSnapshotter(Class<? extends FileCollectionSnapshotter> snapshotter) { this.snapshotter = snapshotter; return this; } @Override public Class<? extends FileCollectionSnapshotter> getSnapshotter() { return snapshotter; } @Override public String toString() { return getPropertyName() + " (" + snapshotNormalizationStrategy + ")"; } // --- See CompatibilityAdapterForTaskInputs for an explanation for why these methods are here private UnsupportedOperationException failWithUnsupportedMethod(String method) { throw new UnsupportedOperationException(String.format("Chaining of the TaskInputs.%s method is not supported since Gradle 4.0.", method)); } @Override public boolean getHasInputs() { throw failWithUnsupportedMethod("getHasInputs()"); } @Override public FileCollection getFiles() { throw failWithUnsupportedMethod("getFiles()"); } @Override public TaskInputFilePropertyBuilder files(Object... paths) { throw failWithUnsupportedMethod("files(Object...)"); } @Override public TaskInputFilePropertyBuilder file(Object path) { throw failWithUnsupportedMethod("file(Object)"); } @Override public TaskInputFilePropertyBuilder dir(Object dirPath) { throw failWithUnsupportedMethod("dir(Object)"); } @Override public Map<String, Object> getProperties() { throw failWithUnsupportedMethod("getProperties()"); } @Override public TaskInputs property(String name, Object value) { throw failWithUnsupportedMethod("property(String, Object)"); } @Override public TaskInputs properties(Map<String, ?> properties) { throw failWithUnsupportedMethod("properties(Map)"); } @Override public boolean getHasSourceFiles() { throw failWithUnsupportedMethod("getHasSourceFiles()"); } @Override public FileCollection getSourceFiles() { throw failWithUnsupportedMethod("getSourceFiles()"); } @Override public int compareTo(TaskPropertySpec o) { return getPropertyName().compareTo(o.getPropertyName()); } }