diff options
| author | 2021-07-08 16:28:39 +0200 | |
|---|---|---|
| committer | 2021-07-08 16:28:39 +0200 | |
| commit | 76aed83ecd26751094a8ebdfe698b95e3233aae4 (patch) | |
| tree | 97a671538a064d6993a208298c3433f444e1dd8f | |
| parent | Bump version (diff) | |
| download | enigma-76aed83ecd26751094a8ebdfe698b95e3233aae4.tar.gz enigma-76aed83ecd26751094a8ebdfe698b95e3233aae4.tar.xz enigma-76aed83ecd26751094a8ebdfe698b95e3233aae4.zip | |
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
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 { | |||
| 75 | private ConnectionState connectionState; | 75 | private ConnectionState connectionState; |
| 76 | private boolean isJarOpen; | 76 | private boolean isJarOpen; |
| 77 | private final Set<EditableType> editableTypes; | 77 | private final Set<EditableType> editableTypes; |
| 78 | private boolean singleClassTree; | ||
| 78 | 79 | ||
| 79 | public JFileChooser jarFileChooser; | 80 | public JFileChooser jarFileChooser; |
| 80 | public JFileChooser tinyMappingsFileChooser; | 81 | public JFileChooser tinyMappingsFileChooser; |
| @@ -424,7 +425,19 @@ public class Gui implements LanguageChangeListener { | |||
| 424 | public GuiController getController() { | 425 | public GuiController getController() { |
| 425 | return this.controller; | 426 | return this.controller; |
| 426 | } | 427 | } |
| 427 | 428 | ||
| 429 | public void setSingleClassTree(boolean singleClassTree) { | ||
| 430 | this.singleClassTree = singleClassTree; | ||
| 431 | this.classesPanel.removeAll(); | ||
| 432 | this.classesPanel.add(isSingleClassTree() ? deobfPanel : splitClasses); | ||
| 433 | getController().refreshClasses(); | ||
| 434 | retranslateUi(); | ||
| 435 | } | ||
| 436 | |||
| 437 | public boolean isSingleClassTree() { | ||
| 438 | return singleClassTree; | ||
| 439 | } | ||
| 440 | |||
| 428 | public void onStartOpenJar() { | 441 | public void onStartOpenJar() { |
| 429 | this.classesPanel.removeAll(); | 442 | this.classesPanel.removeAll(); |
| 430 | redraw(); | 443 | redraw(); |
| @@ -434,7 +447,7 @@ public class Gui implements LanguageChangeListener { | |||
| 434 | // update gui | 447 | // update gui |
| 435 | this.frame.setTitle(Enigma.NAME + " - " + jarName); | 448 | this.frame.setTitle(Enigma.NAME + " - " + jarName); |
| 436 | this.classesPanel.removeAll(); | 449 | this.classesPanel.removeAll(); |
| 437 | this.classesPanel.add(splitClasses); | 450 | this.classesPanel.add(isSingleClassTree() ? deobfPanel : splitClasses); |
| 438 | closeAllEditorTabs(); | 451 | closeAllEditorTabs(); |
| 439 | 452 | ||
| 440 | // update menu | 453 | // update menu |
| @@ -816,8 +829,6 @@ public class Gui implements LanguageChangeListener { | |||
| 816 | } else if (data instanceof ClassEntry) { | 829 | } else if (data instanceof ClassEntry) { |
| 817 | // class rename | 830 | // class rename |
| 818 | 831 | ||
| 819 | // assume this is deobf since the obf tree doesn't allow renaming in | ||
| 820 | // the first place | ||
| 821 | // TODO optimize reverse class lookup, although it looks like it's | 832 | // TODO optimize reverse class lookup, although it looks like it's |
| 822 | // fast enough for now | 833 | // fast enough for now |
| 823 | EntryRemapper mapper = this.controller.project.getMapper(); | 834 | EntryRemapper mapper = this.controller.project.getMapper(); |
| @@ -826,7 +837,7 @@ public class Gui implements LanguageChangeListener { | |||
| 826 | .filter(e -> e instanceof ClassEntry) | 837 | .filter(e -> e instanceof ClassEntry) |
| 827 | .map(e -> (ClassEntry) e) | 838 | .map(e -> (ClassEntry) e) |
| 828 | .filter(e -> mapper.deobfuscate(e).equals(deobf)) | 839 | .filter(e -> mapper.deobfuscate(e).equals(deobf)) |
| 829 | .findAny().get(); | 840 | .findAny().orElse(deobf); |
| 830 | 841 | ||
| 831 | this.controller.rename(vc, new EntryReference<>(obf, obf.getFullName()), ((ClassEntry) data).getFullName(), false); | 842 | this.controller.rename(vc, new EntryReference<>(obf, obf.getFullName()), ((ClassEntry) data).getFullName(), false); |
| 832 | if (!vc.canProceed()) return; | 843 | 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 { | |||
| 359 | openReference(reference); | 359 | openReference(reference); |
| 360 | } | 360 | } |
| 361 | 361 | ||
| 362 | private void refreshClasses() { | 362 | public void refreshClasses() { |
| 363 | if (project == null) return; | ||
| 364 | |||
| 363 | List<ClassEntry> obfClasses = Lists.newArrayList(); | 365 | List<ClassEntry> obfClasses = Lists.newArrayList(); |
| 364 | List<ClassEntry> deobfClasses = Lists.newArrayList(); | 366 | List<ClassEntry> deobfClasses = Lists.newArrayList(); |
| 365 | this.addSeparatedClasses(obfClasses, deobfClasses); | 367 | this.addSeparatedClasses(obfClasses, deobfClasses); |
| @@ -375,6 +377,11 @@ public class GuiController implements ClientPacketHandler { | |||
| 375 | .filter(entry -> !entry.isInnerClass()); | 377 | .filter(entry -> !entry.isInnerClass()); |
| 376 | 378 | ||
| 377 | visibleClasses.forEach(entry -> { | 379 | visibleClasses.forEach(entry -> { |
| 380 | if (gui.isSingleClassTree()) { | ||
| 381 | deobfClasses.add(entry); | ||
| 382 | return; | ||
| 383 | } | ||
| 384 | |||
| 378 | ClassEntry deobfEntry = mapper.deobfuscate(entry); | 385 | ClassEntry deobfEntry = mapper.deobfuscate(entry); |
| 379 | 386 | ||
| 380 | List<ObfuscationTestService> obfService = enigma.getServices().get(ObfuscationTestService.TYPE); | 387 | List<ObfuscationTestService> 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 { | |||
| 60 | parser.acceptsAll(List.of("edit-javadocs", "d"), "Enable editing Javadocs"); | 60 | parser.acceptsAll(List.of("edit-javadocs", "d"), "Enable editing Javadocs"); |
| 61 | parser.acceptsAll(List.of("no-edit-javadocs", "D"), "Disable editing Javadocs"); | 61 | parser.acceptsAll(List.of("no-edit-javadocs", "D"), "Disable editing Javadocs"); |
| 62 | 62 | ||
| 63 | parser.accepts("single-class-tree", "Unify the deobfuscated and obfuscated class panels"); | ||
| 64 | |||
| 63 | parser.accepts("help", "Displays help information"); | 65 | parser.accepts("help", "Displays help information"); |
| 64 | 66 | ||
| 65 | try { | 67 | try { |
| @@ -107,6 +109,10 @@ public class Main { | |||
| 107 | 109 | ||
| 108 | Gui gui = new Gui(parsedProfile, editables); | 110 | Gui gui = new Gui(parsedProfile, editables); |
| 109 | GuiController controller = gui.getController(); | 111 | GuiController controller = gui.getController(); |
| 112 | |||
| 113 | if (options.has("single-class-tree")) { | ||
| 114 | gui.setSingleClassTree(true); | ||
| 115 | } | ||
| 110 | 116 | ||
| 111 | if (options.has(jar)) { | 117 | if (options.has(jar)) { |
| 112 | Path jarPath = options.valueOf(jar); | 118 | 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 { | |||
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | public void retranslateUi() { | 34 | public void retranslateUi() { |
| 35 | this.title.setText(I18n.translate("info_panel.classes.deobfuscated")); | 35 | this.title.setText(I18n.translate(gui.isSingleClassTree() ? "info_panel.classes" : "info_panel.classes.deobfuscated")); |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | } | 38 | } |
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 @@ | |||
| 92 | "editor.decompile_error": "An error was encountered while decompiling.", | 92 | "editor.decompile_error": "An error was encountered while decompiling.", |
| 93 | "editor.remap_error": "An error was encountered while remapping.", | 93 | "editor.remap_error": "An error was encountered while remapping.", |
| 94 | 94 | ||
| 95 | "info_panel.classes": "Classes", | ||
| 95 | "info_panel.classes.obfuscated": "Obfuscated Classes", | 96 | "info_panel.classes.obfuscated": "Obfuscated Classes", |
| 96 | "info_panel.classes.deobfuscated": "De-obfuscated Classes", | 97 | "info_panel.classes.deobfuscated": "De-obfuscated Classes", |
| 97 | "info_panel.identifier": "Identifier Info", | 98 | "info_panel.identifier": "Identifier Info", |