diff options
author | Jonas Herzig <jonas@spark-squared.com> | 2022-01-11 16:15:26 +0100 |
---|---|---|
committer | Jonas Herzig <jonas@spark-squared.com> | 2022-01-11 16:15:26 +0100 |
commit | 6a2a900535f4c3452000ff8a12a384146da27ccc (patch) | |
tree | 97fd5457c0eb820832b50d5d3669833cc581653f /src/main/java | |
parent | c009507d447319d7e702a244e6a0ff33f08e7192 (diff) | |
download | architectury-loom-6a2a900535f4c3452000ff8a12a384146da27ccc.tar.gz architectury-loom-6a2a900535f4c3452000ff8a12a384146da27ccc.tar.bz2 architectury-loom-6a2a900535f4c3452000ff8a12a384146da27ccc.zip |
Do not depend on lorenz impl classes to write identity mappings
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/net/fabricmc/loom/util/srg/SrgNamedWriter.java | 48 |
1 files changed, 19 insertions, 29 deletions
diff --git a/src/main/java/net/fabricmc/loom/util/srg/SrgNamedWriter.java b/src/main/java/net/fabricmc/loom/util/srg/SrgNamedWriter.java index d7653297..cf795448 100644 --- a/src/main/java/net/fabricmc/loom/util/srg/SrgNamedWriter.java +++ b/src/main/java/net/fabricmc/loom/util/srg/SrgNamedWriter.java @@ -25,17 +25,12 @@ package net.fabricmc.loom.util.srg; import java.io.IOException; +import java.io.Writer; import java.nio.file.Files; import java.nio.file.Path; import org.cadixdev.lorenz.MappingSet; -import org.cadixdev.lorenz.impl.MappingSetModelFactoryImpl; -import org.cadixdev.lorenz.impl.model.InnerClassMappingImpl; -import org.cadixdev.lorenz.impl.model.TopLevelClassMappingImpl; import org.cadixdev.lorenz.io.srg.SrgWriter; -import org.cadixdev.lorenz.model.ClassMapping; -import org.cadixdev.lorenz.model.InnerClassMapping; -import org.cadixdev.lorenz.model.TopLevelClassMapping; import net.fabricmc.lorenztiny.TinyMappingsReader; import net.fabricmc.mappingio.tree.MappingTree; @@ -44,40 +39,35 @@ public class SrgNamedWriter { public static void writeTo(Path srgFile, MappingTree mappings, String from, String to, boolean includeIdentityMappings) throws IOException { Files.deleteIfExists(srgFile); - try (SrgWriter writer = new SrgWriter(Files.newBufferedWriter(srgFile))) { + try (SrgWriter writer = newSrgWriter(Files.newBufferedWriter(srgFile), includeIdentityMappings)) { try (TinyMappingsReader reader = new TinyMappingsReader(mappings, from, to)) { - MappingSet mappingSet = includeIdentityMappings - ? MappingSet.create(new ClassesAlwaysHaveDeobfNameFactory()) - : MappingSet.create(); - writer.write(reader.read(mappingSet)); + writer.write(reader.read()); } } } + private static SrgWriter newSrgWriter(Writer writer, boolean includeIdentityMappings) { + return includeIdentityMappings ? new SrgWithIdentitiesWriter(writer) : new SrgWriter(writer); + } + /** * Legacy Forge's FMLDeobfuscatingRemapper requires class mappings, even if they are identity maps, but such - * mappings are filtered out by the SrgWriter. To get around that, we create a custom mapping set which always - * claims to have deobfuscated names set for classes. + * mappings are filtered out by the SrgWriter. To get around that, this SrgWriter manually emits identity mappings + * before emitting all regular mappings. */ - private static class ClassesAlwaysHaveDeobfNameFactory extends MappingSetModelFactoryImpl { - @Override - public TopLevelClassMapping createTopLevelClassMapping(MappingSet parent, String obfuscatedName, String deobfuscatedName) { - return new TopLevelClassMappingImpl(parent, obfuscatedName, deobfuscatedName) { - @Override - public boolean hasDeobfuscatedName() { - return true; - } - }; + private static class SrgWithIdentitiesWriter extends SrgWriter { + private SrgWithIdentitiesWriter(Writer writer) { + super(writer); } @Override - public InnerClassMapping createInnerClassMapping(ClassMapping parent, String obfuscatedName, String deobfuscatedName) { - return new InnerClassMappingImpl(parent, obfuscatedName, deobfuscatedName) { - @Override - public boolean hasDeobfuscatedName() { - return true; - } - }; + public void write(MappingSet mappings) { + mappings.getTopLevelClassMappings().stream() + .filter(cls -> !cls.hasDeobfuscatedName()) + .sorted(getConfig().getClassMappingComparator()) + .forEach(cls -> writer.format("CL: %s %s%n", cls.getFullObfuscatedName(), cls.getFullDeobfuscatedName())); + + super.write(mappings); } } } |