package gw.plugin.ij.util.transform.java;
import com.sun.source.tree.CompilationUnitTree;
import com.sun.tools.javac.api.JavacTaskImpl;
import com.sun.tools.javac.api.JavacTool;
import gw.plugin.ij.util.transform.java.Visitor.GosuVisitor;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
public class GosuVisitorTestUtil {
public String transform(String jsrc) throws IOException {
String src = readFile(jsrc);
if (src == null) {
return null;
}
JavaCompiler compiler = JavacTool.create();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
ArrayList<JavaStringObject> javaStringObjects = new ArrayList<JavaStringObject>();
javaStringObjects.add(new JavaStringObject(src));
Iterable<? extends JavaFileObject> compilationUnits = javaStringObjects;
StringWriter errors = new StringWriter();
JavaCompiler.CompilationTask task = compiler.getTask(errors, fileManager, null, null, null, compilationUnits);
JavacTaskImpl javacTask = (JavacTaskImpl) task;
String output = "";
try {
Iterable<? extends CompilationUnitTree> trees = javacTask.parse();
if (errors.toString().isEmpty()) {
GosuVisitor visitor = new GosuVisitor(4);
for (CompilationUnitTree tree : trees) {
tree.accept(visitor, null);
}
fileManager.close();
output = visitor.getOutput().toString();
}
} catch (IOException e) {
e.printStackTrace();
}
return output;
}
public String readFile(String path) throws FileNotFoundException {
InputStream in = getClass().getClassLoader().getResourceAsStream(path);
StringBuilder src = new StringBuilder();
Scanner scanner = null;
try {
scanner = new Scanner(in, "UTF-8");
while (scanner.hasNextLine()) {
src.append(scanner.nextLine() + "\n");
}
} finally {
scanner.close();
}
return src.toString();
}
}