summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Daniel Chýlek2021-07-08 16:28:39 +0200
committerGravatar GitHub2021-07-08 16:28:39 +0200
commit76aed83ecd26751094a8ebdfe698b95e3233aae4 (patch)
tree97a671538a064d6993a208298c3433f444e1dd8f
parentBump version (diff)
downloadenigma-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
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java21
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java9
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java6
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/panels/DeobfPanel.java2
-rw-r--r--enigma/src/main/resources/lang/en_us.json1
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",