Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Copyright 2010 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;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.google.common.collect.Sets;
import groovy.lang.Closure;
import groovy.lang.MissingPropertyException;
import groovy.util.ObservableList;
import org.codehaus.groovy.runtime.InvokerInvocationException;
import org.gradle.api.Action;
import org.gradle.api.AntBuilder;
import org.gradle.api.InvalidUserDataException;
import org.gradle.api.Nullable;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.internal.file.TemporaryFileProvider;
import org.gradle.api.internal.project.ProjectInternal;
import org.gradle.api.internal.tasks.ClassLoaderAwareTaskAction;
import org.gradle.api.internal.tasks.ContextAwareTaskAction;
import org.gradle.api.internal.tasks.DefaultTaskDependency;
import org.gradle.api.internal.tasks.DefaultTaskInputs;
import org.gradle.api.internal.tasks.DefaultTaskOutputs;
import org.gradle.api.internal.tasks.TaskContainerInternal;
import org.gradle.api.internal.tasks.TaskDependencyInternal;
import org.gradle.api.internal.tasks.TaskExecuter;
import org.gradle.api.internal.tasks.TaskExecutionContext;
import org.gradle.api.internal.tasks.TaskMutator;
import org.gradle.api.internal.tasks.TaskStateInternal;
import org.gradle.api.internal.tasks.execution.DefaultTaskExecutionContext;
import org.gradle.api.internal.tasks.execution.TaskValidator;
import org.gradle.api.logging.Logger;
import org.gradle.api.logging.Logging;
import org.gradle.api.plugins.Convention;
import org.gradle.api.plugins.ExtensionContainer;
import org.gradle.api.specs.AndSpec;
import org.gradle.api.specs.Spec;
import org.gradle.api.tasks.TaskDependency;
import org.gradle.api.tasks.TaskInstantiationException;
import org.gradle.internal.Factory;
import org.gradle.internal.logging.compatbridge.LoggingManagerInternalCompatibilityBridge;
import org.gradle.internal.metaobject.DynamicObject;
import org.gradle.internal.reflect.Instantiator;
import org.gradle.internal.service.ServiceRegistry;
import org.gradle.logging.LoggingManagerInternal;
import org.gradle.logging.StandardOutputCapture;
import org.gradle.util.ConfigureUtil;
import org.gradle.util.GFileUtils;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import static org.gradle.util.GUtil.uncheckedCall;
public abstract class AbstractTask implements TaskInternal, DynamicObjectAware {
private static final Logger BUILD_LOGGER = Logging.getLogger(Task.class);
private static final ThreadLocal NEXT_INSTANCE = new ThreadLocal();
// TODO Make this final once setProject() is removed
private ProjectInternal project;
// TODO Make this final once setName() is removed
private String name;
private final List actions = new ArrayList();
private final String path;
private boolean enabled = true;
private final DefaultTaskDependency dependencies;
private final DefaultTaskDependency mustRunAfter;
private final DefaultTaskDependency finalizedBy;
private final DefaultTaskDependency shouldRunAfter;
private ExtensibleDynamicObject extensibleDynamicObject;
private String description;
private String group;
private AndSpec onlyIfSpec = createNewOnlyIfSpec();
private TaskExecuter executer;
private final ServiceRegistry services;
private final TaskStateInternal state;
private List validators = new ArrayList();
private final TaskMutator taskMutator;
private ObservableList observableActionList;
private boolean impliesSubProjects;
private boolean hasCustomActions;
// toString() of AbstractTask is called a lot, so precompute.
private final String toStringValue;
private final TaskInputsInternal taskInputs;
private final TaskOutputsInternal taskOutputs;
private final Class extends Task> publicType;
private LoggingManagerInternal loggingManager;
protected AbstractTask() {
this(taskInfo());
}
private static TaskInfo taskInfo() {
return NEXT_INSTANCE.get();
}
private AbstractTask(TaskInfo taskInfo) {
if (taskInfo == null) {
throw new TaskInstantiationException(String.format("Task of type '%s' has been instantiated directly which is not supported. Tasks can only be created using the DSL.", getClass().getName()));
}
this.project = taskInfo.project;
this.name = taskInfo.name;
this.publicType = taskInfo.publicType;
assert project != null;
assert name != null;
path = project.absoluteProjectPath(name);
toStringValue = "task '" + path + "'";
state = new TaskStateInternal(toString());
TaskContainerInternal tasks = project.getTasks();
dependencies = new DefaultTaskDependency(tasks);
mustRunAfter = new DefaultTaskDependency(tasks);
finalizedBy = new DefaultTaskDependency(tasks);
shouldRunAfter = new DefaultTaskDependency(tasks);
services = project.getServices();
taskMutator = new TaskMutator(this);
observableActionList = new ObservableActionWrapperList(actions);
observableActionList.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
taskMutator.assertMutable("Task.getActions()", evt);
}
});
taskInputs = new DefaultTaskInputs(project.getFileResolver(), getName(), taskMutator);
taskOutputs = new DefaultTaskOutputs(project.getFileResolver(), this, taskMutator);
}
private void assertDynamicObject() {
if (extensibleDynamicObject == null) {
extensibleDynamicObject = new ExtensibleDynamicObject(this, publicType, services.get(Instantiator.class));
}
}
public static T injectIntoNewInstance(ProjectInternal project, String name, Class extends Task> publicType, Callable factory) {
NEXT_INSTANCE.set(new TaskInfo(project, name, publicType));
try {
return uncheckedCall(factory);
} finally {
NEXT_INSTANCE.set(null);
}
}
public TaskStateInternal getState() {
return state;
}
public AntBuilder getAnt() {
return project.getAnt();
}
public Project getProject() {
return project;
}
public String getName() {
return name;
}
public List> getActions() {
return observableActionList;
}
public List getTaskActions() {
return observableActionList;
}
@Override
public Set getActionClassLoaders() {
Set actionLoaders = Sets.newLinkedHashSet();
for (ContextAwareTaskAction action : actions) {
actionLoaders.add(action.getClassLoader());
}
return actionLoaders;
}
public void setActions(final List> replacements) {
taskMutator.mutate("Task.setActions(List)", new Runnable() {
public void run() {
actions.clear();
for (Action super Task> action : replacements) {
doLast(action);
}
}
});
}
public TaskDependencyInternal getTaskDependencies() {
return dependencies;
}
public Set