summaryrefslogtreecommitdiff
path: root/enigma-swing/src/main/java/cuchaz/enigma/gui
diff options
context:
space:
mode:
authorGravatar Julian Burner2022-12-07 19:56:15 +0100
committerGravatar GitHub2022-12-07 18:56:15 +0000
commitcec6269e5448faa24ef39070b772ace94a3bd419 (patch)
tree1472571835ee7a3a372666db5b4a182082abe53e /enigma-swing/src/main/java/cuchaz/enigma/gui
parentProvide fallback anti-aliasing for DEs the JRE doesn't recognize (#466) (diff)
downloadenigma-fork-cec6269e5448faa24ef39070b772ace94a3bd419.tar.gz
enigma-fork-cec6269e5448faa24ef39070b772ace94a3bd419.tar.xz
enigma-fork-cec6269e5448faa24ef39070b772ace94a3bd419.zip
Allow filtering of packages in Mapping Stats window (#481)
Co-authored-by: Eli Orona <eliorona@live.com>
Diffstat (limited to 'enigma-swing/src/main/java/cuchaz/enigma/gui')
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java30
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java36
2 files changed, 57 insertions, 9 deletions
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 1ab66ef..5f03038 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
@@ -37,13 +37,13 @@ public class StatsDialog {
37 results.put(member, statsGenerator.generate(listener, Collections.singleton(member), "", false)); 37 results.put(member, statsGenerator.generate(listener, Collections.singleton(member), "", false));
38 } 38 }
39 39
40 SwingUtilities.invokeLater(() -> show(gui, results)); 40 SwingUtilities.invokeLater(() -> show(gui, results, ""));
41 }); 41 });
42 } 42 }
43 43
44 public static void show(Gui gui, Map<StatsMember, StatsResult> results) { 44 public static void show(Gui gui, Map<StatsMember, StatsResult> results, String packageName) {
45 // init frame 45 // init frame
46 JDialog dialog = new JDialog(gui.getFrame(), I18n.translate("menu.file.stats.title"), true); 46 JDialog dialog = new JDialog(gui.getFrame(), packageName.isEmpty() ? I18n.translate("menu.file.stats.title") : I18n.translateFormatted("menu.file.stats.title_filtered", packageName), true);
47 Container contentPane = dialog.getContentPane(); 47 Container contentPane = dialog.getContentPane();
48 contentPane.setLayout(new GridBagLayout()); 48 contentPane.setLayout(new GridBagLayout());
49 49
@@ -80,10 +80,30 @@ public class StatsDialog {
80 topLevelPackage.setText(UiConfig.getLastTopLevelPackage()); 80 topLevelPackage.setText(UiConfig.getLastTopLevelPackage());
81 contentPane.add(topLevelPackage, cb1.pos(0, results.size() + 2).fill(GridBagConstraints.HORIZONTAL).build()); 81 contentPane.add(topLevelPackage, cb1.pos(0, results.size() + 2).fill(GridBagConstraints.HORIZONTAL).build());
82 82
83 // Show filter button
84 JButton filterButton = new JButton(I18n.translate("menu.file.stats.filter"));
85 filterButton.addActionListener(action -> {
86 dialog.dispose();
87 ProgressDialog.runOffThread(gui.getFrame(), listener -> {
88 UiConfig.setLastTopLevelPackage(topLevelPackage.getText());
89 UiConfig.save();
90
91 final StatsGenerator statsGenerator = new StatsGenerator(gui.getController().project);
92 final Map<StatsMember, StatsResult> filteredResults = new HashMap<>();
93
94 for (StatsMember member : StatsMember.values()) {
95 filteredResults.put(member, statsGenerator.generate(listener, Collections.singleton(member), UiConfig.getLastTopLevelPackage(), false));
96 }
97
98 SwingUtilities.invokeLater(() -> show(gui, filteredResults, UiConfig.getLastTopLevelPackage()));
99 });
100 });
101 contentPane.add(filterButton, cb1.pos(0, results.size() + 3).anchor(GridBagConstraints.EAST).build());
102
83 // show synthetic members option 103 // show synthetic members option
84 JCheckBox syntheticParametersOption = new JCheckBox(I18n.translate("menu.file.stats.synthetic_parameters")); 104 JCheckBox syntheticParametersOption = new JCheckBox(I18n.translate("menu.file.stats.synthetic_parameters"));
85 syntheticParametersOption.setSelected(UiConfig.shouldIncludeSyntheticParameters()); 105 syntheticParametersOption.setSelected(UiConfig.shouldIncludeSyntheticParameters());
86 contentPane.add(syntheticParametersOption, cb1.pos(0, results.size() + 3).build()); 106 contentPane.add(syntheticParametersOption, cb1.pos(0, results.size() + 4).build());
87 107
88 // show generate button 108 // show generate button
89 JButton button = new JButton(I18n.translate("menu.file.stats.generate")); 109 JButton button = new JButton(I18n.translate("menu.file.stats.generate"));
@@ -98,7 +118,7 @@ public class StatsDialog {
98 generateStats(gui, checkboxes, topLevelPackage.getText(), syntheticParametersOption.isSelected()); 118 generateStats(gui, checkboxes, topLevelPackage.getText(), syntheticParametersOption.isSelected());
99 }); 119 });
100 120
101 contentPane.add(button, cb1.pos(0, results.size() + 4).weightY(1.0).anchor(GridBagConstraints.SOUTHEAST).build()); 121 contentPane.add(button, cb1.pos(0, results.size() + 5).weightY(1.0).anchor(GridBagConstraints.SOUTHWEST).build());
102 122
103 // add action listener to each checkbox 123 // add action listener to each checkbox
104 checkboxes.forEach((key, value) -> value.addActionListener(action -> { 124 checkboxes.forEach((key, value) -> value.addActionListener(action -> {
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 99b5572..5d24166 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
@@ -54,15 +54,20 @@ public class StatsGenerator {
54 progress.init(totalWork, I18n.translate("progress.stats")); 54 progress.init(totalWork, I18n.translate("progress.stats"));
55 55
56 Map<String, Integer> counts = new HashMap<>(); 56 Map<String, Integer> counts = new HashMap<>();
57 57 String topLevelPackageSlash = topLevelPackage.replace(".", "/");
58 int numDone = 0; 58 int numDone = 0;
59 59
60 if (includedMembers.contains(StatsMember.METHODS) || includedMembers.contains(StatsMember.PARAMETERS)) { 60 if (includedMembers.contains(StatsMember.METHODS) || includedMembers.contains(StatsMember.PARAMETERS)) {
61 for (MethodEntry method : entryIndex.getMethods()) { 61 for (MethodEntry method : entryIndex.getMethods()) {
62 progress.step(numDone++, I18n.translate("type.methods")); 62 progress.step(numDone++, I18n.translate("type.methods"));
63 MethodEntry root = entryResolver.resolveEntry(method, ResolutionStrategy.RESOLVE_ROOT).stream().findFirst().orElseThrow(AssertionError::new); 63 MethodEntry root = entryResolver
64 64 .resolveEntry(method, ResolutionStrategy.RESOLVE_ROOT)
65 if (root == method) { 65 .stream()
66 .findFirst()
67 .orElseThrow(AssertionError::new);
68 ClassEntry clazz = root.getParent();
69
70 if (root == method && this.mapper.deobfuscate(clazz).getPackageName().startsWith(topLevelPackageSlash)) {
66 if (includedMembers.contains(StatsMember.METHODS) && !((MethodDefEntry) method).getAccess().isSynthetic()) { 71 if (includedMembers.contains(StatsMember.METHODS) && !((MethodDefEntry) method).getAccess().isSynthetic()) {
67 update(counts, method); 72 update(counts, method);
68 totalMappable++; 73 totalMappable++;
@@ -84,6 +89,29 @@ public class StatsGenerator {
84 if (includedMembers.contains(StatsMember.FIELDS)) { 89 if (includedMembers.contains(StatsMember.FIELDS)) {
85 for (FieldEntry field : entryIndex.getFields()) { 90 for (FieldEntry field : entryIndex.getFields()) {
86 progress.step(numDone++, I18n.translate("type.fields")); 91 progress.step(numDone++, I18n.translate("type.fields"));
92 ClassEntry clazz = field.getParent();
93
94 if (!((FieldDefEntry) field).getAccess().isSynthetic() && this.mapper.deobfuscate(clazz).getPackageName().startsWith(topLevelPackageSlash)) {
95 update(counts, field);
96 totalMappable++;
97 }
98 }
99 }
100
101 if (includedMembers.contains(StatsMember.CLASSES)) {
102 for (ClassEntry clazz : entryIndex.getClasses()) {
103 progress.step(numDone++, I18n.translate("type.classes"));
104
105 if (this.mapper.deobfuscate(clazz).getPackageName().startsWith(topLevelPackageSlash)) {
106 update(counts, clazz);
107 totalMappable++;
108 }
109 }
110 }
111
112 if (includedMembers.contains(StatsMember.FIELDS)) {
113 for (FieldEntry field : entryIndex.getFields()) {
114 progress.step(numDone++, I18n.translate("type.fields"));
87 115
88 if (!((FieldDefEntry) field).getAccess().isSynthetic()) { 116 if (!((FieldDefEntry) field).getAccess().isSynthetic()) {
89 update(counts, field); 117 update(counts, field);