fix(gui): sort results in usage dialog (#1104)

This commit is contained in:
Skylot
2021-10-27 15:17:41 +01:00
parent dfdc14ea86
commit f37005958f
3 changed files with 29 additions and 7 deletions
@@ -1,19 +1,22 @@
package jadx.gui.treemodel;
import java.util.Comparator;
import javax.swing.Icon;
import org.jetbrains.annotations.NotNull;
import jadx.api.JavaNode;
import jadx.gui.utils.search.StringRef;
public class CodeNode extends JNode {
public class CodeNode extends JNode implements Comparable<CodeNode> {
private static final long serialVersionUID = 1658650786734966545L;
private final transient JNode jNode;
private final transient JClass jParent;
private final transient StringRef line;
private final transient int lineNum;
private transient int pos;
private final transient int pos;
public CodeNode(JNode jNode, StringRef lineStr, int lineNum, int pos) {
this.jNode = jNode;
@@ -84,6 +87,11 @@ public class CodeNode extends JNode {
return jNode.getSyntaxName();
}
@Override
public int getPos() {
return pos;
}
@Override
public boolean equals(Object o) {
if (this == o) {
@@ -101,8 +109,12 @@ public class CodeNode extends JNode {
return jNode.hashCode();
}
public static final Comparator<CodeNode> COMPARATOR = Comparator
.comparing(CodeNode::getJParent)
.thenComparingInt(CodeNode::getPos);
@Override
public int getPos() {
return pos;
public int compareTo(@NotNull CodeNode other) {
return COMPARATOR.compare(this, other);
}
}
@@ -4,6 +4,7 @@ import javax.swing.Icon;
import javax.swing.ImageIcon;
import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import jadx.api.ICodeInfo;
@@ -19,7 +20,7 @@ import jadx.gui.ui.panel.ContentPanel;
import jadx.gui.utils.NLS;
import jadx.gui.utils.UiUtils;
public class JClass extends JLoadableNode {
public class JClass extends JLoadableNode implements Comparable<JClass> {
private static final long serialVersionUID = -1239986875244097177L;
private static final ImageIcon ICON_CLASS = UiUtils.openSvgIcon("nodes/class");
@@ -198,4 +199,9 @@ public class JClass extends JLoadableNode {
public String makeLongString() {
return cls.getFullName();
}
@Override
public int compareTo(@NotNull JClass o) {
return this.getFullName().compareTo(o.getFullName());
}
}
@@ -3,6 +3,7 @@ package jadx.gui.ui.dialog;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
@@ -17,6 +18,7 @@ import jadx.api.JavaClass;
import jadx.api.JavaNode;
import jadx.gui.jobs.IndexService;
import jadx.gui.jobs.TaskStatus;
import jadx.gui.treemodel.CodeNode;
import jadx.gui.treemodel.JNode;
import jadx.gui.ui.MainWindow;
import jadx.gui.utils.CodeUsageInfo;
@@ -95,7 +97,9 @@ public class UsageDialog extends CommonSearchDialog {
if (usageInfo == null) {
return;
}
resultsModel.addAll(usageInfo.getUsageList(node));
List<CodeNode> usageList = usageInfo.getUsageList(node);
Collections.sort(usageList);
resultsModel.addAll(usageList);
// TODO: highlight only needed node usage
highlightText = null;
super.performSearch();