From b3136e382d6d86d95578c150cf2fbae1656427aa Mon Sep 17 00:00:00 2001 From: YanisBft Date: Tue, 27 Oct 2020 05:02:28 +0100 Subject: 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--- .../main/java/cuchaz/enigma/gui/GuiController.java | 4 ++-- .../java/cuchaz/enigma/gui/config/UiConfig.java | 16 ++++++++++++++++ .../java/cuchaz/enigma/gui/dialog/StatsDialog.java | 22 +++++++++++++++++----- .../cuchaz/enigma/gui/stats/StatsGenerator.java | 8 ++++---- enigma/src/main/resources/lang/en_us.json | 3 ++- enigma/src/main/resources/lang/fr_fr.json | 18 +++++++++++++++--- 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 { chp.invalidateMapped(); } - public void openStats(Set includedMembers, String topLevelPackage) { + public void openStats(Set includedMembers, String topLevelPackage, boolean includeSynthetic) { ProgressDialog.runOffThread(gui.getFrame(), progress -> { - String data = new StatsGenerator(project).generate(progress, includedMembers, topLevelPackage).getTreeJson(); + String data = new StatsGenerator(project).generate(progress, includedMembers, topLevelPackage, includeSynthetic).getTreeJson(); try { 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 { swing.data().section("File Dialog").setString("Selected", directory); } + public static String getLastTopLevelPackage() { + return swing.data().section("Mapping Stats").getString("Top-Level Package").orElse(""); + } + + public static void setLastTopLevelPackage(String topLevelPackage) { + swing.data().section("Mapping Stats").setString("Top-Level Package", topLevelPackage); + } + + public static boolean shouldIncludeSyntheticParameters() { + return swing.data().section("Mapping Stats").setIfAbsentBool("Synthetic Parameters", false); + } + + public static void setIncludeSyntheticParameters(boolean b) { + swing.data().section("Mapping Stats").setBool("Synthetic Parameters", b); + } + public static void setLookAndFeelDefaults(LookAndFeel laf, boolean isDark) { ConfigSection s = swing.data().section("Themes").section(laf.name()).section("Colors"); 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; import javax.swing.*; import cuchaz.enigma.gui.Gui; +import cuchaz.enigma.gui.config.UiConfig; import cuchaz.enigma.gui.stats.StatsGenerator; import cuchaz.enigma.gui.stats.StatsMember; import cuchaz.enigma.gui.stats.StatsResult; @@ -24,7 +25,7 @@ public class StatsDialog { final StatsGenerator statsGenerator = new StatsGenerator(gui.getController().project); final Map results = new HashMap<>(); for (StatsMember member : StatsMember.values()) { - results.put(member, statsGenerator.generate(listener, Collections.singleton(member), "")); + results.put(member, statsGenerator.generate(listener, Collections.singleton(member), "", false)); } SwingUtilities.invokeLater(() -> show(gui, results)); }); @@ -66,17 +67,28 @@ public class StatsDialog { contentPane.add(topLevelPackageOption, cb1.pos(0, results.size() + 1).build()); JTextField topLevelPackage = new JTextField(); + topLevelPackage.setText(UiConfig.getLastTopLevelPackage()); contentPane.add(topLevelPackage, cb1.pos(0, results.size() + 2).fill(GridBagConstraints.HORIZONTAL).build()); + // show synthetic members option + JCheckBox syntheticParametersOption = new JCheckBox(I18n.translate("menu.file.stats.synthetic_parameters")); + syntheticParametersOption.setSelected(UiConfig.shouldIncludeSyntheticParameters()); + contentPane.add(syntheticParametersOption, cb1.pos(0, results.size() + 3).build()); + // show generate button JButton button = new JButton(I18n.translate("menu.file.stats.generate")); button.setEnabled(false); button.addActionListener(action -> { dialog.dispose(); - generateStats(gui, checkboxes, topLevelPackage.getText()); + + UiConfig.setLastTopLevelPackage(topLevelPackage.getText()); + UiConfig.setIncludeSyntheticParameters(syntheticParametersOption.isSelected()); + UiConfig.save(); + + generateStats(gui, checkboxes, topLevelPackage.getText(), syntheticParametersOption.isSelected()); }); - contentPane.add(button, cb1.pos(0, results.size() + 3).weightY(1.0).anchor(GridBagConstraints.SOUTHEAST).build()); + contentPane.add(button, cb1.pos(0, results.size() + 4).weightY(1.0).anchor(GridBagConstraints.SOUTHEAST).build()); // add action listener to each checkbox checkboxes.forEach((key, value) -> value.addActionListener(action -> { @@ -97,7 +109,7 @@ public class StatsDialog { dialog.setVisible(true); } - private static void generateStats(Gui gui, Map checkboxes, String topLevelPackage) { + private static void generateStats(Gui gui, Map checkboxes, String topLevelPackage, boolean includeSynthetic) { // get members from selected checkboxes Set includedMembers = checkboxes .entrySet() @@ -108,7 +120,7 @@ public class StatsDialog { // checks if a project is open if (gui.getController().project != null) { - gui.getController().openStats(includedMembers, topLevelPackage); + gui.getController().openStats(includedMembers, topLevelPackage, includeSynthetic); } } } 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 { nameProposalServices = project.getEnigma().getServices().get(NameProposalService.TYPE); } - public StatsResult generate(ProgressListener progress, Set includedMembers, String topLevelPackage) { + public StatsResult generate(ProgressListener progress, Set includedMembers, String topLevelPackage, boolean includeSynthetic) { includedMembers = EnumSet.copyOf(includedMembers); int totalWork = 0; int totalMappable = 0; @@ -60,13 +60,13 @@ public class StatsGenerator { .findFirst() .orElseThrow(AssertionError::new); - if (root == method && !((MethodDefEntry) method).getAccess().isSynthetic()) { - if (includedMembers.contains(StatsMember.METHODS)) { + if (root == method) { + if (includedMembers.contains(StatsMember.METHODS) && !((MethodDefEntry) method).getAccess().isSynthetic()) { update(counts, method); totalMappable ++; } - if (includedMembers.contains(StatsMember.PARAMETERS)) { + if (includedMembers.contains(StatsMember.PARAMETERS) && (!((MethodDefEntry) method).getAccess().isSynthetic() || includeSynthetic)) { int index = ((MethodDefEntry) method).getAccess().isStatic() ? 0 : 1; for (TypeDescriptor argument : method.getDesc().getArgumentDescs()) { 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 @@ "menu.file.export.jar": "Export Jar...", "menu.file.stats": "Mapping Stats...", "menu.file.stats.title": "Mapping Stats", - "menu.file.stats.top_level_package": "Top-level package:", + "menu.file.stats.top_level_package": "Top-Level Package:", + "menu.file.stats.synthetic_parameters": "Include Synthetic Parameters", "menu.file.stats.generate": "Generate Diagram", "menu.file.exit": "Exit", "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 @@ "menu.file.mappings.save_as": "Enregistrer les mappings sous...", "menu.file.mappings.close": "Fermer les mappings", "menu.file.mappings.drop": "Supprimer les mappings invalides", + "menu.file.reload_mappings": "Recharger les mappings", + "menu.file.reload_all": "Recharger le jar et les mappings", "menu.file.export.source": "Exporter la source...", "menu.file.export.jar": "Exporter le jar...", "menu.file.stats": "Statistiques des mappings...", - "menu.file.stats.title": "Choisir les membres inclus", + "menu.file.stats.title": "Statistiques des mappings", "menu.file.stats.top_level_package": "Package de plus haut niveau :", - "menu.file.stats.generate": "Générer les statistiques", + "menu.file.stats.synthetic_parameters": "Inclure les paramètres synthétiques", + "menu.file.stats.generate": "Générer le diagramme", "menu.file.exit": "Quitter", "menu.decompiler": "Décompilateur", "menu.view": "Affichage", @@ -39,6 +42,7 @@ "menu.view.scale": "Échelle", "menu.view.scale.custom": "Personnalisée...", "menu.view.scale.custom.title": "Échelle personnalisée", + "menu.view.font": "Polices...", "menu.view.change.title": "Modifications", "menu.view.change.summary": "Les modifications seront appliquées lors du prochain redémarrage.", "menu.view.search": "Rechercher", @@ -52,6 +56,8 @@ "menu.help": "Aide", "menu.help.about": "À propos", "menu.help.about.title": "%s - À propos", + "menu.help.about.description": "Un outil pour la déobfuscation de code Java", + "menu.help.about.version": "Version : %s", "menu.help.github": "Page Github", "popup_menu.rename": "Renommer", @@ -126,11 +132,17 @@ "javadocs.edit": "Éditer les Javadocs", "javadocs.instruction": "Éditer les Javadocs ici.", + "fonts.cat.default": "Par défaut", + "fonts.cat.default2": "Par défaut 2", + "fonts.cat.small": "Petit", + "fonts.cat.editor": "Éditeur", + "fonts.use_custom": "Utiliser des polices personnalisées", + "prompt.ok": "OK", "prompt.cancel": "Annuler", "prompt.retry": "Réessayer", - "prompt.open": "Ouvrir", "prompt.save": "Enregistrer", + "prompt.open": "Ouvrir", "prompt.close.title": "Enregistrer les modifications ?", "prompt.close.summary": "Vos mappings n'ont pas encore été enregistrés. Souhaitez-vous enregistrer ?", -- cgit v1.2.3