From b383a4909556bd1b00ee0350f7a79a671cac79d6 Mon Sep 17 00:00:00 2001 From: Cuchaz Date: Tue, 4 Aug 2015 11:02:13 -0400 Subject: add top 10 matches only button to class matcher --- src/cuchaz/enigma/gui/ClassMatchingGui.java | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/cuchaz/enigma/gui/ClassMatchingGui.java') diff --git a/src/cuchaz/enigma/gui/ClassMatchingGui.java b/src/cuchaz/enigma/gui/ClassMatchingGui.java index 89b19c3..416b01f 100644 --- a/src/cuchaz/enigma/gui/ClassMatchingGui.java +++ b/src/cuchaz/enigma/gui/ClassMatchingGui.java @@ -17,6 +17,8 @@ import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Map; @@ -108,6 +110,7 @@ public class ClassMatchingGui { private JButton m_matchButton; private Map m_sourceTypeButtons; private JCheckBox m_advanceCheck; + private JCheckBox m_top10Matches; private ClassMatches m_classMatches; private Deobfuscator m_sourceDeobfuscator; @@ -170,6 +173,15 @@ public class ClassMatchingGui { pane.add(destPanel, BorderLayout.WEST); destPanel.add(new JLabel("Destination Classes")); + m_top10Matches = new JCheckBox("Show only top 10 matches"); + destPanel.add(m_top10Matches); + m_top10Matches.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent event) { + toggleTop10Matches(); + } + }); + m_destClasses = new ClassSelector(ClassSelector.DeobfuscatedClassEntryComparator); m_destClasses.setListener(new ClassSelectionListener() { @Override @@ -397,6 +409,19 @@ public class ClassMatchingGui { /(sourceIdentity.getMaxMatchScore() + destIdentity.getMaxMatchScore()); scoredDestClasses.add(new ScoredClassEntry(unmatchedDestClass, score)); } + + if (m_top10Matches.isSelected() && scoredDestClasses.size() > 10) { + Collections.sort(scoredDestClasses, new Comparator() { + @Override + public int compare(ClassEntry a, ClassEntry b) { + ScoredClassEntry sa = (ScoredClassEntry)a; + ScoredClassEntry sb = (ScoredClassEntry)b; + return -Float.compare(sa.getScore(), sb.getScore()); + } + }); + scoredDestClasses = scoredDestClasses.subList(0, 10); + } + return scoredDestClasses; } catch (ClassNotFoundException ex) { @@ -586,4 +611,12 @@ public class ClassMatchingGui { setDestClass(destClass); m_destClasses.setSelectionClass(destClass); } + + private void toggleTop10Matches() { + if (m_sourceClass != null) { + m_destClasses.clearSelection(); + m_destClasses.setClasses(deobfuscateClasses(getLikelyMatches(m_sourceClass), m_destDeobfuscator)); + m_destClasses.expandAll(); + } + } } -- cgit v1.2.3