From 03089cf6d7d1a546219efa8322d5c0f7a2d9b8c3 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Thu, 27 Jan 2022 16:01:46 +0000 Subject: [PATCH 1/2] Setup remapped variants in afterEvaluate to work around issues caused by creating the lazy remap tasks too early. (#586) --- .../loom/task/RemapTaskConfiguration.java | 48 ++++++++++++------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/task/RemapTaskConfiguration.java b/src/main/java/net/fabricmc/loom/task/RemapTaskConfiguration.java index 1f6a8d15..bedd5c52 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapTaskConfiguration.java +++ b/src/main/java/net/fabricmc/loom/task/RemapTaskConfiguration.java @@ -80,7 +80,11 @@ public class RemapTaskConfiguration { trySetupSourceRemapping(project); - if (extension.getSetupRemappedVariants().get()) { + if (!extension.getSetupRemappedVariants().get()) { + return; + } + + project.afterEvaluate(p -> { // Remove -dev jars from the default jar task for (String configurationName : new String[] { JavaPlugin.API_ELEMENTS_CONFIGURATION_NAME, JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME }) { Configuration configuration = project.getConfigurations().getByName(configurationName); @@ -90,19 +94,19 @@ public class RemapTaskConfiguration { return "dev".equals(artifact.getClassifier()) && artifact.getBuildDependencies().getDependencies(null).contains(jarTask); }); } - } + }); } private static void trySetupSourceRemapping(Project project) { final TaskContainer tasks = project.getTasks(); final LoomGradleExtension extension = LoomGradleExtension.get(project); + final JavaPluginExtension javaExtension = project.getExtensions().getByType(JavaPluginExtension.class); + final String sourcesJarTaskName = javaExtension.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME).getSourcesJarTaskName(); TaskProvider remapSourcesTask = tasks.register(REMAP_SOURCES_JAR_TASK_NAME, RemapSourcesJarTask.class, task -> { task.setDescription("Remaps the default sources jar to intermediary mappings."); task.setGroup(Constants.TaskGroup.FABRIC); - final JavaPluginExtension javaExtension = project.getExtensions().getByType(JavaPluginExtension.class); - final String sourcesJarTaskName = javaExtension.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME).getSourcesJarTaskName(); final Task sourcesTask = project.getTasks().findByName(sourcesJarTaskName); if (sourcesTask == null) { @@ -123,21 +127,31 @@ public class RemapTaskConfiguration { task.dependsOn(sourcesJarTask); task.getInputFile().convention(sourcesJarTask.getArchiveFile()); - - if (extension.getSetupRemappedVariants().get()) { - if (project.getConfigurations().getNames().contains(JavaPlugin.SOURCES_ELEMENTS_CONFIGURATION_NAME)) { - project.getArtifacts().add(JavaPlugin.SOURCES_ELEMENTS_CONFIGURATION_NAME, task); - - // Remove the dev sources artifact - Configuration configuration = project.getConfigurations().getByName(JavaPlugin.SOURCES_ELEMENTS_CONFIGURATION_NAME); - configuration.getArtifacts().removeIf(a -> a.getFile().equals(sourcesJarTask.getArchiveFile().get().getAsFile())); - } else { - // Sources jar may not have been created with withSourcesJar - project.getLogger().warn("Not publishing sources jar as it was not found. Use java.withSourcesJar() to fix."); - } - } }); tasks.named(BasePlugin.ASSEMBLE_TASK_NAME).configure(task -> task.dependsOn(remapSourcesTask)); + + if (!extension.getSetupRemappedVariants().get()) { + return; + } + + project.afterEvaluate(p -> { + final Task sourcesTask = project.getTasks().findByName(sourcesJarTaskName); + + if (!(sourcesTask instanceof Jar sourcesJarTask)) { + return; + } + + if (project.getConfigurations().getNames().contains(JavaPlugin.SOURCES_ELEMENTS_CONFIGURATION_NAME)) { + project.getArtifacts().add(JavaPlugin.SOURCES_ELEMENTS_CONFIGURATION_NAME, remapSourcesTask); + + // Remove the dev sources artifact + Configuration configuration = project.getConfigurations().getByName(JavaPlugin.SOURCES_ELEMENTS_CONFIGURATION_NAME); + configuration.getArtifacts().removeIf(a -> a.getFile().equals(sourcesJarTask.getArchiveFile().get().getAsFile())); + } else { + // Sources jar may not have been created with withSourcesJar + project.getLogger().warn("Not publishing sources jar as it was not found. Use java.withSourcesJar() to fix."); + } + }); } } From 4fe19028cf4194e3982adb28d7c51ddb27fed28b Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Thu, 27 Jan 2022 17:08:17 +0000 Subject: [PATCH 2/2] Add option to isolate the tiny remapper instance between sub-projects. (#588) --- .../fabricmc/loom/task/AbstractRemapJarTask.java | 7 +++++++ .../loom/task/service/TinyRemapperService.java | 15 ++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/fabricmc/loom/task/AbstractRemapJarTask.java b/src/main/java/net/fabricmc/loom/task/AbstractRemapJarTask.java index af022a8b..e23460fd 100644 --- a/src/main/java/net/fabricmc/loom/task/AbstractRemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/AbstractRemapJarTask.java @@ -58,6 +58,12 @@ public abstract class AbstractRemapJarTask extends Jar { @Input public abstract Property getTargetNamespace(); + /** + * When enabled the TinyRemapperService will not be shared across sub projects. + */ + @Input + public abstract Property getRemapperIsolation(); + @Inject protected abstract WorkerExecutor getWorkerExecutor(); @@ -65,6 +71,7 @@ public abstract class AbstractRemapJarTask extends Jar { public AbstractRemapJarTask() { getSourceNamespace().convention(MappingsNamespace.NAMED.toString()).finalizeValueOnRead(); getTargetNamespace().convention(MappingsNamespace.INTERMEDIARY.toString()).finalizeValueOnRead(); + getRemapperIsolation().convention(false).finalizeValueOnRead(); } public final

void submitWork(Class> workAction, Action

action) { diff --git a/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java b/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java index 9e05d656..54d974a6 100644 --- a/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java +++ b/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java @@ -33,6 +33,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.StringJoiner; import org.gradle.api.Project; @@ -56,7 +57,19 @@ public class TinyRemapperService implements SharedService { final boolean useKotlinExtension = project.getPluginManager().hasPlugin("org.jetbrains.kotlin.jvm"); // Generates an id that is used to share the remapper across projects. This tasks in the remap jar task name to handle custom remap jar tasks separately. - final String id = extension.getMappingsProvider().getBuildServiceName("remapJarService", from, to) + ":" + remapJarTask.getName() + (useKotlinExtension ? ":kotlin" : ""); + final var joiner = new StringJoiner(":"); + joiner.add(extension.getMappingsProvider().getBuildServiceName("remapJarService", from, to)); + joiner.add(remapJarTask.getName()); + + if (useKotlinExtension) { + joiner.add("kotlin"); + } + + if (remapJarTask.getRemapperIsolation().get()) { + joiner.add(project.getPath()); + } + + final String id = joiner.toString(); TinyRemapperService service = sharedServiceManager.getOrCreateService(id, () -> { List mappings = new ArrayList<>();