diff options
| author | 2020-10-27 05:02:28 +0100 | |
|---|---|---|
| committer | 2020-10-27 00:02:28 -0400 | |
| commit | b3136e382d6d86d95578c150cf2fbae1656427aa (patch) | |
| tree | 4b9c573989cf40e985c2f66c990abe9476c682fa /enigma-swing/src/main/java/cuchaz | |
| parent | Merge pull request #320 from YanisBft/deobfuscated-panel (diff) | |
| download | enigma-fork-b3136e382d6d86d95578c150cf2fbae1656427aa.tar.gz enigma-fork-b3136e382d6d86d95578c150cf2fbae1656427aa.tar.xz enigma-fork-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
Diffstat (limited to 'enigma-swing/src/main/java/cuchaz')
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; | |||
| 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 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)); |