diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/idea/IdeaConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/ide/idea/IdeaConfiguration.java index 0933c8e..38ab079 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/idea/IdeaConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/idea/IdeaConfiguration.java @@ -24,11 +24,14 @@ package net.fabricmc.loom.configuration.ide.idea; +import java.util.ArrayList; import java.util.List; +import org.gradle.StartParameter; +import org.gradle.TaskExecutionRequest; import org.gradle.api.Project; import org.gradle.api.tasks.TaskProvider; -import org.gradle.execution.taskgraph.TaskExecutionGraphInternal; +import org.gradle.internal.DefaultTaskExecutionRequest; import net.fabricmc.loom.task.LoomTasks; @@ -42,8 +45,10 @@ public class IdeaConfiguration { return; } - // Run the idea sync task, is this exposed via the api? - final TaskExecutionGraphInternal taskGraph = (TaskExecutionGraphInternal) project.getGradle().getTaskGraph(); - taskGraph.whenReady(taskExecutionGraph -> taskGraph.addEntryTasks(List.of(ideaSyncTask.get()))); + final StartParameter startParameter = project.getGradle().getStartParameter(); + final List taskRequests = new ArrayList<>(startParameter.getTaskRequests()); + + taskRequests.add(new DefaultTaskExecutionRequest(List.of("ideaSyncTask"))); + startParameter.setTaskRequests(taskRequests); } } diff --git a/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy b/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy index 64ce949..6f85231 100644 --- a/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy @@ -28,7 +28,7 @@ import org.gradle.util.GradleVersion class LoomTestConstants { public final static String DEFAULT_GRADLE = GradleVersion.current().getVersion() - public final static String PRE_RELEASE_GRADLE = "7.5-20220124231322+0000" + public final static String PRE_RELEASE_GRADLE = "7.5-20220129032445+0000" public final static String[] STANDARD_TEST_VERSIONS = [DEFAULT_GRADLE, PRE_RELEASE_GRADLE] } diff --git a/src/test/groovy/net/fabricmc/loom/test/integration/RunConfigTest.groovy b/src/test/groovy/net/fabricmc/loom/test/integration/RunConfigTest.groovy index 46d8b3a..18f8e68 100644 --- a/src/test/groovy/net/fabricmc/loom/test/integration/RunConfigTest.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/integration/RunConfigTest.groovy @@ -27,7 +27,9 @@ package net.fabricmc.loom.test.integration import net.fabricmc.loom.test.util.GradleProjectTestTrait import spock.lang.Specification import spock.lang.Unroll +import spock.util.environment.RestoreSystemProperties +import static net.fabricmc.loom.test.LoomTestConstants.STANDARD_TEST_VERSIONS import static org.gradle.testkit.runner.TaskOutcome.SUCCESS // This test runs a mod that exits on mod init @@ -52,4 +54,32 @@ class RunConfigTest extends Specification implements GradleProjectTestTrait { 'runTestmodServer' | _ 'runAutoTestServer' | _ } + + @RestoreSystemProperties + @Unroll + def "idea auto configuration (gradle #version)"() { + setup: + System.setProperty("idea.sync.active", "true") + def gradle = gradleProject(project: "minimalBase", version: version) + + new File(gradle.projectDir, ".idea").mkdirs() + + gradle.buildGradle << ''' + dependencies { + minecraft "com.mojang:minecraft:1.18.1" + mappings "net.fabricmc:yarn:1.18.1+build.18:v2" + modImplementation "net.fabricmc:fabric-loader:0.12.12" + } + ''' + + when: + // Dont run with any tasks, the idea sync task should be invoked automatically due to the system prop + def result = gradle.run(tasks: []) + + then: + result.task(":ideaSyncTask").outcome == SUCCESS + + where: + version << STANDARD_TEST_VERSIONS + } }