From 76aed83ecd26751094a8ebdfe698b95e3233aae4 Mon Sep 17 00:00:00 2001 From: Daniel Chýlek Date: Thu, 8 Jul 2021 16:28:39 +0200 Subject: Add --single-class-tree argument that puts all classes into deobf panel & hides obf panel (#406) * Add --single-class-tree argument that puts all classes into deobf panel & hides obf panel Parchment uses a jar with already remapped classes, but Enigma puts them into panel with obf classes which sorts classes by length. This option puts all classes into the deobf panel, and completely hides the obf panel. * Address comments * Comment begone--- .../src/main/java/cuchaz/enigma/gui/Gui.java | 21 ++++++++++++++++----- .../main/java/cuchaz/enigma/gui/GuiController.java | 9 ++++++++- .../src/main/java/cuchaz/enigma/gui/Main.java | 6 ++++++ .../java/cuchaz/enigma/gui/panels/DeobfPanel.java | 2 +- enigma/src/main/resources/lang/en_us.json | 1 + 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java index 30bf4d3e..a657d171 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java @@ -75,6 +75,7 @@ public class Gui implements LanguageChangeListener { private ConnectionState connectionState; private boolean isJarOpen; private final Set editableTypes; + private boolean singleClassTree; public JFileChooser jarFileChooser; public JFileChooser tinyMappingsFileChooser; @@ -424,7 +425,19 @@ public class Gui implements LanguageChangeListener { public GuiController getController() { return this.controller; } - + + public void setSingleClassTree(boolean singleClassTree) { + this.singleClassTree = singleClassTree; + this.classesPanel.removeAll(); + this.classesPanel.add(isSingleClassTree() ? deobfPanel : splitClasses); + getController().refreshClasses(); + retranslateUi(); + } + + public boolean isSingleClassTree() { + return singleClassTree; + } + public void onStartOpenJar() { this.classesPanel.removeAll(); redraw(); @@ -434,7 +447,7 @@ public class Gui implements LanguageChangeListener { // update gui this.frame.setTitle(Enigma.NAME + " - " + jarName); this.classesPanel.removeAll(); - this.classesPanel.add(splitClasses); + this.classesPanel.add(isSingleClassTree() ? deobfPanel : splitClasses); closeAllEditorTabs(); // update menu @@ -816,8 +829,6 @@ public class Gui implements LanguageChangeListener { } else if (data instanceof ClassEntry) { // class rename - // assume this is deobf since the obf tree doesn't allow renaming in - // the first place // TODO optimize reverse class lookup, although it looks like it's // fast enough for now EntryRemapper mapper = this.controller.project.getMapper(); @@ -826,7 +837,7 @@ public class Gui implements LanguageChangeListener { .filter(e -> e instanceof ClassEntry) .map(e -> (ClassEntry) e) .filter(e -> mapper.deobfuscate(e).equals(deobf)) - .findAny().get(); + .findAny().orElse(deobf); this.controller.rename(vc, new EntryReference<>(obf, obf.getFullName()), ((ClassEntry) data).getFullName(), false); if (!vc.canProceed()) return; 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 e28271e7..2b75655a 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java @@ -359,7 +359,9 @@ public class GuiController implements ClientPacketHandler { openReference(reference); } - private void refreshClasses() { + public void refreshClasses() { + if (project == null) return; + List obfClasses = Lists.newArrayList(); List deobfClasses = Lists.newArrayList(); this.addSeparatedClasses(obfClasses, deobfClasses); @@ -375,6 +377,11 @@ public class GuiController implements ClientPacketHandler { .filter(entry -> !entry.isInnerClass()); visibleClasses.forEach(entry -> { + if (gui.isSingleClassTree()) { + deobfClasses.add(entry); + return; + } + ClassEntry deobfEntry = mapper.deobfuscate(entry); List obfService = enigma.getServices().get(ObfuscationTestService.TYPE); diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java index cd968fce..f6a03f54 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java @@ -60,6 +60,8 @@ public class Main { parser.acceptsAll(List.of("edit-javadocs", "d"), "Enable editing Javadocs"); parser.acceptsAll(List.of("no-edit-javadocs", "D"), "Disable editing Javadocs"); + parser.accepts("single-class-tree", "Unify the deobfuscated and obfuscated class panels"); + parser.accepts("help", "Displays help information"); try { @@ -107,6 +109,10 @@ public class Main { Gui gui = new Gui(parsedProfile, editables); GuiController controller = gui.getController(); + + if (options.has("single-class-tree")) { + gui.setSingleClassTree(true); + } if (options.has(jar)) { Path jarPath = options.valueOf(jar); diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/DeobfPanel.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/DeobfPanel.java index 3e357cbd..5b7882b0 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/DeobfPanel.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/DeobfPanel.java @@ -32,7 +32,7 @@ public class DeobfPanel extends JPanel { } public void retranslateUi() { - this.title.setText(I18n.translate("info_panel.classes.deobfuscated")); + this.title.setText(I18n.translate(gui.isSingleClassTree() ? "info_panel.classes" : "info_panel.classes.deobfuscated")); } } diff --git a/enigma/src/main/resources/lang/en_us.json b/enigma/src/main/resources/lang/en_us.json index b3085be0..4488bb2e 100644 --- a/enigma/src/main/resources/lang/en_us.json +++ b/enigma/src/main/resources/lang/en_us.json @@ -92,6 +92,7 @@ "editor.decompile_error": "An error was encountered while decompiling.", "editor.remap_error": "An error was encountered while remapping.", + "info_panel.classes": "Classes", "info_panel.classes.obfuscated": "Obfuscated Classes", "info_panel.classes.deobfuscated": "De-obfuscated Classes", "info_panel.identifier": "Identifier Info", -- cgit v1.2.3