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 ++++---- 4 files changed, 39 insertions(+), 11 deletions(-) (limited to 'enigma-swing/src/main/java/cuchaz') 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)); -- cgit v1.2.3