From 0757b410bdac133717ea46f0a44c908db121db3f Mon Sep 17 00:00:00 2001 From: LHearen Date: Tue, 16 Oct 2018 18:17:49 +0800 Subject: [PATCH] make it easier to locate the class from so many matched --- .../command/klass100/SearchClassCommand.java | 40 ++++++++++++------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/core/src/main/java/com/taobao/arthas/core/command/klass100/SearchClassCommand.java b/core/src/main/java/com/taobao/arthas/core/command/klass100/SearchClassCommand.java index c353ffddf..047027cc3 100644 --- a/core/src/main/java/com/taobao/arthas/core/command/klass100/SearchClassCommand.java +++ b/core/src/main/java/com/taobao/arthas/core/command/klass100/SearchClassCommand.java @@ -1,5 +1,15 @@ package com.taobao.arthas.core.command.klass100; +import static com.taobao.text.ui.Element.label; + +import java.lang.instrument.Instrumentation; +import java.security.CodeSource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Set; + import com.taobao.arthas.core.command.Constants; import com.taobao.arthas.core.shell.command.AnnotatedCommand; import com.taobao.arthas.core.shell.command.CommandProcess; @@ -17,12 +27,6 @@ import com.taobao.text.ui.Element; import com.taobao.text.ui.TableElement; import com.taobao.text.util.RenderUtil; -import java.lang.instrument.Instrumentation; -import java.security.CodeSource; -import java.util.Set; - -import static com.taobao.text.ui.Element.label; - /** * 展示类信息 * @@ -43,6 +47,14 @@ public class SearchClassCommand extends AnnotatedCommand { private boolean isRegEx = false; private Integer expand; + public static String getCodeSource(final CodeSource cs) { + if (null == cs || null == cs.getLocation() || null == cs.getLocation().getFile()) { + return com.taobao.arthas.core.util.Constants.EMPTY_STRING; + } + + return cs.getLocation().getFile(); + } + @Argument(argName = "class-pattern", index = 0) @Description("Class name pattern, use either '.' or '/' as separator") public void setClassPattern(String classPattern) { @@ -78,7 +90,13 @@ public class SearchClassCommand extends AnnotatedCommand { // TODO: null check RowAffect affect = new RowAffect(); Instrumentation inst = process.session().getInstrumentation(); - Set> matchedClasses = SearchUtils.searchClass(inst, classPattern, isRegEx); + List> matchedClasses = new ArrayList(SearchUtils.searchClass(inst, classPattern, isRegEx)); + Collections.sort(matchedClasses, new Comparator() { + @Override + public int compare(Object o1, Object o2) { + return StringUtils.classname((Class) o1).compareTo(StringUtils.classname((Class) o2)); + } + }); for (Class clazz : matchedClasses) { processClass(process, clazz); @@ -127,12 +145,4 @@ public class SearchClassCommand extends AnnotatedCommand { return table; } - public static String getCodeSource(final CodeSource cs) { - if (null == cs || null == cs.getLocation() || null == cs.getLocation().getFile()) { - return com.taobao.arthas.core.util.Constants.EMPTY_STRING; - } - - return cs.getLocation().getFile(); - } - }