diff --git a/src/main/java/net/fabricmc/loom/task/AbstractRemapJarTask.java b/src/main/java/net/fabricmc/loom/task/AbstractRemapJarTask.java index dcde70b1..d90a5059 100644 --- a/src/main/java/net/fabricmc/loom/task/AbstractRemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/AbstractRemapJarTask.java @@ -59,6 +59,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(); @@ -66,6 +72,7 @@ public abstract class AbstractRemapJarTask extends Jar { public AbstractRemapJarTask() { getSourceNamespace().convention(MappingsNamespace.NAMED.toString()).finalizeValueOnRead(); getTargetNamespace().convention(SourceRemapper.intermediary(getProject())).finalizeValueOnRead(); + getRemapperIsolation().convention(false).finalizeValueOnRead(); } public final

void submitWork(Class> workAction, Action

action) { diff --git a/src/main/java/net/fabricmc/loom/task/RemapTaskConfiguration.java b/src/main/java/net/fabricmc/loom/task/RemapTaskConfiguration.java index 96731e48..61ed6599 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapTaskConfiguration.java +++ b/src/main/java/net/fabricmc/loom/task/RemapTaskConfiguration.java @@ -84,18 +84,6 @@ public class RemapTaskConfiguration { trySetupSourceRemapping(project); - if (extension.getSetupRemappedVariants().get()) { - // 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); - final Task jarTask = project.getTasks().getByName(JavaPlugin.JAR_TASK_NAME); - configuration.getArtifacts().removeIf(artifact -> { - // if the artifact is a -dev jar and "builtBy jar" - return "dev".equals(artifact.getClassifier()) && artifact.getBuildDependencies().getDependencies(null).contains(jarTask); - }); - } - } - project.afterEvaluate(p -> { if (extension.isForge()) { if (PropertyUtil.getAndFinalize(extension.getForge().getConvertAccessWideners())) { @@ -113,18 +101,34 @@ public class RemapTaskConfiguration { } } }); + + 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); + final Task jarTask = project.getTasks().getByName(JavaPlugin.JAR_TASK_NAME); + configuration.getArtifacts().removeIf(artifact -> { + // if the artifact is a -dev jar and "builtBy jar" + 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) { @@ -145,21 +149,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."); + } + }); } } 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 4bd7224c..780c8acc 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 dev.architectury.tinyremapper.IMappingProvider; import dev.architectury.tinyremapper.InputTag; @@ -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<>();