diff --git a/src/main/java/net/fabricmc/loom/configuration/accesstransformer/AccessTransformerJarProcessor.java b/src/main/java/net/fabricmc/loom/configuration/accesstransformer/AccessTransformerJarProcessor.java index 69ce0123..0bf2962b 100644 --- a/src/main/java/net/fabricmc/loom/configuration/accesstransformer/AccessTransformerJarProcessor.java +++ b/src/main/java/net/fabricmc/loom/configuration/accesstransformer/AccessTransformerJarProcessor.java @@ -54,15 +54,12 @@ import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; import net.fabricmc.loom.api.processor.MinecraftJarProcessor; import net.fabricmc.loom.api.processor.ProcessorContext; import net.fabricmc.loom.api.processor.SpecContext; -import net.fabricmc.loom.configuration.providers.mappings.TinyMappingsService; import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.DependencyDownloader; import net.fabricmc.loom.util.ExceptionUtil; import net.fabricmc.loom.util.ForgeToolExecutor; import net.fabricmc.loom.util.fmj.FabricModJson; -import net.fabricmc.loom.util.service.ScopedSharedServiceManager; import net.fabricmc.lorenztiny.TinyMappingsReader; -import net.fabricmc.mappingio.tree.MemoryMappingTree; public class AccessTransformerJarProcessor implements MinecraftJarProcessor { private static final Logger LOGGER = Logging.getLogger(AccessTransformerJarProcessor.class); @@ -128,7 +125,7 @@ public class AccessTransformerJarProcessor implements MinecraftJarProcessor { args.add("--atFile"); @@ -139,7 +136,7 @@ public class AccessTransformerJarProcessor implements MinecraftJarProcessor accessTransformers) throws IOException { + private Path mergeAndRemapAccessTransformers(ProcessorContext context, List accessTransformers) throws IOException { AccessTransformSet accessTransformSet = AccessTransformSet.create(); for (AccessTransformerEntry entry : accessTransformers) { @@ -150,13 +147,7 @@ public class AccessTransformerJarProcessor implements MinecraftJarProcessor mappingTreeWithSrg; - public TinyMappingsService(Path tinyMappings, Path tinyMappingsWithSrg) { + public TinyMappingsService(Path tinyMappings) { try { this.mappingTree = new MemoryMappingTree(); MappingReader.read(tinyMappings, mappingTree); } catch (IOException e) { throw new UncheckedIOException("Failed to read mappings", e); } - - this.mappingTreeWithSrg = Suppliers.memoize(() -> { - try { - MemoryMappingTree tree = new MemoryMappingTree(); - MappingReader.read(tinyMappingsWithSrg, tree); - return tree; - } catch (IOException e) { - throw new UncheckedIOException("Failed to read mappings", e); - } - }); } - public static synchronized TinyMappingsService create(SharedServiceManager serviceManager, Path tinyMappings, Path tinyMappingsWithSrg) { - return serviceManager.getOrCreateService("TinyMappingsService:" + tinyMappings.toAbsolutePath(), () -> new TinyMappingsService(tinyMappings, tinyMappingsWithSrg)); + public static synchronized TinyMappingsService create(SharedServiceManager serviceManager, Path tinyMappings) { + return serviceManager.getOrCreateService("TinyMappingsService:" + tinyMappings.toAbsolutePath(), () -> new TinyMappingsService(tinyMappings)); } public MemoryMappingTree getMappingTree() { return mappingTree; } - - public MemoryMappingTree getMappingTreeWithSrg() { - return mappingTreeWithSrg.get(); - } } diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java index 2f24f456..4713510e 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java @@ -201,8 +201,8 @@ public abstract class AbstractMappedMinecraftProvider entry : TinyRemapperHelper.JSR_TO_JETBRAINS.entrySet()) { mappings.getOrCreateClassMapping(entry.getKey()).setDeobfuscatedName(entry.getValue()); diff --git a/src/main/java/net/fabricmc/loom/task/service/LorenzMappingService.java b/src/main/java/net/fabricmc/loom/task/service/LorenzMappingService.java index 89a8b67a..c6ead9ff 100644 --- a/src/main/java/net/fabricmc/loom/task/service/LorenzMappingService.java +++ b/src/main/java/net/fabricmc/loom/task/service/LorenzMappingService.java @@ -32,7 +32,6 @@ import org.cadixdev.lorenz.MappingSet; import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; -import net.fabricmc.loom.configuration.providers.mappings.TinyMappingsService; import net.fabricmc.loom.util.service.SharedService; import net.fabricmc.loom.util.service.SharedServiceManager; import net.fabricmc.lorenztiny.TinyMappingsReader; @@ -47,8 +46,8 @@ public final class LorenzMappingService implements SharedService { public static synchronized LorenzMappingService create(SharedServiceManager sharedServiceManager, MappingConfiguration mappingConfiguration, MappingsNamespace from, MappingsNamespace to) { return sharedServiceManager.getOrCreateService(mappingConfiguration.getBuildServiceName("LorenzMappingService", from.toString(), to.toString()), () -> { - TinyMappingsService mappingsService = mappingConfiguration.getMappingsService(sharedServiceManager); - MemoryMappingTree m = (from == MappingsNamespace.SRG || to == MappingsNamespace.SRG) ? mappingsService.getMappingTreeWithSrg() : mappingsService.getMappingTree(); + boolean srg = (from == MappingsNamespace.SRG || to == MappingsNamespace.SRG); + MemoryMappingTree m = mappingConfiguration.getMappingsService(sharedServiceManager, srg).getMappingTree(); try { try (var reader = new TinyMappingsReader(m, from.toString(), to.toString())) { diff --git a/src/main/java/net/fabricmc/loom/util/TinyRemapperHelper.java b/src/main/java/net/fabricmc/loom/util/TinyRemapperHelper.java index 14efdd3b..6e2b32a6 100644 --- a/src/main/java/net/fabricmc/loom/util/TinyRemapperHelper.java +++ b/src/main/java/net/fabricmc/loom/util/TinyRemapperHelper.java @@ -27,25 +27,18 @@ package net.fabricmc.loom.util; import java.io.File; import java.io.IOException; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Consumer; import java.util.regex.Pattern; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import dev.architectury.tinyremapper.IMappingProvider; import dev.architectury.tinyremapper.TinyRemapper; -import org.apache.commons.lang3.mutable.Mutable; -import org.apache.commons.lang3.mutable.MutableObject; -import org.apache.commons.lang3.tuple.Triple; import org.gradle.api.Project; import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; -import net.fabricmc.loom.configuration.providers.mappings.TinyMappingsService; import net.fabricmc.loom.util.service.SharedServiceManager; import net.fabricmc.loom.util.srg.InnerClassRemapper; import net.fabricmc.mappingio.MappingReader; @@ -77,64 +70,44 @@ public final class TinyRemapperHelper { public static TinyRemapper getTinyRemapper(Project project, SharedServiceManager serviceManager, String fromM, String toM, boolean fixRecords, Consumer builderConsumer, Set fromClassNames) throws IOException { LoomGradleExtension extension = LoomGradleExtension.get(project); + boolean srg = (fromM.equals(MappingsNamespace.SRG.toString()) || toM.equals(MappingsNamespace.SRG.toString())) && extension.isForge(); + MemoryMappingTree mappingTree = extension.getMappingConfiguration().getMappingsService(serviceManager, srg).getMappingTree(); - TinyRemapper remapper = _getTinyRemapper(project, fixRecords, builderConsumer).getLeft(); - ImmutableSet.Builder providers = ImmutableSet.builder(); - TinyMappingsService mappingsService = extension.getMappingConfiguration().getMappingsService(serviceManager); - providers.add(TinyRemapperHelper.create((fromM.equals("srg") || toM.equals("srg")) && extension.isForge() ? mappingsService.getMappingTreeWithSrg() : mappingsService.getMappingTree(), fromM, toM, true)); - - if (extension.isForge()) { - if (!fromClassNames.isEmpty()) { - providers.add(InnerClassRemapper.of(fromClassNames, mappingsService.getMappingTreeWithSrg(), fromM, toM)); - } - } else { - providers.add(out -> TinyRemapperHelper.JSR_TO_JETBRAINS.forEach(out::acceptClass)); + if (fixRecords && !mappingTree.getSrcNamespace().equals(fromM)) { + throw new IllegalStateException("Mappings src namespace must match remap src namespace"); } - remapper.replaceMappings(providers.build()); - return remapper; - } - - public static Triple, List> _getTinyRemapper(Project project, boolean fixRecords, Consumer builderConsumer) throws IOException { - LoomGradleExtension extension = LoomGradleExtension.get(project); - Mutable mappings = new MutableObject<>(); - List postApply = new ArrayList<>(); + int intermediaryNsId = mappingTree.getNamespaceId(MappingsNamespace.INTERMEDIARY.toString()); TinyRemapper.Builder builder = TinyRemapper.newRemapper() - .renameInvalidLocals(true) .logUnknownInvokeDynamic(false) .ignoreConflicts(extension.isForge()) .cacheMappings(true) .threads(Runtime.getRuntime().availableProcessors()) .logger(project.getLogger()::lifecycle) - .rebuildSourceFilenames(true); + .withMappings(create(mappingTree, fromM, toM, true)) + .renameInvalidLocals(true) + .rebuildSourceFilenames(true) + .invalidLvNamePattern(MC_LV_PATTERN) + .inferNameFromSameLvIndex(true) + .extraPreApplyVisitor((cls, next) -> { + if (fixRecords && !cls.isRecord() && "java/lang/Record".equals(cls.getSuperName())) { + return new RecordComponentFixVisitor(next, mappingTree, intermediaryNsId); + } - builder.invalidLvNamePattern(MC_LV_PATTERN); - builder.inferNameFromSameLvIndex(true); - builder.extraPreApplyVisitor((cls, next) -> { - if (fixRecords && !cls.isRecord() && "java/lang/Record".equals(cls.getSuperName()) && mappings.getValue() != null) { - return new RecordComponentFixVisitor(next, mappings.getValue(), mappings.getValue().getNamespaceId(MappingsNamespace.INTERMEDIARY.toString())); + return next; + }); + + if (extension.isForge()) { + if (!fromClassNames.isEmpty()) { + builder.withMappings(InnerClassRemapper.of(fromClassNames, mappingTree, fromM, toM)); } - - return next; - }); - builder.extraPostApplyVisitor((trClass, classVisitor) -> { - for (TinyRemapper.ApplyVisitorProvider provider : postApply) { - classVisitor = provider.insertApplyVisitor(trClass, classVisitor); - } - - return classVisitor; - }); + } else { + builder.withMappings(out -> TinyRemapperHelper.JSR_TO_JETBRAINS.forEach(out::acceptClass)); + } builderConsumer.accept(builder); - return Triple.of(builder.build(), mappings, postApply); - } - - public static Triple, List> getTinyRemapper(Project project, boolean fixRecords, Consumer builderConsumer) throws IOException { - Triple, List> remapper = _getTinyRemapper(project, fixRecords, builderConsumer); - remapper.getLeft().readClassPath(getMinecraftDependencies(project)); - remapper.getLeft().prepareClasses(); - return remapper; + return builder.build(); } public static Path[] getMinecraftDependencies(Project project) {