aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorJonas Herzig <jonas@spark-squared.com>2022-01-11 16:15:26 +0100
committerJonas Herzig <jonas@spark-squared.com>2022-01-11 16:15:26 +0100
commit6a2a900535f4c3452000ff8a12a384146da27ccc (patch)
tree97fd5457c0eb820832b50d5d3669833cc581653f /src/main/java
parentc009507d447319d7e702a244e6a0ff33f08e7192 (diff)
downloadarchitectury-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.java48
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);
}
}
}