summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar YanisBft2020-10-27 05:02:28 +0100
committerGravatar GitHub2020-10-27 00:02:28 -0400
commitb3136e382d6d86d95578c150cf2fbae1656427aa (patch)
tree4b9c573989cf40e985c2f66c990abe9476c682fa
parentMerge pull request #320 from YanisBft/deobfuscated-panel (diff)
downloadenigma-b3136e382d6d86d95578c150cf2fbae1656427aa.tar.gz
enigma-b3136e382d6d86d95578c150cf2fbae1656427aa.tar.xz
enigma-b3136e382d6d86d95578c150cf2fbae1656427aa.zip
Add "include synthetic parameters" to mapping stats & save options (#309)
* Add "include synthetic members" to mapping stats & save options * bump version * include synthetic parameters * capitalization
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java4
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/config/UiConfig.java16
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java22
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java8
-rw-r--r--enigma/src/main/resources/lang/en_us.json3
-rw-r--r--enigma/src/main/resources/lang/fr_fr.json18
6 files changed, 56 insertions, 15 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 88ebd64e..4f7819e4 100644
--- a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java
@@ -513,9 +513,9 @@ public class GuiController implements ClientPacketHandler {
513 chp.invalidateMapped(); 513 chp.invalidateMapped();
514 } 514 }
515 515
516 public void openStats(Set<StatsMember> includedMembers, String topLevelPackage) { 516 public void openStats(Set<StatsMember> includedMembers, String topLevelPackage, boolean includeSynthetic) {
517 ProgressDialog.runOffThread(gui.getFrame(), progress -> { 517 ProgressDialog.runOffThread(gui.getFrame(), progress -> {
518 String data = new StatsGenerator(project).generate(progress, includedMembers, topLevelPackage).getTreeJson(); 518 String data = new StatsGenerator(project).generate(progress, includedMembers, topLevelPackage, includeSynthetic).getTreeJson();
519 519
520 try { 520 try {
521 File statsFile = File.createTempFile("stats", ".html"); 521 File statsFile = File.createTempFile("stats", ".html");
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/config/UiConfig.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/UiConfig.java
index fa2c4e32..8ad6fbbe 100644
--- a/enigma-swing/src/main/java/cuchaz/enigma/gui/config/UiConfig.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/UiConfig.java
@@ -266,6 +266,22 @@ public final class UiConfig {
266 swing.data().section("File Dialog").setString("Selected", directory); 266 swing.data().section("File Dialog").setString("Selected", directory);
267 } 267 }
268 268
269 public static String getLastTopLevelPackage() {
270 return swing.data().section("Mapping Stats").getString("Top-Level Package").orElse("");
271 }
272
273 public static void setLastTopLevelPackage(String topLevelPackage) {
274 swing.data().section("Mapping Stats").setString("Top-Level Package", topLevelPackage);
275 }
276
277 public static boolean shouldIncludeSyntheticParameters() {
278 return swing.data().section("Mapping Stats").setIfAbsentBool("Synthetic Parameters", false);
279 }
280
281 public static void setIncludeSyntheticParameters(boolean b) {
282 swing.data().section("Mapping Stats").setBool("Synthetic Parameters", b);
283 }
284
269 public static void setLookAndFeelDefaults(LookAndFeel laf, boolean isDark) { 285 public static void setLookAndFeelDefaults(LookAndFeel laf, boolean isDark) {
270 ConfigSection s = swing.data().section("Themes").section(laf.name()).section("Colors"); 286 ConfigSection s = swing.data().section("Themes").section(laf.name()).section("Colors");
271 if (!isDark) { 287 if (!isDark) {
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java
index 0bd2f18c..0398093b 100644
--- a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java
@@ -10,6 +10,7 @@ import java.util.stream.Collectors;
10import javax.swing.*; 10import javax.swing.*;
11 11
12import cuchaz.enigma.gui.Gui; 12import cuchaz.enigma.gui.Gui;
13import cuchaz.enigma.gui.config.UiConfig;
13import cuchaz.enigma.gui.stats.StatsGenerator; 14import cuchaz.enigma.gui.stats.StatsGenerator;
14import cuchaz.enigma.gui.stats.StatsMember; 15import cuchaz.enigma.gui.stats.StatsMember;
15import cuchaz.enigma.gui.stats.StatsResult; 16import cuchaz.enigma.gui.stats.StatsResult;
@@ -24,7 +25,7 @@ public class StatsDialog {
24 final StatsGenerator statsGenerator = new StatsGenerator(gui.getController().project); 25 final StatsGenerator statsGenerator = new StatsGenerator(gui.getController().project);
25 final Map<StatsMember, StatsResult> results = new HashMap<>(); 26 final Map<StatsMember, StatsResult> results = new HashMap<>();
26 for (StatsMember member : StatsMember.values()) { 27 for (StatsMember member : StatsMember.values()) {
27 results.put(member, statsGenerator.generate(listener, Collections.singleton(member), "")); 28 results.put(member, statsGenerator.generate(listener, Collections.singleton(member), "", false));
28 } 29 }
29 SwingUtilities.invokeLater(() -> show(gui, results)); 30 SwingUtilities.invokeLater(() -> show(gui, results));
30 }); 31 });
@@ -66,17 +67,28 @@ public class StatsDialog {
66 contentPane.add(topLevelPackageOption, cb1.pos(0, results.size() + 1).build()); 67 contentPane.add(topLevelPackageOption, cb1.pos(0, results.size() + 1).build());
67 68
68 JTextField topLevelPackage = new JTextField(); 69 JTextField topLevelPackage = new JTextField();
70 topLevelPackage.setText(UiConfig.getLastTopLevelPackage());
69 contentPane.add(topLevelPackage, cb1.pos(0, results.size() + 2).fill(GridBagConstraints.HORIZONTAL).build()); 71 contentPane.add(topLevelPackage, cb1.pos(0, results.size() + 2).fill(GridBagConstraints.HORIZONTAL).build());
70 72
73 // show synthetic members option
74 JCheckBox syntheticParametersOption = new JCheckBox(I18n.translate("menu.file.stats.synthetic_parameters"));
75 syntheticParametersOption.setSelected(UiConfig.shouldIncludeSyntheticParameters());
76 contentPane.add(syntheticParametersOption, cb1.pos(0, results.size() + 3).build());
77
71 // show generate button 78 // show generate button
72 JButton button = new JButton(I18n.translate("menu.file.stats.generate")); 79 JButton button = new JButton(I18n.translate("menu.file.stats.generate"));
73 button.setEnabled(false); 80 button.setEnabled(false);
74 button.addActionListener(action -> { 81 button.addActionListener(action -> {
75 dialog.dispose(); 82 dialog.dispose();
76 generateStats(gui, checkboxes, topLevelPackage.getText()); 83
84 UiConfig.setLastTopLevelPackage(topLevelPackage.getText());
85 UiConfig.setIncludeSyntheticParameters(syntheticParametersOption.isSelected());
86 UiConfig.save();
87
88 generateStats(gui, checkboxes, topLevelPackage.getText(), syntheticParametersOption.isSelected());
77 }); 89 });
78 90
79 contentPane.add(button, cb1.pos(0, results.size() + 3).weightY(1.0).anchor(GridBagConstraints.SOUTHEAST).build()); 91 contentPane.add(button, cb1.pos(0, results.size() + 4).weightY(1.0).anchor(GridBagConstraints.SOUTHEAST).build());
80 92
81 // add action listener to each checkbox 93 // add action listener to each checkbox
82 checkboxes.forEach((key, value) -> value.addActionListener(action -> { 94 checkboxes.forEach((key, value) -> value.addActionListener(action -> {
@@ -97,7 +109,7 @@ public class StatsDialog {
97 dialog.setVisible(true); 109 dialog.setVisible(true);
98 } 110 }
99 111
100 private static void generateStats(Gui gui, Map<StatsMember, JCheckBox> checkboxes, String topLevelPackage) { 112 private static void generateStats(Gui gui, Map<StatsMember, JCheckBox> checkboxes, String topLevelPackage, boolean includeSynthetic) {
101 // get members from selected checkboxes 113 // get members from selected checkboxes
102 Set<StatsMember> includedMembers = checkboxes 114 Set<StatsMember> includedMembers = checkboxes
103 .entrySet() 115 .entrySet()
@@ -108,7 +120,7 @@ public class StatsDialog {
108 120
109 // checks if a project is open 121 // checks if a project is open
110 if (gui.getController().project != null) { 122 if (gui.getController().project != null) {
111 gui.getController().openStats(includedMembers, topLevelPackage); 123 gui.getController().openStats(includedMembers, topLevelPackage, includeSynthetic);
112 } 124 }
113 } 125 }
114} 126}
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java
index a5eea56e..b898eac3 100644
--- a/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java
@@ -29,7 +29,7 @@ public class StatsGenerator {
29 nameProposalServices = project.getEnigma().getServices().get(NameProposalService.TYPE); 29 nameProposalServices = project.getEnigma().getServices().get(NameProposalService.TYPE);
30 } 30 }
31 31
32 public StatsResult generate(ProgressListener progress, Set<StatsMember> includedMembers, String topLevelPackage) { 32 public StatsResult generate(ProgressListener progress, Set<StatsMember> includedMembers, String topLevelPackage, boolean includeSynthetic) {
33 includedMembers = EnumSet.copyOf(includedMembers); 33 includedMembers = EnumSet.copyOf(includedMembers);
34 int totalWork = 0; 34 int totalWork = 0;
35 int totalMappable = 0; 35 int totalMappable = 0;
@@ -60,13 +60,13 @@ public class StatsGenerator {
60 .findFirst() 60 .findFirst()
61 .orElseThrow(AssertionError::new); 61 .orElseThrow(AssertionError::new);
62 62
63 if (root == method && !((MethodDefEntry) method).getAccess().isSynthetic()) { 63 if (root == method) {
64 if (includedMembers.contains(StatsMember.METHODS)) { 64 if (includedMembers.contains(StatsMember.METHODS) && !((MethodDefEntry) method).getAccess().isSynthetic()) {
65 update(counts, method); 65 update(counts, method);
66 totalMappable ++; 66 totalMappable ++;
67 } 67 }
68 68
69 if (includedMembers.contains(StatsMember.PARAMETERS)) { 69 if (includedMembers.contains(StatsMember.PARAMETERS) && (!((MethodDefEntry) method).getAccess().isSynthetic() || includeSynthetic)) {
70 int index = ((MethodDefEntry) method).getAccess().isStatic() ? 0 : 1; 70 int index = ((MethodDefEntry) method).getAccess().isStatic() ? 0 : 1;
71 for (TypeDescriptor argument : method.getDesc().getArgumentDescs()) { 71 for (TypeDescriptor argument : method.getDesc().getArgumentDescs()) {
72 update(counts, new LocalVariableEntry(method, index, "", true,null)); 72 update(counts, new LocalVariableEntry(method, index, "", true,null));
diff --git a/enigma/src/main/resources/lang/en_us.json b/enigma/src/main/resources/lang/en_us.json
index caf179e2..50d06a82 100644
--- a/enigma/src/main/resources/lang/en_us.json
+++ b/enigma/src/main/resources/lang/en_us.json
@@ -27,7 +27,8 @@
27 "menu.file.export.jar": "Export Jar...", 27 "menu.file.export.jar": "Export Jar...",
28 "menu.file.stats": "Mapping Stats...", 28 "menu.file.stats": "Mapping Stats...",
29 "menu.file.stats.title": "Mapping Stats", 29 "menu.file.stats.title": "Mapping Stats",
30 "menu.file.stats.top_level_package": "Top-level package:", 30 "menu.file.stats.top_level_package": "Top-Level Package:",
31 "menu.file.stats.synthetic_parameters": "Include Synthetic Parameters",
31 "menu.file.stats.generate": "Generate Diagram", 32 "menu.file.stats.generate": "Generate Diagram",
32 "menu.file.exit": "Exit", 33 "menu.file.exit": "Exit",
33 "menu.decompiler": "Decompiler", 34 "menu.decompiler": "Decompiler",
diff --git a/enigma/src/main/resources/lang/fr_fr.json b/enigma/src/main/resources/lang/fr_fr.json
index b40a904f..b2b12093 100644
--- a/enigma/src/main/resources/lang/fr_fr.json
+++ b/enigma/src/main/resources/lang/fr_fr.json
@@ -21,12 +21,15 @@
21 "menu.file.mappings.save_as": "Enregistrer les mappings sous...", 21 "menu.file.mappings.save_as": "Enregistrer les mappings sous...",
22 "menu.file.mappings.close": "Fermer les mappings", 22 "menu.file.mappings.close": "Fermer les mappings",
23 "menu.file.mappings.drop": "Supprimer les mappings invalides", 23 "menu.file.mappings.drop": "Supprimer les mappings invalides",
24 "menu.file.reload_mappings": "Recharger les mappings",
25 "menu.file.reload_all": "Recharger le jar et les mappings",
24 "menu.file.export.source": "Exporter la source...", 26 "menu.file.export.source": "Exporter la source...",
25 "menu.file.export.jar": "Exporter le jar...", 27 "menu.file.export.jar": "Exporter le jar...",
26 "menu.file.stats": "Statistiques des mappings...", 28 "menu.file.stats": "Statistiques des mappings...",
27 "menu.file.stats.title": "Choisir les membres inclus", 29 "menu.file.stats.title": "Statistiques des mappings",
28 "menu.file.stats.top_level_package": "Package de plus haut niveau :", 30 "menu.file.stats.top_level_package": "Package de plus haut niveau :",
29 "menu.file.stats.generate": "Générer les statistiques", 31 "menu.file.stats.synthetic_parameters": "Inclure les paramètres synthétiques",
32 "menu.file.stats.generate": "Générer le diagramme",
30 "menu.file.exit": "Quitter", 33 "menu.file.exit": "Quitter",
31 "menu.decompiler": "Décompilateur", 34 "menu.decompiler": "Décompilateur",
32 "menu.view": "Affichage", 35 "menu.view": "Affichage",
@@ -39,6 +42,7 @@
39 "menu.view.scale": "Échelle", 42 "menu.view.scale": "Échelle",
40 "menu.view.scale.custom": "Personnalisée...", 43 "menu.view.scale.custom": "Personnalisée...",
41 "menu.view.scale.custom.title": "Échelle personnalisée", 44 "menu.view.scale.custom.title": "Échelle personnalisée",
45 "menu.view.font": "Polices...",
42 "menu.view.change.title": "Modifications", 46 "menu.view.change.title": "Modifications",
43 "menu.view.change.summary": "Les modifications seront appliquées lors du prochain redémarrage.", 47 "menu.view.change.summary": "Les modifications seront appliquées lors du prochain redémarrage.",
44 "menu.view.search": "Rechercher", 48 "menu.view.search": "Rechercher",
@@ -52,6 +56,8 @@
52 "menu.help": "Aide", 56 "menu.help": "Aide",
53 "menu.help.about": "À propos", 57 "menu.help.about": "À propos",
54 "menu.help.about.title": "%s - À propos", 58 "menu.help.about.title": "%s - À propos",
59 "menu.help.about.description": "Un outil pour la déobfuscation de code Java",
60 "menu.help.about.version": "Version : %s",
55 "menu.help.github": "Page Github", 61 "menu.help.github": "Page Github",
56 62
57 "popup_menu.rename": "Renommer", 63 "popup_menu.rename": "Renommer",
@@ -126,11 +132,17 @@
126 "javadocs.edit": "Éditer les Javadocs", 132 "javadocs.edit": "Éditer les Javadocs",
127 "javadocs.instruction": "Éditer les Javadocs ici.", 133 "javadocs.instruction": "Éditer les Javadocs ici.",
128 134
135 "fonts.cat.default": "Par défaut",
136 "fonts.cat.default2": "Par défaut 2",
137 "fonts.cat.small": "Petit",
138 "fonts.cat.editor": "Éditeur",
139 "fonts.use_custom": "Utiliser des polices personnalisées",
140
129 "prompt.ok": "OK", 141 "prompt.ok": "OK",
130 "prompt.cancel": "Annuler", 142 "prompt.cancel": "Annuler",
131 "prompt.retry": "Réessayer", 143 "prompt.retry": "Réessayer",
132 "prompt.open": "Ouvrir",
133 "prompt.save": "Enregistrer", 144 "prompt.save": "Enregistrer",
145 "prompt.open": "Ouvrir",
134 146
135 "prompt.close.title": "Enregistrer les modifications ?", 147 "prompt.close.title": "Enregistrer les modifications ?",
136 "prompt.close.summary": "Vos mappings n'ont pas encore été enregistrés. Souhaitez-vous enregistrer ?", 148 "prompt.close.summary": "Vos mappings n'ont pas encore été enregistrés. Souhaitez-vous enregistrer ?",