diff options
| author | 2020-10-27 05:02:28 +0100 | |
|---|---|---|
| committer | 2020-10-27 00:02:28 -0400 | |
| commit | b3136e382d6d86d95578c150cf2fbae1656427aa (patch) | |
| tree | 4b9c573989cf40e985c2f66c990abe9476c682fa | |
| parent | Merge pull request #320 from YanisBft/deobfuscated-panel (diff) | |
| download | enigma-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
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; | |||
| 10 | import javax.swing.*; | 10 | import javax.swing.*; |
| 11 | 11 | ||
| 12 | import cuchaz.enigma.gui.Gui; | 12 | import cuchaz.enigma.gui.Gui; |
| 13 | import cuchaz.enigma.gui.config.UiConfig; | ||
| 13 | import cuchaz.enigma.gui.stats.StatsGenerator; | 14 | import cuchaz.enigma.gui.stats.StatsGenerator; |
| 14 | import cuchaz.enigma.gui.stats.StatsMember; | 15 | import cuchaz.enigma.gui.stats.StatsMember; |
| 15 | import cuchaz.enigma.gui.stats.StatsResult; | 16 | import 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 ?", |