From 89c54ae27439d753229065246cea9ef1c6b8495f Mon Sep 17 00:00:00 2001 From: Technici4n <13494793+Technici4n@users.noreply.github.com> Date: Thu, 7 Dec 2023 00:00:58 +0100 Subject: [PATCH 1/2] Fix the run gradle task not correctly accounting for processResources tasks of dependent sourcesets --- .../runs/ide/IdeRunIntegrationManager.java | 14 +------------ .../gradle/common/util/run/RunsUtil.java | 21 ++++++++++++++++--- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/common/src/main/java/net/neoforged/gradle/common/runs/ide/IdeRunIntegrationManager.java b/common/src/main/java/net/neoforged/gradle/common/runs/ide/IdeRunIntegrationManager.java index b5ca74f31..7bab5851e 100644 --- a/common/src/main/java/net/neoforged/gradle/common/runs/ide/IdeRunIntegrationManager.java +++ b/common/src/main/java/net/neoforged/gradle/common/runs/ide/IdeRunIntegrationManager.java @@ -194,19 +194,7 @@ private static String quote(String arg) { private TaskProvider createIdeBeforeRunTask(Project project, String name, Run run, RunImpl runImpl) { final TaskProvider ideBeforeRunTask = project.getTasks().register(CommonRuntimeUtils.buildTaskName("ideBeforeRun", name), task -> { - for (SourceSet sourceSet : run.getModSources().get()) { - final Project sourceSetProject = SourceSetUtils.getProject(sourceSet); - - //The following tasks are not guaranteed to be in the source sets build dependencies - //We however need at least the classes as well as the resources of the source set to be run - task.dependsOn(sourceSetProject.getTasks().named(sourceSet.getProcessResourcesTaskName())); - task.dependsOn(sourceSetProject.getTasks().named(sourceSet.getCompileJavaTaskName())); - - //There might be additional tasks that are needed to configure and run a source set. - //Also run those - sourceSet.getOutput().getBuildDependencies().getDependencies(null) - .forEach(task::dependsOn); - } + RunsUtil.addRunSourcesDependenciesToTask(task, run); }); if (!runImpl.getTaskDependencies().isEmpty()) { diff --git a/common/src/main/java/net/neoforged/gradle/common/util/run/RunsUtil.java b/common/src/main/java/net/neoforged/gradle/common/util/run/RunsUtil.java index 6b74f3419..dc3f123f2 100644 --- a/common/src/main/java/net/neoforged/gradle/common/util/run/RunsUtil.java +++ b/common/src/main/java/net/neoforged/gradle/common/util/run/RunsUtil.java @@ -9,6 +9,7 @@ import net.neoforged.gradle.dsl.common.runs.run.Run; import net.neoforged.gradle.util.StringCapitalizationUtils; import org.gradle.api.Project; +import org.gradle.api.Task; import org.gradle.api.plugins.ExtensionAware; import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Provider; @@ -45,9 +46,7 @@ public static Run create(final Project project, final String name) { }); project.afterEvaluate(evaluatedProject -> runTask.configure(task -> { - task.getRun().get().getModSources().get().stream().map(SourceSet::getClassesTaskName) - .map(classTaskName -> evaluatedProject.getTasks().named(classTaskName)) - .forEach(task::dependsOn); + addRunSourcesDependenciesToTask(task, run); run.getTaskDependencies().forEach(task::dependsOn); })); @@ -56,6 +55,22 @@ public static Run create(final Project project, final String name) { return run; } + + public static void addRunSourcesDependenciesToTask(Task task, Run run) { + for (SourceSet sourceSet : run.getModSources().get()) { + final Project sourceSetProject = SourceSetUtils.getProject(sourceSet); + + //The following tasks are not guaranteed to be in the source sets build dependencies + //We however need at least the classes as well as the resources of the source set to be run + task.dependsOn(sourceSetProject.getTasks().named(sourceSet.getProcessResourcesTaskName())); + task.dependsOn(sourceSetProject.getTasks().named(sourceSet.getCompileJavaTaskName())); + + //There might be additional tasks that are needed to configure and run a source set. + //Also run those + sourceSet.getOutput().getBuildDependencies().getDependencies(null) + .forEach(task::dependsOn); + } + } public static Provider buildGradleModClasses(final ListProperty sourceSetsProperty) { return buildGradleModClasses( From 1d98803298430bebe07d78df484aafb9de0cef0c Mon Sep 17 00:00:00 2001 From: Technici4n <13494793+Technici4n@users.noreply.github.com> Date: Thu, 7 Dec 2023 00:08:40 +0100 Subject: [PATCH 2/2] Replace spaces in ideBeforeRun task names (intellij doesn't like them) --- .../gradle/common/runs/ide/IdeRunIntegrationManager.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/neoforged/gradle/common/runs/ide/IdeRunIntegrationManager.java b/common/src/main/java/net/neoforged/gradle/common/runs/ide/IdeRunIntegrationManager.java index 7bab5851e..56b935b8c 100644 --- a/common/src/main/java/net/neoforged/gradle/common/runs/ide/IdeRunIntegrationManager.java +++ b/common/src/main/java/net/neoforged/gradle/common/runs/ide/IdeRunIntegrationManager.java @@ -94,11 +94,12 @@ public void idea(Project project, IdeaModel idea, ProjectSettings ideaExtension) final RunConfigurationContainer ideaRuns = ((ExtensionAware) ideaExtension).getExtensions().getByType(RunConfigurationContainer.class); project.getExtensions().configure(RunsConstants.Extensions.RUNS, (Action>) runs -> runs.getAsMap().forEach((name, run) -> { - final String runName = StringUtils.capitalize(project.getName() + ": " + StringUtils.capitalize(name.replace(" ", "-"))); + final String nameWithoutSpaces = name.replace(" ", "-"); + final String runName = StringUtils.capitalize(project.getName() + ": " + StringUtils.capitalize(nameWithoutSpaces)); final RunImpl runImpl = (RunImpl) run; final IdeaRunExtension runIdeaConfig = run.getExtensions().getByType(IdeaRunExtension.class); - final TaskProvider ideBeforeRunTask = createIdeBeforeRunTask(project, name, run, runImpl); + final TaskProvider ideBeforeRunTask = createIdeBeforeRunTask(project, nameWithoutSpaces, run, runImpl); ideaRuns.register(runName, Application.class, ideaRun -> { runImpl.getWorkingDirectory().get().getAsFile().mkdirs();