8000 Remove usage of task creation for core Gradle types by ljacomet · Pull Request #33268 · gradle/gradle · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Remove usage of task creation for core Gradle types #33268

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package org.gradle.ide.xcode.internal;

import org.gradle.api.Task;
import org.gradle.api.tasks.TaskProvider;
import org.gradle.internal.Describables;
import org.gradle.internal.DisplayName;
import org.gradle.plugins.ide.internal.IdeProjectMetadata;
Expand All @@ -27,21 +28,21 @@

public class XcodeProjectMetadata implements IdeProjectMetadata {
private final DefaultXcodeProject xcodeProject;
private final Task projectTask;
private final TaskProvider<?> projectTask;

public XcodeProjectMetadata(DefaultXcodeProject xcodeProject, Task projectTask) {
public XcodeProjectMetadata(DefaultXcodeProject xcodeProject, TaskProvider<?> projectTask) {
this.xcodeProject = xcodeProject;
this.projectTask = projectTask;
}

@Override
public DisplayName getDisplayName() {
return Describables.withTypeAndName("Xcode project", projectTask.getProject().getName());
return Describables.withTypeAndName("Xcode project", projectTask.get().getProject().getName());
}

@Override
public Set<? extends Task> getGeneratorTasks() {
return Collections.singleton(projectTask);
return Collections.singleton(projectTask.get());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ protected void onApply(final Project project) {
if (isRoot()) {
DefaultXcodeRootExtension xcode = (DefaultXcodeRootExtension) project.getExtensions().create(XcodeRootExtension.class, "xcode", DefaultXcodeRootExtension.class, objectFactory);
xcodeProject = xcode.getProject();
final GenerateXcodeWorkspaceFileTask workspaceTask = createWorkspaceTask(project, xcode.getWorkspace());
final TaskProvider<GenerateXcodeWorkspaceFileTask> workspaceTask = createWorkspaceTask(project, xcode.getWorkspace());
lifecycleTask.configure(dependsOn(workspaceTask));
addWorkspace(xcode.getWorkspace());
} else {
Expand All @@ -117,7 +117,7 @@ protected void onApply(final Project project) {

xcodeProject.setLocationDir(project.file(project.getName() + ".xcodeproj"));

GenerateXcodeProjectFileTask projectTask = createProjectTask((ProjectInternal) project);
TaskProvider<GenerateXcodeProjectFileTask> projectTask = createProjectTask((ProjectInternal) project);
lifecycleTask.configure(dependsOn(projectTask));

project.getTasks().addRule("Xcode bridge tasks begin with _xcode. Do not call these directly.", new XcodeBridge(xcodeProject, project));
Expand All @@ -137,48 +137,48 @@ private void includeBuildFilesInProject(Project project) {
}

private void configureXcodeCleanTask(Project project) {
@SuppressWarnings("deprecation")
Delete cleanTask = project.getTasks().create("cleanXcodeProject", Delete.class);
cleanTask.delete(xcodeProject.getLocationDir());
if (isRoot()) {
cleanTask.delete(project.file(project.getName() + ".xcworkspace"));
}
getCleanTask().configure(Actions.composite(withDescription("Cleans XCode project files (xcodeproj)"), dependsOn(cleanTask)));
TaskProvider<Delete> xCodeCleanTask = project.getTasks().register("cleanXcodeProject", Delete.class, task -> {
task.delete(xcodeProject.getLocationDir());
if (isRoot()) {
task.delete(project.file(project.getName() + ".xcworkspace"));
}
});

getCleanTask().configure(Actions.composite(withDescription("Cleans XCode project files (xcodeproj)"), dependsOn(xCodeCleanTask)));
}

private GenerateXcodeProjectFileTask createProjectTask(final ProjectInternal project) {
private TaskProvider<GenerateXcodeProjectFileTask> createProjectTask(final ProjectInternal project) {
File xcodeProjectPackageDir = xcodeProject.getLocationDir();

@SuppressWarnings("deprecation")
GenerateWorkspaceSettingsFileTask workspaceSettingsFileTask = project.getTasks().create("xcodeProjectWorkspaceSettings", GenerateWorkspaceSettingsFileTask.class);
workspaceSettingsFileTask.setOutputFile(new File(xcodeProjectPackageDir, "project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings"));
TaskProvider<GenerateWorkspaceSettingsFileTask> workspaceSettingsFileTask = project.getTasks().register("xcodeProjectWorkspaceSettings", GenerateWorkspaceSettingsFileTask.class,
task -> task.setOutputFile(new File(xcodeProjectPackageDir, "project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings")));

TaskProvider<GenerateXcodeProjectFileTask> projectFileTask = project.getTasks().register("xcodeProject", GenerateXcodeProjectFileTask.class, task -> {
task.dependsOn(workspaceSettingsFileTask);
task.dependsOn(xcodeProject.getTaskDependencies());
task.dependsOn(project.getTasks().withType(GenerateSchemeFileTask.class));
task.setXcodeProject(xcodeProject);
task.setOutputFile(new File(xcodeProjectPackageDir, "project.pbxproj"));
});

@SuppressWarnings("deprecation")
GenerateXcodeProjectFileTask projectFileTask = project.getTasks().create("xcodeProject", GenerateXcodeProjectFileTask.class);
projectFileTask.dependsOn(workspaceSettingsFileTask);
projectFileTask.dependsOn(xcodeProject.getTaskDependencies());
projectFileTask.dependsOn(project.getTasks().withType(GenerateSchemeFileTask.class));
projectFileTask.setXcodeProject(xcodeProject);
projectFileTask.setOutputFile(new File(xcodeProjectPackageDir, "project.pbxproj"));

artifactRegistry.registerIdeProject(new XcodeProjectMetadata(xcodeProject, projectFileTask));

return projectFileTask;
}

private GenerateXcodeWorkspaceFileTask createWorkspaceTask(Project project, DefaultXcodeWorkspace workspace) {
private TaskProvider<GenerateXcodeWorkspaceFileTask> createWorkspaceTask(Project project, DefaultXcodeWorkspace workspace) {
File xcodeWorkspacePackageDir = project.file(project.getName() + ".xcworkspace");
workspace.getLocation().set(xcodeWorkspacePackageDir);

@SuppressWarnings("deprecation")
GenerateWorkspaceSettingsFileTask workspaceSettingsFileTask = project.getTasks().create("xcodeWorkspaceWorkspaceSettings", GenerateWorkspaceSettingsFileTask.class);
workspaceSettingsFileTask.setOutputFile(new File(xcodeWorkspacePackageDir, "xcshareddata/WorkspaceSettings.xcsettings"));
TaskProvider<GenerateWorkspaceSettingsFileTask> workspaceSettingsFileTask = project.getTasks().register("xcodeWorkspaceWorkspaceSettings", GenerateWorkspaceSettingsFileTask.class,
task -> task.setOutputFile(new File(xcodeWorkspacePackageDir, "xcshareddata/WorkspaceSettings.xcsettings")));

@SuppressWarnings("deprecation")
GenerateXcodeWorkspaceFileTask workspaceFileTask = project.getTasks().create("xcodeWorkspace", GenerateXcodeWorkspaceFileTask.class);
workspaceFileTask.dependsOn(workspaceSettingsFileTask);
workspaceFileTask.setOutputFile(new File(xcodeWorkspacePackageDir, "contents.xcworkspacedata"));
workspaceFileTask.setXcodeProjectLocations(artifactRegistry.getIdeProjectFiles(XcodeProjectMetadata.class));
TaskProvider<GenerateXcodeWorkspaceFileTask> workspaceFileTask = project.getTasks().register("xcodeWorkspace", GenerateXcodeWorkspaceFileTask.class, task -> {
task.dependsOn(workspaceSettingsFileTask);
task.setOutputFile(new File(xcodeWorkspacePackageDir, "contents.xcworkspacedata"));
task.setXcodeProjectLocations(artifactRegistry.getIdeProjectFiles(XcodeProjectMetadata.class));
});

return workspaceFileTask;
}
Expand Down Expand Up @@ -398,11 +398,10 @@ private static class XcodeBridge implements Action<String> {
@Override
public void execute(String taskName) {
if (taskName.startsWith("_xcode")) {
@SuppressWarnings("deprecation")
Task bridgeTask = project.getTasks().create(taskName);
TaskProvider<Task> bridgeTask = project.getTasks().register(taskName);
String action = xcodePropertyAdapter.getAction();
if (action.equals("clean")) {
bridgeTask.dependsOn("clean");
bridgeTask.configure(task -> task.dependsOn("clean"));
} else if ("".equals(action) || "build".equals(action)) {
final XcodeTarget target = findXcodeTarget();
if (target.isUnitTest()) {
Expand All @@ -426,25 +425,24 @@ private XcodeTarget findXcodeTarget() {
return target;
}

private void bridgeProductBuild(Task bridgeTask, XcodeTarget target) {
private void bridgeProductBuild(TaskProvider<Task> bridgeTask, XcodeTarget target) {
// Library or executable
final String configuration = xcodePropertyAdapter.getConfiguration();
bridgeTask.dependsOn(target.getBinaries().stream().filter(it -> it.getBuildConfigurationName().equals(configuration)).findFirst().get().getOutputFile());
bridgeTask.configure(task -> task.dependsOn(target.getBinaries().stream().filter(it -> it.getBuildConfigurationName().equals(configuration)).findFirst().get().getOutputFile()));
}

private void bridgeTestExecution(Task bridgeTask, final XcodeTarget target) {
private void bridgeTestExecution(TaskProvider<Task> bridgeTask, final XcodeTarget target) {
// XCTest executable
// Sync the binary to the BUILT_PRODUCTS_DIR, otherwise Xcode won't find any tests
final String builtProductsPath = xcodePropertyAdapter.getBuiltProductsDir();
@SuppressWarnings("deprecation")
final Sync syncTask = project.getTasks().create("syncBundleToXcodeBuiltProductDir", Sync.class, new Action<Sync>() {
final TaskProvider<Sync> syncTask = project.getTasks().register("syncBundleToXcodeBuiltProductDir", Sync.class, new Action<Sync>() {
@Override
public void execute(Sync task) {
task.from(target.getDebugOutputFile());
task.into(builtProductsPath);
}
});
bridgeTask.dependsOn(syncTask);
bridgeTask.configure(task -> task.dependsOn(syncTask));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.VersionSelectorScheme;
import org.gradle.api.internal.artifacts.ivyservice.projectmodule.ProjectDependencyPublicationResolver;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.TaskProvider;
import org.gradle.internal.component.external.model.DefaultModuleComponentSelector;
import org.gradle.language.cpp.CppApplication;
import org.gradle.language.cpp.CppLibrary;
Expand Down Expand Up @@ -90,17 +91,16 @@ public SwiftPackageManagerExportPlugin(VcsResolver vcsResolver, VersionSelectorS

@Override
public void apply(final Project project) {
@SuppressWarnings("deprecation")
final GenerateSwiftPackageManagerManifest manifestTask = project.getTasks().create("generateSwiftPmManifest", GenerateSwiftPackageManagerManifest.class);
manifestTask.getManifestFile().set(project.getLayout().getProjectDirectory().file("Package.swift"));
final TaskProvider<GenerateSwiftPackageManagerManifest> manifestTask = project.getTasks().register("generateSwiftPmManifest", GenerateSwiftPackageManagerManifest.class,
task -> task.getManifestFile().set(project.getLayout().getProjectDirectory().file("Package.swift")));

// Defer attaching the model until all components have been (most likely) configured
// TODO - make this relationship explicit to make this more reliable and offer better diagnostics
project.afterEvaluate(new Action<Project>() {
@Override
public void execute(Project project) {
Provider<Package> products = project.getProviders().provider(new MemoizingCallable(new PackageFactory(project)));
manifestTask.getPackage().set(products);
manifestTask.configure(task -> task.getPackage().set(products));
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,12 +195,7 @@ public void registerNativePlatformResolver(PlatformResolvers resolvers, ServiceR

@Defaults
public void registerFactoryForCustomNativePlatforms(PlatformContainer platforms, final Instantiator instantiator) {
NamedDomainObjectFactory<NativePlatform> nativePlatformFactory = new NamedDomainObjectFactory<NativePlatform>() {
@Override
public NativePlatform create(String name) {
return instantiator.newInstance(DefaultNativePlatform.class, name);
}
};
NamedDomainObjectFactory<NativePlatform> nativePlatformFactory = name -> instantiator.newInstance(DefaultNativePlatform.class, name);

platforms.registerFactory(NativePlatform.class, nativePlatformFactory);

Expand Down Expand Up @@ -273,19 +268,15 @@ public void execute(DependentSourceSetInternal dependentSourceSet) {
});
}

@SuppressWarnings("deprecation")
@Mutate
void configurePrefixHeaderGenerationTasks(final TaskContainer tasks, ComponentSpecContainer components) {
for (final SourceComponentSpec nativeComponentSpec : components.withType(SourceComponentSpec.class).values()) {
for (final DependentSourceSetInternal dependentSourceSet : nativeComponentSpec.getSources().withType(DependentSourceSetInternal.class).values()) {
if (dependentSourceSet.getPrefixHeaderFile() != null) {
String taskName = "generate" + StringUtils.capitalize(nativeComponentSpec.getName()) + StringUtils.capitalize(dependentSourceSet.getName()) + "PrefixHeaderFile";
tasks.create(taskName, PrefixHeaderFileGenerateTask.class, new Action<PrefixHeaderFileGenerateTask>() {
@Override
public void execute(PrefixHeaderFileGenerateTask prefixHeaderFileGenerateTask) {
prefixHeaderFileGenerateTask.setPrefixHeaderFile(dependentSourceSet.getPrefixHeaderFile());
prefixHeaderFileGenerateTask.setHeader(dependentSourceSet.getPreCompiledHeader());
}
tasks.register(taskName, PrefixHeaderFileGenerateTask.class, prefixHeaderFileGenerateTask -> {
prefixHeaderFileGenerateTask.setPrefixHeaderFile(dependentSourceSet.getPrefixHeaderFile());
prefixHeaderFileGenerateTask.setHeader(dependentSourceSet.getPreCompiledHeader());
});
}
}
Expand All @@ -296,23 +287,20 @@ public void execute(PrefixHeaderFileGenerateTask prefixHeaderFileGenerateTask) {
void configurePreCompiledHeaderCompileTasks(final TaskContainer tasks, BinaryContainer binaries, final LanguageTransformContainer languageTransforms, final ServiceRegistry serviceRegistry) {
for (final NativeBinarySpecInternal nativeBinarySpec : binaries.withType(NativeBinarySpecInternal.class)) {
for (final PchEnabledLanguageTransform<?> transform : languageTransforms.withType(PchEnabledLanguageTransform.class)) {
nativeBinarySpec.getInputs().withType(transform.getSourceSetType(), new Action<LanguageSourceSet>() {
@Override
public void execute(final LanguageSourceSet languageSourceSet) {
final DependentSourceSet dependentSourceSet = (DependentSourceSet) languageSourceSet;
if (dependentSourceSet.getPreCompiledHeader() != null) {
nativeBinarySpec.addPreCompiledHeaderFor(dependentSourceSet);
final SourceTransformTaskConfig pchTransformTaskConfig = transform.getPchTransformTask();
String pchTaskName = pchTransformTaskConfig.getTaskPrefix() + StringUtils.capitalize(nativeBinarySpec.getProjectScopedName()) + StringUtils.capitalize(dependentSourceSet.getName()) + "PreCompiledHeader";
@SuppressWarnings("deprecation")
Task pchTask = tasks.create(pchTaskName, pchTransformTaskConfig.getTaskType(), new Action<DefaultTask>() {
@Override
public void execute(DefaultTask task) {
pchTransformTaskConfig.configureTask(task, nativeBinarySpec, dependentSourceSet, serviceRegistry);
}
});
nativeBinarySpec.getTasks().add(pchTask);
}
nativeBinarySpec.getInputs().withType(transform.getSourceSetType(), (Action<LanguageSourceSet>) languageSourceSet -> {
final DependentSourceSet dependentSourceSet = (DependentSourceSet) languageSourceSet;
if (dependentSourceSet.getPreCompiledHeader() != null) {
nativeBinarySpec.addPreCompiledHeaderFor(dependentSourceSet);
final SourceTransformTaskConfig pchTransformTaskConfig = transform.getPchTransformTask();
String pchTaskName = pchTransformTaskConfig.getTaskPrefix() + StringUtils.capitalize(nativeBinarySpec.getProjectScopedName()) + StringUtils.capitalize(dependentSourceSet.getName()) + "PreCompiledHeader";
@SuppressWarnings("deprecation")
Task pchTask = tasks.create(pchTaskName, pchTransformTaskConfig.getTaskType(), new Action<DefaultTask>() {
@Override
public void execute(DefaultTask task) {
pchTransformTaskConfig.configureTask(task, nativeBinarySpec, dependentSourceSet, serviceRegistry);
}
});
nativeBinarySpec.getTasks().add(pchTask);
}
});
}
Expand Down Expand Up @@ -435,12 +423,7 @@ private DefaultRepositories(Instantiator instantiator,
CollectionCallbackActionDecorator collectionCallbackActionDecorator,
DomainObjectCollectionFactory domainObjectCollectionFactory) {
super(ArtifactRepository.class, instantiator, new ArtifactRepositoryNamer(), collectionCallbackActionDecorator);
registerFactory(PrebuiltLibraries.class, new NamedDomainObjectFactory<PrebuiltLibraries>() {
@Override
public PrebuiltLibraries create(String name) {
return instantiator.newInstance(DefaultPrebuiltLibraries.class, name, instantiator, objectFactory, binaryFactory, collectionCallbackActionDecorator, domainObjectCollectionFactory);
}
});
registerFactory(PrebuiltLibraries.class, name -> instantiator.newInstance(DefaultPrebuiltLibraries.class, name, instantiator, objectFactory, binaryFactory, collectionCallbackActionDecorator, domainObjectCollectionFactory));
}
}

Expand Down
Loading
0