mirror of
https://github.com/alibaba/arthas.git
synced 2024-04-21 10:21:39 +00:00
sc command support completion
This commit is contained in:
@@ -3,17 +3,14 @@ package com.taobao.arthas.core.command.basic1000;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.taobao.arthas.core.shell.cli.CliToken;
|
||||
import com.taobao.arthas.core.shell.cli.Completion;
|
||||
import com.taobao.arthas.core.shell.cli.CompletionUtils;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.FileUtils;
|
||||
import com.taobao.arthas.core.util.LogUtil;
|
||||
import com.taobao.arthas.core.util.StringUtils;
|
||||
import com.taobao.middleware.cli.annotations.Argument;
|
||||
import com.taobao.middleware.cli.annotations.Description;
|
||||
import com.taobao.middleware.cli.annotations.Name;
|
||||
|
||||
@@ -8,6 +8,8 @@ import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import com.taobao.arthas.core.command.Constants;
|
||||
import com.taobao.arthas.core.shell.cli.Completion;
|
||||
import com.taobao.arthas.core.shell.cli.CompletionUtils;
|
||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||
import com.taobao.arthas.core.util.ClassUtils;
|
||||
@@ -102,4 +104,10 @@ public class SearchClassCommand extends AnnotatedCommand {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void complete(Completion completion) {
|
||||
if (!CompletionUtils.completeClassName(completion)) {
|
||||
super.complete(completion);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,11 +10,14 @@ import com.taobao.middleware.cli.annotations.CLIConfigurator;
|
||||
import io.termd.core.util.Helper;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.instrument.Instrumentation;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author beiwei30 on 09/11/2016.
|
||||
@@ -144,6 +147,41 @@ public class CompletionUtils {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean completeClassName(Completion completion) {
|
||||
List<CliToken> tokens = completion.lineTokens();
|
||||
String token = tokens.get(tokens.size() - 1).value();
|
||||
|
||||
if (token.startsWith("-") || StringUtils.isBlank(token)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Instrumentation instrumentation = completion.session().getInstrumentation();
|
||||
|
||||
Class<?>[] allLoadedClasses = instrumentation.getAllLoadedClasses();
|
||||
|
||||
Set<String> result = new HashSet<String>();
|
||||
for(Class<?> clazz : allLoadedClasses) {
|
||||
String name = clazz.getName();
|
||||
if(name.startsWith(token)) {
|
||||
int index = name.indexOf('.', token.length());
|
||||
|
||||
if(index > 0) {
|
||||
result.add(name.substring(0, index + 1));
|
||||
}else {
|
||||
result.add(name);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if(result.size() == 1 && result.iterator().next().endsWith(".")) {
|
||||
completion.complete(result.iterator().next().substring(token.length()), false);
|
||||
}else {
|
||||
CompletionUtils.complete(completion, result);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void completeShortOption(Completion completion, CliToken lastToken, List<Option> options) {
|
||||
String prefix = lastToken.value().substring(1);
|
||||
List<String> candidates = new ArrayList<String>();
|
||||
|
||||
Reference in New Issue
Block a user