org.gradle.ide.visualstudio.plugins.VisualStudioPlugin Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle-api Show documentation
Show all versions of gradle-api Show documentation
Gradle 6.9.1 API redistribution.
/*
* Copyright 2014 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.ide.visualstudio.plugins;
import org.gradle.api.*;
import org.gradle.api.internal.file.FileResolver;
import org.gradle.api.internal.project.ProjectIdentifier;
import org.gradle.api.internal.resolve.ProjectModelResolver;
import org.gradle.api.tasks.Delete;
import org.gradle.api.tasks.TaskContainer;
import org.gradle.ide.visualstudio.VisualStudioProject;
import org.gradle.ide.visualstudio.VisualStudioSolution;
import org.gradle.ide.visualstudio.internal.DefaultVisualStudioExtension;
import org.gradle.ide.visualstudio.internal.DefaultVisualStudioProject;
import org.gradle.ide.visualstudio.internal.VisualStudioExtensionInternal;
import org.gradle.ide.visualstudio.internal.VisualStudioProjectConfiguration;
import org.gradle.ide.visualstudio.tasks.GenerateFiltersFileTask;
import org.gradle.ide.visualstudio.tasks.GenerateProjectFileTask;
import org.gradle.ide.visualstudio.tasks.GenerateSolutionFileTask;
import org.gradle.internal.reflect.Instantiator;
import org.gradle.internal.service.ServiceRegistry;
import org.gradle.model.Model;
import org.gradle.model.Mutate;
import org.gradle.model.RuleSource;
import org.gradle.nativeplatform.NativeBinarySpec;
import org.gradle.nativeplatform.NativeComponentSpec;
import org.gradle.nativeplatform.plugins.NativeComponentModelPlugin;
import org.gradle.platform.base.BinaryContainer;
/**
* A plugin for creating a Visual Studio solution for a gradle project.
*/
@Incubating
public class VisualStudioPlugin implements Plugin {
@Override
public void apply(Project project) {
project.getPluginManager().apply(NativeComponentModelPlugin.class);
}
static class Rules extends RuleSource {
@Model
public static VisualStudioExtensionInternal visualStudio(ServiceRegistry serviceRegistry, ProjectIdentifier projectIdentifier) {
Instantiator instantiator = serviceRegistry.get(Instantiator.class);
ProjectModelResolver projectModelResolver = serviceRegistry.get(ProjectModelResolver.class);
FileResolver fileResolver = serviceRegistry.get(FileResolver.class);
return instantiator.newInstance(DefaultVisualStudioExtension.class, projectIdentifier, instantiator, projectModelResolver, fileResolver);
}
@Mutate
public static void includeBuildFileInProject(VisualStudioExtensionInternal visualStudio, final ProjectIdentifier projectIdentifier) {
visualStudio.getProjects().all(new Action() {
public void execute(VisualStudioProject project) {
if (projectIdentifier.getBuildFile() != null) {
((DefaultVisualStudioProject) project).addSourceFile(projectIdentifier.getBuildFile());
}
}
});
}
@Mutate
public static void createVisualStudioModelForBinaries(VisualStudioExtensionInternal visualStudioExtension, BinaryContainer binaries) {
for (NativeBinarySpec binary : binaries.withType(NativeBinarySpec.class)) {
VisualStudioProjectConfiguration configuration = visualStudioExtension.getProjectRegistry().addProjectConfiguration(binary);
// Only create a solution if one of the binaries is buildable
if (binary.isBuildable()) {
DefaultVisualStudioProject visualStudioProject = configuration.getProject();
visualStudioExtension.getSolutionRegistry().addSolution(visualStudioProject);
}
}
}
@Mutate
public static void createTasksForVisualStudio(TaskContainer tasks, VisualStudioExtensionInternal visualStudioExtension) {
for (VisualStudioProject vsProject : visualStudioExtension.getProjects()) {
vsProject.builtBy(createProjectsFileTask(tasks, vsProject));
vsProject.builtBy(createFiltersFileTask(tasks, vsProject));
}
for (VisualStudioSolution vsSolution : visualStudioExtension.getSolutions()) {
Task solutionTask = tasks.create(vsSolution.getName() + "VisualStudio");
solutionTask.setDescription("Generates the '" + vsSolution.getName() + "' Visual Studio solution file.");
vsSolution.setBuildTask(solutionTask);
vsSolution.builtBy(createSolutionTask(tasks, vsSolution));
// Lifecycle task for component
NativeComponentSpec component = vsSolution.getComponent();
Task lifecycleTask = tasks.maybeCreate(component.getName() + "VisualStudio");
lifecycleTask.dependsOn(vsSolution);
lifecycleTask.setGroup("IDE");
lifecycleTask.setDescription("Generates the Visual Studio solution for " + component + ".");
}
addCleanTask(tasks);
}
private static void addCleanTask(TaskContainer tasks) {
Delete cleanTask = tasks.create("cleanVisualStudio", Delete.class);
for (Task task : tasks.withType(GenerateSolutionFileTask.class)) {
cleanTask.delete(task.getOutputs().getFiles());
}
for (Task task : tasks.withType(GenerateFiltersFileTask.class)) {
cleanTask.delete(task.getOutputs().getFiles());
}
for (Task task : tasks.withType(GenerateProjectFileTask.class)) {
cleanTask.delete(task.getOutputs().getFiles());
}
cleanTask.setGroup("IDE");
cleanTask.setDescription("Removes all generated Visual Studio project and solution files");
}
private static Task createSolutionTask(TaskContainer tasks, VisualStudioSolution solution) {
GenerateSolutionFileTask solutionFileTask = tasks.create(solution.getName() + "VisualStudioSolution", GenerateSolutionFileTask.class);
solutionFileTask.setVisualStudioSolution(solution);
return solutionFileTask;
}
private static Task createProjectsFileTask(TaskContainer tasks, VisualStudioProject vsProject) {
GenerateProjectFileTask task = tasks.create(vsProject.getName() + "VisualStudioProject", GenerateProjectFileTask.class);
task.setVisualStudioProject(vsProject);
task.initGradleCommand();
return task;
}
private static Task createFiltersFileTask(TaskContainer tasks, VisualStudioProject vsProject) {
GenerateFiltersFileTask task = tasks.create(vsProject.getName() + "VisualStudioFilters", GenerateFiltersFileTask.class);
task.setVisualStudioProject(vsProject);
return task;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy