From 3953aeda522fb1fdd1354c19ec94f3e3782ff0d2 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Thu, 27 Jan 2022 20:58:18 +0800 Subject: [PATCH] Workaround FabricMC/fabric-loom#587 Signed-off-by: shedaniel --- .../fabricmc/loom/task/AbstractRemapJarTask.java | 14 ++++++++++++++ .../loom/task/service/TinyRemapperService.java | 3 ++- 2 files changed, 16 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 dcde70b1..c3448063 100644 --- a/src/main/java/net/fabricmc/loom/task/AbstractRemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/AbstractRemapJarTask.java @@ -41,6 +41,7 @@ import org.gradle.workers.WorkAction; import org.gradle.workers.WorkParameters; import org.gradle.workers.WorkQueue; import org.gradle.workers.WorkerExecutor; +import org.jetbrains.annotations.ApiStatus; import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; import net.fabricmc.loom.util.SourceRemapper; @@ -62,10 +63,23 @@ public abstract class AbstractRemapJarTask extends Jar { @Inject protected abstract WorkerExecutor getWorkerExecutor(); + /** + * Whether the remap jar service is reused between different projects, this is defaulted to true on upstream, but + * it is false by default on this fork, as it breaks setups where remap jar services are receiving the same classes. + * This is a temporary workaround until we can figure out a better solution. + * + * @see Issue 587 + * @return Whether the remap jar service is reused between different projects + */ + @ApiStatus.Experimental + @Input + public abstract Property getDoesShareProjectState(); + @Inject public AbstractRemapJarTask() { getSourceNamespace().convention(MappingsNamespace.NAMED.toString()).finalizeValueOnRead(); getTargetNamespace().convention(SourceRemapper.intermediary(getProject())).finalizeValueOnRead(); + getDoesShareProjectState().convention(false); } 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 4bd7224c..f91f54f4 100644 --- a/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java +++ b/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java @@ -54,9 +54,10 @@ public class TinyRemapperService implements SharedService { final SharedServiceManager sharedServiceManager = SharedServiceManager.get(project); final boolean legacyMixin = extension.getMixin().getUseLegacyMixinAp().get(); final boolean useKotlinExtension = project.getPluginManager().hasPlugin("org.jetbrains.kotlin.jvm"); + final boolean doesShareProjectState = remapJarTask.getDoesShareProjectState().get(); // 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 String id = extension.getMappingsProvider().getBuildServiceName("remapJarService", from, to) + ":" + (doesShareProjectState ? "" : project.getPath() + ":") + remapJarTask.getName() + (useKotlinExtension ? ":kotlin" : ""); TinyRemapperService service = sharedServiceManager.getOrCreateService(id, () -> { List mappings = new ArrayList<>();