mirror of
https://github.com/alibaba/arthas.git
synced 2024-04-21 10:21:39 +00:00
fix jad command do not match inner class. close #301
This commit is contained in:
@@ -93,8 +93,12 @@ public class JadCommand extends AnnotatedCommand {
|
||||
processNoMatch(process);
|
||||
} else if (matchedClasses.size() > 1) {
|
||||
processMatches(process, matchedClasses);
|
||||
} else {
|
||||
Set<Class<?>> withInnerClasses = SearchUtils.searchClassOnly(inst, classPattern + "(?!.*\\$\\$Lambda\\$).*", true, code);
|
||||
} else { // matchedClasses size is 1
|
||||
// find inner classes. TODO slow
|
||||
Set<Class<?>> withInnerClasses = SearchUtils.searchClassOnly(inst, matchedClasses.iterator().next().getName() + "(?!.*\\$\\$Lambda\\$).*", true, code);
|
||||
if(withInnerClasses.isEmpty()) {
|
||||
withInnerClasses = matchedClasses;
|
||||
}
|
||||
processExactMatch(process, affect, inst, matchedClasses, withInnerClasses);
|
||||
}
|
||||
} finally {
|
||||
@@ -105,11 +109,12 @@ public class JadCommand extends AnnotatedCommand {
|
||||
|
||||
private void processExactMatch(CommandProcess process, RowAffect affect, Instrumentation inst, Set<Class<?>> matchedClasses, Set<Class<?>> withInnerClasses) {
|
||||
Class<?> c = matchedClasses.iterator().next();
|
||||
matchedClasses = withInnerClasses;
|
||||
Set<Class<?>> allClasses = new HashSet<Class<?>>(withInnerClasses);
|
||||
allClasses.add(c);
|
||||
|
||||
try {
|
||||
ClassDumpTransformer transformer = new ClassDumpTransformer(matchedClasses);
|
||||
Enhancer.enhance(inst, transformer, matchedClasses);
|
||||
ClassDumpTransformer transformer = new ClassDumpTransformer(allClasses);
|
||||
Enhancer.enhance(inst, transformer, allClasses);
|
||||
Map<Class<?>, File> classFiles = transformer.getDumpResult();
|
||||
File classFile = classFiles.get(c);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user