use of com.sun.source.tree.CompilationUnitTree in project ceylon-compiler by ceylon.
the class T6402077 method main.
public static void main(String... args) throws IOException {
class MyFileObject extends SimpleJavaFileObject {
MyFileObject() {
super(URI.create("myfo:///Test.java"), SOURCE);
}
@Override
public String getCharContent(boolean ignoreEncodingErrors) {
// 0123456789012345678901234
return "class Test { Test() { } }";
}
}
JavaCompiler javac = ToolProvider.getSystemJavaCompiler();
List<JavaFileObject> compilationUnits = Collections.<JavaFileObject>singletonList(new MyFileObject());
JavacTask task = (JavacTask) javac.getTask(null, null, null, null, null, compilationUnits);
Trees trees = Trees.instance(task);
CompilationUnitTree toplevel = task.parse().iterator().next();
Tree tree = ((ClassTree) toplevel.getTypeDecls().get(0)).getMembers().get(0);
long pos = trees.getSourcePositions().getStartPosition(toplevel, tree);
if (pos != 13)
throw new AssertionError(String.format("Start pos for %s is incorrect (%s)!", tree, pos));
pos = trees.getSourcePositions().getEndPosition(toplevel, tree);
if (pos != 23)
throw new AssertionError(String.format("End pos for %s is incorrect (%s)!", tree, pos));
}
use of com.sun.source.tree.CompilationUnitTree in project ceylon-compiler by ceylon.
the class Test method test.
void test(File test) throws Exception {
JavacTool tool1 = JavacTool.create();
StandardJavaFileManager fm = tool1.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> files = fm.getJavaFileObjects(test);
// parse test file into a tree, and write it out to a stringbuffer using Pretty
JavacTask t1 = tool1.getTask(null, fm, null, null, null, files);
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
Iterable<? extends CompilationUnitTree> trees = t1.parse();
for (CompilationUnitTree tree : trees) {
new Pretty(pw, true).printExpr((JCTree) tree);
}
pw.close();
final String out = sw.toString();
System.err.println("generated code:\n" + out + "\n");
// verify the generated code is valid Java by compiling it
JavacTool tool2 = JavacTool.create();
JavaFileObject fo = new SimpleJavaFileObject(URI.create("output"), JavaFileObject.Kind.SOURCE) {
@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
return out;
}
};
JavacTask t2 = tool2.getTask(null, fm, null, null, null, Collections.singleton(fo));
boolean ok = t2.call();
if (!ok)
throw new Exception("compilation of generated code failed");
File expectedClass = new File(test.getName().replace(".java", ".class"));
if (!expectedClass.exists())
throw new Exception(expectedClass + " not found");
}
use of com.sun.source.tree.CompilationUnitTree in project ceylon-compiler by ceylon.
the class T6654037 method main.
public static void main(String[] args) throws Exception {
// NOI18N
final String bootPath = System.getProperty("sun.boot.class.path");
final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
assert tool != null;
String code = "package test; public class Test {private void test() {Object o = null; boolean b = o != null && o instanceof String;} private Test() {}}";
JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, Arrays.asList("-bootclasspath", bootPath, "-Xjcov"), null, Arrays.asList(new MyFileObject(code)));
CompilationUnitTree cut = ct.parse().iterator().next();
ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
MethodTree method = (MethodTree) clazz.getMembers().get(0);
VariableTree condSt = (VariableTree) method.getBody().getStatements().get(1);
BinaryTree cond = (BinaryTree) condSt.getInitializer();
JCTree condJC = (JCTree) cond;
if (condJC.pos != 93)
throw new IllegalStateException("Unexpected position=" + condJC.pos);
}
use of com.sun.source.tree.CompilationUnitTree in project ceylon-compiler by ceylon.
the class T6993301 method testExceptionParameterCorrectKind.
public void testExceptionParameterCorrectKind() throws IOException {
final String bootPath = System.getProperty("sun.boot.class.path");
final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
assert tool != null;
String code = "package test; public class Test { { try { } catch (NullPointerException ex) {} } }";
final JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, Arrays.asList("-bootclasspath", bootPath), null, Arrays.asList(new MyFileObject(code)));
CompilationUnitTree cut = ct.parse().iterator().next();
ct.analyze();
new TreePathScanner<Void, Void>() {
@Override
public Void visitVariable(VariableTree node, Void p) {
Element el = Trees.instance(ct).getElement(getCurrentPath());
assertNotNull(el);
assertEquals(ElementKind.EXCEPTION_PARAMETER, el.getKind());
return super.visitVariable(node, p);
}
}.scan(cut, null);
}
use of com.sun.source.tree.CompilationUnitTree in project ceylon-compiler by ceylon.
the class TestPos method main.
public static void main(String... args) throws IOException {
final boolean[] sawError = { false };
final StringBuilder log = new StringBuilder();
class MyFileObject extends SimpleJavaFileObject {
MyFileObject() {
super(URI.create("myfo:///Test.java"), SOURCE);
}
@Override
public String getCharContent(boolean ignoreEncodingErrors) {
// 0123456789012345678901234567890123456789012345678901234
return "class Test { { Object[] o = new <T,e,s,t>Object[0]; } }";
}
}
class Scanner extends TreeScanner<Void, Trees> {
CompilationUnitTree toplevel = null;
@Override
public Void visitCompilationUnit(CompilationUnitTree node, Trees trees) {
toplevel = node;
return super.visitCompilationUnit(node, trees);
}
@Override
public Void visitErroneous(ErroneousTree node, Trees trees) {
sawError[0] = true;
long startPos = trees.getSourcePositions().getStartPosition(toplevel, node);
long endPos = trees.getSourcePositions().getEndPosition(toplevel, node);
log.append(String.format("begin=%s, end=%s : %s%n", startPos, endPos, node.getErrorTrees()));
if (startPos != 28)
error("Start pos for %s is incorrect (%s)!", node, startPos);
if (endPos != 50)
error("End pos for %s is incorrect (%s)!", node, endPos);
return null;
}
}
JavaCompiler javac = ToolProvider.getSystemJavaCompiler();
List<JavaFileObject> compilationUnits = Collections.<JavaFileObject>singletonList(new MyFileObject());
DiagnosticListener<JavaFileObject> dl = new DiagnosticListener<JavaFileObject>() {
public void report(Diagnostic<? extends JavaFileObject> diag) {
log.append(String.format("%s @ %s%n", diag.getCode(), diag.getPosition()));
if (!diag.getCode().equals(errCode))
error("unexpected error");
if (diag.getPosition() != 33)
error("Error pos for %s is incorrect (%s)!", diag.getCode(), diag.getPosition());
sawError[0] = true;
}
};
JavacTask task = (JavacTask) javac.getTask(null, null, dl, null, null, compilationUnits);
Trees trees = Trees.instance(task);
Iterable<? extends Tree> toplevels = task.parse();
if (!sawError[0])
error("No parse error detected");
sawError[0] = false;
new Scanner().scan(toplevels, trees);
if (!sawError[0])
error("No error tree detected");
if (!log.toString().equals(expected))
error("Unexpected log message: %n%s%n", log);
System.out.print(log);
System.out.flush();
}
Aggregations