summaryrefslogtreecommitdiff
path: root/enigma-swing/src/main/java/cuchaz
diff options
context:
space:
mode:
Diffstat (limited to 'enigma-swing/src/main/java/cuchaz')
-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
4 files changed, 39 insertions, 11 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 88ebd64..4f7819e 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 fa2c4e3..8ad6fbb 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 0bd2f18..0398093 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 a5eea56..b898eac 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));