diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/CodeNode.java b/jadx-gui/src/main/java/jadx/gui/treemodel/CodeNode.java index a5885c2b632a455069480cb7a4d3f5dd4fcde9f7..84888837b8a0092c848b2fb3178f8002dcc31f4a 100644 --- a/jadx-gui/src/main/java/jadx/gui/treemodel/CodeNode.java +++ b/jadx-gui/src/main/java/jadx/gui/treemodel/CodeNode.java @@ -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 { 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 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); } } diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/JClass.java b/jadx-gui/src/main/java/jadx/gui/treemodel/JClass.java index c3099a688e2763f815fcee83444a44c5dd0cf3e1..0d1e3c0f318590686b814217f46ab8cc56bd7c3c 100644 --- a/jadx-gui/src/main/java/jadx/gui/treemodel/JClass.java +++ b/jadx-gui/src/main/java/jadx/gui/treemodel/JClass.java @@ -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 { 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()); + } } diff --git a/jadx-gui/src/main/java/jadx/gui/ui/dialog/UsageDialog.java b/jadx-gui/src/main/java/jadx/gui/ui/dialog/UsageDialog.java index 7da37d8dcbd90012982e7ce04e0493ec122dfd64..8704e85fa04387591f24d6a07167cf0cade248e6 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/dialog/UsageDialog.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/dialog/UsageDialog.java @@ -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 usageList = usageInfo.getUsageList(node); + Collections.sort(usageList); + resultsModel.addAll(usageList); // TODO: highlight only needed node usage highlightText = null; super.performSearch();