diff --git a/core/src/main/java/com/taobao/arthas/core/command/klass100/MemoryCompilerCommand.java b/core/src/main/java/com/taobao/arthas/core/command/klass100/MemoryCompilerCommand.java index d4ed15c9d..8e098af56 100644 --- a/core/src/main/java/com/taobao/arthas/core/command/klass100/MemoryCompilerCommand.java +++ b/core/src/main/java/com/taobao/arthas/core/command/klass100/MemoryCompilerCommand.java @@ -1,6 +1,8 @@ package com.taobao.arthas.core.command.klass100; import java.io.File; +import java.io.IOException; +import java.io.Writer; import java.lang.instrument.Instrumentation; import java.nio.charset.Charset; import java.util.List; @@ -69,7 +71,7 @@ public class MemoryCompilerCommand extends AnnotatedCommand { } @Override - public void process(CommandProcess process) { + public void process(final CommandProcess process) { int exitCode = 0; RowAffect affect = new RowAffect(); @@ -87,7 +89,22 @@ public class MemoryCompilerCommand extends AnnotatedCommand { } } - DynamicCompiler dynamicCompiler = new DynamicCompiler(classloader); + DynamicCompiler dynamicCompiler = new DynamicCompiler(classloader, new Writer() { + @Override + public void write(char[] cbuf, int off, int len) throws IOException { + process.write(new String(cbuf, off, len)); + } + + @Override + public void flush() throws IOException { + } + + @Override + public void close() throws IOException { + + } + + }); Charset charset = Charset.defaultCharset(); if (encoding != null) { diff --git a/memorycompiler/src/main/java/com/taobao/arthas/compiler/DynamicCompiler.java b/memorycompiler/src/main/java/com/taobao/arthas/compiler/DynamicCompiler.java index ef8a0d9ce..5ee4e8bed 100644 --- a/memorycompiler/src/main/java/com/taobao/arthas/compiler/DynamicCompiler.java +++ b/memorycompiler/src/main/java/com/taobao/arthas/compiler/DynamicCompiler.java @@ -1,5 +1,6 @@ package com.taobao.arthas.compiler; +import java.io.Writer; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -24,12 +25,18 @@ public class DynamicCompiler { private final List> errors = new ArrayList>(); private final List> warnings = new ArrayList>(); + private Writer writer; + public DynamicCompiler(ClassLoader classLoader) { + this(classLoader, null); + } + + public DynamicCompiler(ClassLoader classLoader, Writer writer) { standardFileManager = javaCompiler.getStandardFileManager(null, null, null); options.add("-Xlint:unchecked"); dynamicClassLoader = new DynamicClassLoader(classLoader); - + this.writer = writer; } public void addSource(String className, String source) {