From cc4154d610adf7aee7816279171a50fe074aa675 Mon Sep 17 00:00:00 2001 From: NebelNidas Date: Mon, 10 Oct 2022 13:25:02 +0200 Subject: Add progress listener to Mapping-IO conversion; deduplicate lang files --- .../main/java/cuchaz/enigma/gui/GuiController.java | 16 +++++++++++++-- .../mapping/serde/MappingIoConverter.java | 24 ++++++++++++++++------ .../mapping/serde/enigma/EnigmaMappingsReader.java | 8 ++++---- .../mapping/serde/enigma/EnigmaMappingsWriter.java | 6 ++---- .../mapping/serde/srg/SrgMappingsWriter.java | 4 ++-- .../mapping/serde/tiny/TinyMappingsReader.java | 2 +- .../mapping/serde/tinyv2/TinyV2Reader.java | 2 +- enigma/src/main/resources/lang/en_us.json | 16 +++++++-------- enigma/src/main/resources/lang/fr_fr.json | 14 +++++-------- enigma/src/main/resources/lang/ja_jp.json | 13 ++++-------- enigma/src/main/resources/lang/zh_cn.json | 13 ++++-------- 11 files changed, 62 insertions(+), 56 deletions(-) diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java index 73472ca..5b04f3c 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java @@ -157,9 +157,18 @@ public class GuiController implements ClientPacketHandler { EntryTree mappings; if (useMappingIo) { + String loadingMessage; + + if (format.getMappingIoCounterpart().hasSingleFile()) { + loadingMessage = I18n.translate("progress.mappings.loading_file"); + } else { + loadingMessage = I18n.translate("progress.mappings.loading_directory"); + } + + progress.init(1, loadingMessage); MemoryMappingTree mappingTree = new MemoryMappingTree(); MappingReader.read(path, format.getMappingIoCounterpart(), mappingTree); - mappings = MappingIoConverter.fromMappingIo(mappingTree); + mappings = MappingIoConverter.fromMappingIo(mappingTree, progress); } else { mappings = format.read(path, progress, saveParameters); } @@ -219,10 +228,13 @@ public class GuiController implements ClientPacketHandler { loadedMappingPath = path; if (useMappingIo) { - MemoryMappingTree mappingTree = MappingIoConverter.toMappingIo(mapper.getObfToDeobf()); + MemoryMappingTree mappingTree = MappingIoConverter.toMappingIo(mapper.getObfToDeobf(), progress); + + progress.init(1, I18n.translate("progress.mappings.writing")); MappingWriter writer = MappingWriter.create(path, format.getMappingIoCounterpart()); mappingTree.accept(writer); writer.close(); + progress.step(1, I18n.translate("progress.done")); } else if (saveAll) { format.write(mapper.getObfToDeobf(), path, progress, saveParameters); } else { diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingIoConverter.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingIoConverter.java index d3fd341..171f252 100644 --- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingIoConverter.java +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingIoConverter.java @@ -3,6 +3,7 @@ package cuchaz.enigma.translation.mapping.serde; import java.util.Deque; import java.util.LinkedList; import java.util.List; +import java.util.stream.StreamSupport; import net.fabricmc.mappingio.MappedElementKind; import net.fabricmc.mappingio.tree.MemoryMappingTree; @@ -11,6 +12,7 @@ import net.fabricmc.mappingio.tree.MappingTree.FieldMapping; import net.fabricmc.mappingio.tree.MappingTree.MethodArgMapping; import net.fabricmc.mappingio.tree.MappingTree.MethodMapping; +import cuchaz.enigma.ProgressListener; import cuchaz.enigma.translation.mapping.EntryMap; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.tree.EntryTree; @@ -23,16 +25,23 @@ import cuchaz.enigma.translation.representation.entry.Entry; import cuchaz.enigma.translation.representation.entry.FieldEntry; import cuchaz.enigma.translation.representation.entry.LocalVariableEntry; import cuchaz.enigma.translation.representation.entry.MethodEntry; +import cuchaz.enigma.utils.I18n; public class MappingIoConverter { - public static MemoryMappingTree toMappingIo(EntryTree mappings) { + public static MemoryMappingTree toMappingIo(EntryTree mappings, ProgressListener progress) { + List> classes = StreamSupport.stream(mappings.spliterator(), false) + .filter(node -> node.getEntry() instanceof ClassEntry) + .toList(); + + progress.init(classes.size(), I18n.translate("progress.mappings.converting.to_mappingio")); + int steps = 0; + MemoryMappingTree mappingTree = new MemoryMappingTree(); mappingTree.visitNamespaces("intermediary", List.of("named")); - for (EntryTreeNode node : mappings) { - if (node.getEntry() instanceof ClassEntry) { - writeClass(node, mappings, mappingTree); - } + for (EntryTreeNode classNode : classes) { + progress.step(steps++, classNode.getEntry().getFullName()); + writeClass(classNode, mappings, mappingTree); } mappingTree.visitEnd(); @@ -131,10 +140,13 @@ public class MappingIoConverter { mappingTree.visitComment(MappedElementKind.METHOD_ARG, methodArgMapping.javadoc()); } - public static EntryTree fromMappingIo(MemoryMappingTree mappingTree) { + public static EntryTree fromMappingIo(MemoryMappingTree mappingTree, ProgressListener progress) { EntryTree dstMappingTree = new HashEntryTree<>(); + progress.init(mappingTree.getClasses().size(), I18n.translate("progress.mappings.converting.from_mappingio")); + int steps = 0; for (ClassMapping classMapping : mappingTree.getClasses()) { + progress.step(steps++, classMapping.getDstName(0) != null ? classMapping.getDstName(0) : classMapping.getSrcName()); readClass(classMapping, dstMappingTree); } diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java index 5461342..d5570e9 100644 --- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsReader.java @@ -40,12 +40,12 @@ public enum EnigmaMappingsReader implements MappingsReader { FILE { @Override public EntryTree read(Path path, ProgressListener progress, MappingSaveParameters saveParameters) throws IOException, MappingParseException { - progress.init(1, I18n.translate("progress.mappings.enigma_file.loading")); + progress.init(1, I18n.translate("progress.mappings.loading_file")); EntryTree mappings = new HashEntryTree<>(); readFile(path, mappings); - progress.step(1, I18n.translate("progress.mappings.enigma_file.done")); + progress.step(1, I18n.translate("progress.done")); return mappings; } @@ -60,7 +60,7 @@ public enum EnigmaMappingsReader implements MappingsReader { EntryTree mappings = new HashEntryTree<>(); List files = Files.walk(root).filter(f -> !Files.isDirectory(f)).filter(f -> f.toString().endsWith(".mapping")).toList(); - progress.init(files.size(), I18n.translate("progress.mappings.enigma_directory.loading")); + progress.init(files.size(), I18n.translate("progress.mappings.loading_directory")); int step = 0; for (Path file : files) { @@ -102,7 +102,7 @@ public enum EnigmaMappingsReader implements MappingsReader { throw new IllegalArgumentException("No paths to read mappings from"); } - progress.init(paths.length, I18n.translate("progress.mappings.enigma_directory.loading")); + progress.init(paths.length, I18n.translate("progress.mappings.loading_directory")); int step = 0; for (Path file : paths) { diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java index df1af91..73f29a1 100644 --- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/enigma/EnigmaMappingsWriter.java @@ -58,7 +58,7 @@ public enum EnigmaMappingsWriter implements MappingsWriter { public void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progress, MappingSaveParameters saveParameters) { Collection classes = mappings.getRootNodes().filter(entry -> entry.getEntry() instanceof ClassEntry).map(entry -> (ClassEntry) entry.getEntry()).toList(); - progress.init(classes.size(), I18n.translate("progress.mappings.enigma_file.writing")); + progress.init(classes.size(), I18n.translate("progress.mappings.writing")); int steps = 0; @@ -78,11 +78,9 @@ public enum EnigmaMappingsWriter implements MappingsWriter { Collection changedClasses = delta.getChangedRoots().filter(entry -> entry instanceof ClassEntry).map(entry -> (ClassEntry) entry).toList(); applyDeletions(path, changedClasses, mappings, delta.getBaseMappings(), saveParameters.getFileNameFormat()); - changedClasses = changedClasses.stream().filter(entry -> !isClassEmpty(mappings, entry)).collect(Collectors.toList()); - progress.init(changedClasses.size(), I18n.translate("progress.mappings.enigma_directory.writing")); - + progress.init(changedClasses.size(), I18n.translate("progress.mappings.writing")); AtomicInteger steps = new AtomicInteger(); Translator translator = new MappingTranslator(mappings, VoidEntryResolver.INSTANCE); diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java index 4621efe..5addcad 100644 --- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/srg/SrgMappingsWriter.java @@ -45,7 +45,7 @@ public enum SrgMappingsWriter implements MappingsWriter { List methodLines = new ArrayList<>(); List> rootEntries = Lists.newArrayList(mappings).stream().map(EntryTreeNode::getEntry).toList(); - progress.init(rootEntries.size(), I18n.translate("progress.mappings.srg_file.generating")); + progress.init(rootEntries.size(), I18n.translate("progress.mappings.converting")); int steps = 0; @@ -54,7 +54,7 @@ public enum SrgMappingsWriter implements MappingsWriter { writeEntry(classLines, fieldLines, methodLines, mappings, entry); } - progress.init(3, I18n.translate("progress.mappings.srg_file.writing")); + progress.init(3, I18n.translate("progress.mappings.writing")); try (PrintWriter writer = new LfPrintWriter(Files.newBufferedWriter(path))) { progress.step(0, I18n.translate("type.classes")); diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsReader.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsReader.java index 534a567..1575f46 100644 --- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsReader.java +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tiny/TinyMappingsReader.java @@ -35,7 +35,7 @@ public enum TinyMappingsReader implements MappingsReader { EntryTree mappings = new HashEntryTree<>(); lines.remove(0); - progress.init(lines.size(), I18n.translate("progress.mappings.tiny_file.loading")); + progress.init(lines.size(), I18n.translate("progress.mappings.loading_file")); for (int lineNumber = 0; lineNumber < lines.size(); lineNumber++) { progress.step(lineNumber, ""); diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Reader.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Reader.java index eecbc35..28185f5 100644 --- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Reader.java +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/tinyv2/TinyV2Reader.java @@ -46,7 +46,7 @@ public final class TinyV2Reader implements MappingsReader { private EntryTree read(Path path, List lines, ProgressListener progress) throws MappingParseException { EntryTree mappings = new HashEntryTree<>(); - progress.init(lines.size(), "progress.mappings.tiny_v2.loading"); + progress.init(lines.size(), "progress.mappings.loading_file"); BitSet state = new BitSet(STATE_SIZE); @SuppressWarnings({"unchecked", "rawtypes"}) MappingPair, RawEntryMapping>[] holds = new MappingPair[STATE_SIZE]; diff --git a/enigma/src/main/resources/lang/en_us.json b/enigma/src/main/resources/lang/en_us.json index 421620e..2a3cfb2 100644 --- a/enigma/src/main/resources/lang/en_us.json +++ b/enigma/src/main/resources/lang/en_us.json @@ -137,6 +137,7 @@ "log_panel.messages": "Messages", "log_panel.users": "Users", + "progress.done": "Done!", "progress.operation": "%s - Operation in progress", "progress.jar.indexing": "Indexing jar", "progress.jar.indexing.entries": "Entries...", @@ -147,15 +148,12 @@ "progress.sources.writing": "Writing sources...", "progress.classes.deobfuscating": "Deobfuscating classes...", "progress.classes.decompiling": "Decompiling classes...", - "progress.mappings.enigma_file.loading": "Loading mapping file", - "progress.mappings.enigma_file.done": "Done!", - "progress.mappings.enigma_file.writing": "Writing classes", - "progress.mappings.enigma_directory.loading": "Loading mapping files", - "progress.mappings.enigma_directory.writing": "Writing classes", - "progress.mappings.tiny_file.loading": "Loading mapping file", - "progress.mappings.tiny_v2.loading": "Loading mapping file", - "progress.mappings.srg_file.generating": "Generating mappings", - "progress.mappings.srg_file.writing": "Writing mappings", + "progress.mappings.loading_file": "Loading mapping file", + "progress.mappings.loading_directory": "Loading mapping files", + "progress.mappings.writing": "Writing classes", + "progress.mappings.converting": "Converting mappings", + "progress.mappings.converting.to_mappingio": "Converting to Mapping-IO", + "progress.mappings.converting.from_mappingio": "Converting from Mapping-IO", "progress.stats": "Generating stats", "progress.stats.data": "Generating data", diff --git a/enigma/src/main/resources/lang/fr_fr.json b/enigma/src/main/resources/lang/fr_fr.json index d3d0c29..520dd32 100644 --- a/enigma/src/main/resources/lang/fr_fr.json +++ b/enigma/src/main/resources/lang/fr_fr.json @@ -131,6 +131,7 @@ "log_panel.messages": "Messages", "log_panel.users": "Utilisateurs", + "progress.done": "Terminé !", "progress.operation": "%s - Opération en cours", "progress.jar.indexing": "Indexation du jar", "progress.jar.indexing.entries": "Entrées...", @@ -141,15 +142,10 @@ "progress.sources.writing": "Écriture des sources...", "progress.classes.deobfuscating": "Déobfuscation des classes...", "progress.classes.decompiling": "Décompilation des classes...", - "progress.mappings.enigma_file.loading": "Chargement du fichier de mappings", - "progress.mappings.enigma_file.done": "Terminé !", - "progress.mappings.enigma_file.writing": "Écriture des classes", - "progress.mappings.enigma_directory.loading": "Chargement des fichiers de mappings", - "progress.mappings.enigma_directory.writing": "Écriture des classes", - "progress.mappings.tiny_file.loading": "Chargement du fichier de mappings", - "progress.mappings.tiny_v2.loading": "Chargement du fichier de mappings", - "progress.mappings.srg_file.generating": "Génération des mappings", - "progress.mappings.srg_file.writing": "Écriture des mappings", + "progress.mappings.loading_file": "Chargement du fichier de mappings", + "progress.mappings.loading_directory": "Chargement des fichiers de mappings", + "progress.mappings.writing": "Écriture des mappings", + "progress.mappings.converting": "Conversion des mappings", "progress.stats": "Génération des statistiques", "progress.stats.data": "Génération des données", diff --git a/enigma/src/main/resources/lang/ja_jp.json b/enigma/src/main/resources/lang/ja_jp.json index 09e7ee0..b4d5199 100644 --- a/enigma/src/main/resources/lang/ja_jp.json +++ b/enigma/src/main/resources/lang/ja_jp.json @@ -132,6 +132,7 @@ "log_panel.messages": "メッセージ", "log_panel.users": "ユーザー", + "progress.done": "完了しました!", "progress.operation": "%s - 処理中", "progress.jar.indexing": "jarのインデックス中", "progress.jar.indexing.entries": "エントリー...", @@ -142,15 +143,9 @@ "progress.sources.writing": "ソースコードを書き出し中...", "progress.classes.deobfuscating": "クラスを難読化解除中...", "progress.classes.decompiling": "クラスのデコンパイル中...", - "progress.mappings.enigma_file.loading": "マッピングファイルをロード", - "progress.mappings.enigma_file.done": "完了しました!", - "progress.mappings.enigma_file.writing": "クラスの書き出し中", - "progress.mappings.enigma_directory.loading": "マッピングファイルの読込中", - "progress.mappings.enigma_directory.writing": "クラスの書き出し中", - "progress.mappings.tiny_file.loading": "マッピングファイルの読込中", - "progress.mappings.tiny_v2.loading": "マッピングファイルの読込中", - "progress.mappings.srg_file.generating": "マッピングの作成中", - "progress.mappings.srg_file.writing": "マッピングの書き出し中", + "progress.mappings.loading_file": "マッピングファイルをロード", + "progress.mappings.loading_directory": "マッピングファイルの読込中", + "progress.mappings.writing": "マッピングの書き出し中", "progress.stats": "統計情報を作成中", "progress.stats.data": "データの作成中", diff --git a/enigma/src/main/resources/lang/zh_cn.json b/enigma/src/main/resources/lang/zh_cn.json index fe806fb..dbc6dd3 100644 --- a/enigma/src/main/resources/lang/zh_cn.json +++ b/enigma/src/main/resources/lang/zh_cn.json @@ -75,6 +75,7 @@ "info_panel.tree.implementations": "实现", "info_panel.tree.calls": "调用图", + "progress.done": "完成!", "progress.operation": "%s - 进行中", "progress.jar.indexing": "索引 Jar", "progress.jar.indexing.entries": "条目...", @@ -85,15 +86,9 @@ "progress.sources.writing": "写出源码中...", "progress.classes.deobfuscating": "反混淆类中...", "progress.classes.decompiling": "反编译类中...", - "progress.mappings.enigma_file.loading": "加载映射文件", - "progress.mappings.enigma_file.done": "完成!", - "progress.mappings.enigma_file.writing": "写入类", - "progress.mappings.enigma_directory.loading": "加载映射文件", - "progress.mappings.enigma_directory.writing": "写入类", - "progress.mappings.tiny_file.loading": "加载映射文件", - "progress.mappings.tiny_v2.loading": "加载映射文件", - "progress.mappings.srg_file.generating": "生成映射", - "progress.mappings.srg_file.writing": "写出映射", + "progress.mappings.loading_file": "加载映射文件", + "progress.mappings.loading_directory": "加载映射文件", + "progress.mappings.writing": "写出映射", "progress.stats": "生成统计范围", "progress.stats.data": "生成数据", -- cgit v1.2.3