From 421b41ebc7cea5c3be53d6079b9cee3266fabb2b Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Sun, 16 Jan 2022 17:01:56 +0000 Subject: [PATCH] Fix misc jar remapping issues. --- .../loom/task/PrepareJarRemapTask.java | 4 +--- .../net/fabricmc/loom/task/RemapJarTask.java | 9 +-------- .../loom/task/service/JarManifestService.java | 2 +- .../task/service/MixinMappingsService.java | 2 +- .../task/service/SourceRemapperService.java | 4 +--- .../task/service/TinyRemapperService.java | 19 +++++++++---------- 6 files changed, 14 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/task/PrepareJarRemapTask.java b/src/main/java/net/fabricmc/loom/task/PrepareJarRemapTask.java index 81b2ced..f5761d0 100644 --- a/src/main/java/net/fabricmc/loom/task/PrepareJarRemapTask.java +++ b/src/main/java/net/fabricmc/loom/task/PrepareJarRemapTask.java @@ -79,14 +79,12 @@ public abstract class PrepareJarRemapTask extends AbstractLoomTask { workQueue.submit(ReadInputsAction.class, params -> { params.getTinyRemapperBuildServiceUuid().set(UnsafeWorkQueueHelper.create(getProject(), remapJarTask.getTinyRemapperService())); - params.getInputTagName().set(remapJarTask.getInputTagName()); params.getInputFile().set(getInputFile()); }); } public interface ReadInputsParams extends WorkParameters { Property getTinyRemapperBuildServiceUuid(); - Property getInputTagName(); RegularFileProperty getInputFile(); } @@ -102,7 +100,7 @@ public abstract class PrepareJarRemapTask extends AbstractLoomTask { final TinyRemapper tinyRemapper = tinyRemapperService.getTinyRemapperForInputs(); final Path inputFile = getParameters().getInputFile().getAsFile().get().toPath(); - tinyRemapper.readInputsAsync(tinyRemapperService.createTag(getParameters().getInputTagName().get()), inputFile); + tinyRemapper.readInputsAsync(tinyRemapperService.getOrCreateTag(inputFile), inputFile); } } } diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java index efe5815..56ec3d1 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java @@ -126,7 +126,6 @@ public abstract class RemapJarTask extends AbstractRemapJarTask { params.getJarManifestService().set(JarManifestService.get(getProject())); params.getTinyRemapperBuildServiceUuid().set(UnsafeWorkQueueHelper.create(getProject(), tinyRemapperService.get())); params.getRemapClasspath().from(getClasspath()); - params.getInputTagName().set(getInputTagName()); final boolean legacyMixin = extension.getMixin().getUseLegacyMixinAp().get(); params.getUseMixinExtension().set(!legacyMixin); @@ -193,7 +192,6 @@ public abstract class RemapJarTask extends AbstractRemapJarTask { public interface RemapParams extends AbstractRemapParams { ConfigurableFileCollection getNestedJars(); ConfigurableFileCollection getRemapClasspath(); - Property getInputTagName(); Property getUseMixinExtension(); @@ -243,7 +241,7 @@ public abstract class RemapJarTask extends AbstractRemapJarTask { private void remap() throws IOException { try (OutputConsumerPath outputConsumer = new OutputConsumerPath.Builder(outputFile).build()) { outputConsumer.addNonClassFiles(inputFile); - tinyRemapper.apply(outputConsumer, tinyRemapperService.getTag(getParameters().getInputTagName().get())); + tinyRemapper.apply(outputConsumer, tinyRemapperService.getOrCreateTag(inputFile)); } } @@ -323,9 +321,4 @@ public abstract class RemapJarTask extends AbstractRemapJarTask { public TinyRemapperService getTinyRemapperService() { return tinyRemapperService.get(); } - - @Internal - String getInputTagName() { - return getProject().getPath() + getName(); - } } diff --git a/src/main/java/net/fabricmc/loom/task/service/JarManifestService.java b/src/main/java/net/fabricmc/loom/task/service/JarManifestService.java index c80852e..4de6cba 100644 --- a/src/main/java/net/fabricmc/loom/task/service/JarManifestService.java +++ b/src/main/java/net/fabricmc/loom/task/service/JarManifestService.java @@ -53,7 +53,7 @@ public abstract class JarManifestService implements BuildService getMixinVersion(); } - public static Provider get(Project project) { + public static synchronized Provider get(Project project) { return project.getGradle().getSharedServices().registerIfAbsent("LoomJarManifestService:" + project.getName(), JarManifestService.class, spec -> { spec.parameters(params -> { LoomGradleExtension extension = LoomGradleExtension.get(project); diff --git a/src/main/java/net/fabricmc/loom/task/service/MixinMappingsService.java b/src/main/java/net/fabricmc/loom/task/service/MixinMappingsService.java index dfa0b40..37466a1 100644 --- a/src/main/java/net/fabricmc/loom/task/service/MixinMappingsService.java +++ b/src/main/java/net/fabricmc/loom/task/service/MixinMappingsService.java @@ -52,7 +52,7 @@ public final class MixinMappingsService implements SharedService { return mixinMapping; } - static MixinMappingsService getService(SharedServiceManager sharedServiceManager) { + static synchronized MixinMappingsService getService(SharedServiceManager sharedServiceManager) { return sharedServiceManager.getOrCreateService("MixinMappings", () -> new MixinMappingsService(sharedServiceManager)); } diff --git a/src/main/java/net/fabricmc/loom/task/service/SourceRemapperService.java b/src/main/java/net/fabricmc/loom/task/service/SourceRemapperService.java index 4955f06..76dec9c 100644 --- a/src/main/java/net/fabricmc/loom/task/service/SourceRemapperService.java +++ b/src/main/java/net/fabricmc/loom/task/service/SourceRemapperService.java @@ -109,9 +109,7 @@ public final class SourceRemapperService implements SharedService { private synchronized void doRemap(Path srcPath, Path dstPath, Path source) { try { - synchronized (mercury) { - mercury.get().rewrite(srcPath, dstPath); - } + mercury.get().rewrite(srcPath, dstPath); } catch (Exception e) { LOGGER.warn("Could not remap " + source + " fully!", e); } 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 e818211..47d9e47 100644 --- a/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java +++ b/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java @@ -28,11 +28,11 @@ import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.ConcurrentHashMap; import org.gradle.api.Project; @@ -73,7 +73,7 @@ public class TinyRemapperService implements SharedService { } private TinyRemapper tinyRemapper; - private final Map inputTagMap = new ConcurrentHashMap<>(); + private final Map inputTagMap = new HashMap<>(); private final HashSet classpath = new HashSet<>(); // Set to true once remapping has started, once set no inputs can be read. private boolean isRemapping = false; @@ -92,16 +92,15 @@ public class TinyRemapperService implements SharedService { tinyRemapper = builder.build(); } - public InputTag createTag(String key) { - if (inputTagMap.containsKey(key)) { - throw new IllegalStateException("Input tag already exists for key: " + key); + public synchronized InputTag getOrCreateTag(Path file) { + InputTag tag = inputTagMap.get(file.toAbsolutePath().toString()); + + if (tag == null) { + tag = tinyRemapper.createInputTag(); + inputTagMap.put(file.toAbsolutePath().toString(), tag); } - return inputTagMap.put(key, tinyRemapper.createInputTag()); - } - - public InputTag getTag(String key) { - return Objects.requireNonNull(inputTagMap.get(key), "Input tag not found for: " + key); + return tag; } public TinyRemapper getTinyRemapperForRemapping() {