From c4751931ce3cb047bbd13f0a14a5588de29f7ea8 Mon Sep 17 00:00:00 2001 From: hengyunabc Date: Thu, 7 Feb 2019 15:21:18 +0800 Subject: [PATCH] jad command support --source-only option. #496 --- .../core/command/klass100/JadCommand.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/taobao/arthas/core/command/klass100/JadCommand.java b/core/src/main/java/com/taobao/arthas/core/command/klass100/JadCommand.java index f82e27bf5..200b4c3c1 100644 --- a/core/src/main/java/com/taobao/arthas/core/command/klass100/JadCommand.java +++ b/core/src/main/java/com/taobao/arthas/core/command/klass100/JadCommand.java @@ -40,6 +40,7 @@ import static com.taobao.text.ui.Element.label; @Description(Constants.EXAMPLE + " jad java.lang.String\n" + " jad java.lang.String toString\n" + + " jad --source-only java.lang.String\n" + " jad -c 39eb305e org/apache/log4j/Logger\n" + " jad -c 39eb305e -E org\\\\.apache\\\\.*\\\\.StringUtils\n" + Constants.WIKI + Constants.WIKI_HOME + "jad") @@ -52,6 +53,11 @@ public class JadCommand extends AnnotatedCommand { private String code = null; private boolean isRegEx = false; + /** + * jad output source code only + */ + private boolean sourceOnly = false; + @Argument(argName = "class-pattern", index = 0) @Description("Class name pattern, use either '.' or '/' as separator") public void setClassPattern(String classPattern) { @@ -77,6 +83,12 @@ public class JadCommand extends AnnotatedCommand { isRegEx = regEx; } + @Option(longName = "source-only", flag = true) + @Description("Output source code only") + public void setSourceOnly(boolean sourceOnly) { + this.sourceOnly = sourceOnly; + } + @Override public void process(CommandProcess process) { RowAffect affect = new RowAffect(); @@ -97,7 +109,9 @@ public class JadCommand extends AnnotatedCommand { processExactMatch(process, affect, inst, matchedClasses, withInnerClasses); } } finally { - process.write(affect + "\n"); + if (!this.sourceOnly) { + process.write(affect + "\n"); + } process.end(); } } @@ -120,6 +134,11 @@ public class JadCommand extends AnnotatedCommand { source = "unknown"; } + if (this.sourceOnly) { + process.write(LangRenderUtil.render(source) + "\n"); + return; + } + process.write("\n"); process.write(RenderUtil.render(new LabelElement("ClassLoader: ").style(Decoration.bold.fg(Color.red)), process.width()));