diff --git a/agent/pom.xml b/agent/pom.xml
index 10c6a02..4af2ea1 100755
--- a/agent/pom.xml
+++ b/agent/pom.xml
@@ -5,7 +5,7 @@
com.alibaba
testable-agent
- 0.0.1-SNAPSHOT
+ 0.0.2-SNAPSHOT
jar
diff --git a/core/src/main/java/com/alibaba/testable/generator/StaticNewClassGenerator.java b/core/src/main/java/com/alibaba/testable/generator/StaticNewClassGenerator.java
deleted file mode 100644
index dffb9f6..0000000
--- a/core/src/main/java/com/alibaba/testable/generator/StaticNewClassGenerator.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.alibaba.testable.generator;
-
-import com.alibaba.testable.model.TestableContext;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-/**
- * Generate global n.e class code
- *
- * @author flin
- */
-public class StaticNewClassGenerator extends BaseGenerator {
-
- public StaticNewClassGenerator(TestableContext cx) {
- super(cx);
- }
-
- public String fetch() {
- InputStream in = getClass().getResourceAsStream("/e.java");
- BufferedReader reader = new BufferedReader(new InputStreamReader(in));
- try {
- String line;
- StringBuffer buffer = new StringBuffer();
- while ((line = reader.readLine()) != null)
- {
- buffer.append(line).append('\n');
- }
- reader.close();
- return buffer.toString();
- } catch (IOException e) {
- cx.logger.error("Failed to generate testable new stand-in.");
- return "";
- }
- }
-
-}
diff --git a/core/src/main/java/com/alibaba/testable/processor/EnableTestableInjectProcessor.java b/core/src/main/java/com/alibaba/testable/processor/EnableTestableInjectProcessor.java
index ce8638d..b3ed326 100644
--- a/core/src/main/java/com/alibaba/testable/processor/EnableTestableInjectProcessor.java
+++ b/core/src/main/java/com/alibaba/testable/processor/EnableTestableInjectProcessor.java
@@ -1,10 +1,10 @@
package com.alibaba.testable.processor;
import com.alibaba.testable.annotation.EnableTestableInject;
-import com.alibaba.testable.generator.StaticNewClassGenerator;
import com.alibaba.testable.translator.EnableTestableInjectTranslator;
import com.alibaba.testable.translator.MethodRecordTranslator;
import com.alibaba.testable.util.ConstPool;
+import com.alibaba.testable.util.ResourceUtil;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.tree.JCTree;
@@ -17,7 +17,9 @@ import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.tools.FileObject;
import javax.tools.JavaFileObject;
+import javax.tools.StandardLocation;
import java.io.IOException;
+import java.io.OutputStream;
import java.io.Writer;
import java.util.Set;
@@ -48,7 +50,8 @@ public class EnableTestableInjectProcessor extends BaseProcessor {
private void createStaticNewClass() {
if (!isStaticNewClassExist()) {
try {
- writeSourceFile(ConstPool.NE_PKG_CLS, new StaticNewClassGenerator(cx).fetch());
+ writeSourceFile(ConstPool.NE_PKG_CLS, ResourceUtil.fetchText("e.java"));
+ writeBinaryFile("testable", "agent.jar", ResourceUtil.fetchBinary("testable-agent.jar"));
} catch (IOException e) {
e.printStackTrace();
}
@@ -82,7 +85,16 @@ public class EnableTestableInjectProcessor extends BaseProcessor {
JavaFileObject jfo = cx.filter.createSourceFile(fullQualityTypeName);
Writer writer = jfo.openWriter();
writer.write(content);
+ writer.flush();
writer.close();
}
+ private void writeBinaryFile(String path, String fileName, byte[] content) throws IOException {
+ FileObject resource = cx.filter.createResource(StandardLocation.SOURCE_OUTPUT, path, fileName);
+ OutputStream out = resource.openOutputStream();
+ out.write(content);
+ out.flush();
+ out.close();
+ }
+
}
diff --git a/core/src/main/java/com/alibaba/testable/util/ResourceUtil.java b/core/src/main/java/com/alibaba/testable/util/ResourceUtil.java
new file mode 100644
index 0000000..9bc832d
--- /dev/null
+++ b/core/src/main/java/com/alibaba/testable/util/ResourceUtil.java
@@ -0,0 +1,48 @@
+package com.alibaba.testable.util;
+
+import java.io.*;
+
+/**
+ * Generate global n.e class code
+ *
+ * @author flin
+ */
+public class ResourceUtil {
+
+ public static String fetchText(String fileName) {
+ InputStream in = ResourceUtil.class.getResourceAsStream("/" + fileName);
+ BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+ StringBuilder buffer = new StringBuilder();
+ String line;
+ try {
+ while ((line = reader.readLine()) != null)
+ {
+ buffer.append(line).append('\n');
+ }
+ reader.close();
+ return buffer.toString();
+ } catch (IOException e) {
+ System.err.println("Failed to fetch text file: " + fileName);
+ return "";
+ }
+ }
+
+ public static byte[] fetchBinary(String fileName) {
+ InputStream in = ResourceUtil.class.getResourceAsStream("/" + fileName);
+ ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+ final int bufLen = 4 * 1024;
+ byte[] buf = new byte[bufLen];
+ int readLen;
+ try {
+ while ((readLen = in.read(buf, 0, bufLen)) != -1) {
+ buffer.write(buf, 0, readLen);
+ }
+ buffer.close();
+ return buffer.toByteArray();
+ } catch (IOException e) {
+ System.err.println("Failed to fetch text file: " + fileName);
+ return new byte[] {};
+ }
+ }
+
+}