Search in sources :

Example 16 with JavaCompiler

use of com.sun.tools.javac.main.JavaCompiler in project ceylon-compiler by ceylon.

the class LanguageCompiler method instance.

/** Get the JavaCompiler instance for this context. */
public static JavaCompiler instance(Context context) {
    Options options = Options.instance(context);
    options.put("-Xprefer", "source");
    // make sure it's registered
    CeylonLog.instance(context);
    CeylonEnter.instance(context);
    CeylonClassWriter.instance(context);
    JavaCompiler instance = context.get(compilerKey);
    if (instance == null)
        instance = new LanguageCompiler(context);
    return instance;
}
Also used : Options(com.sun.tools.javac.util.Options) JavaCompiler(com.sun.tools.javac.main.JavaCompiler)

Example 17 with JavaCompiler

use of com.sun.tools.javac.main.JavaCompiler in project ceylon-compiler by ceylon.

the class JavacProcessingEnvironment method doProcessing.

// TODO: internal catch clauses?; catch and rethrow an annotation
// processing error
public JavaCompiler doProcessing(Context context, List<JCCompilationUnit> roots, List<ClassSymbol> classSymbols, Iterable<? extends PackageSymbol> pckSymbols) {
    TaskListener taskListener = context.get(TaskListener.class);
    log = Log.instance(context);
    Set<PackageSymbol> specifiedPackages = new LinkedHashSet<PackageSymbol>();
    for (PackageSymbol psym : pckSymbols) specifiedPackages.add(psym);
    this.specifiedPackages = Collections.unmodifiableSet(specifiedPackages);
    Round round = new Round(context, roots, classSymbols);
    boolean errorStatus;
    boolean moreToDo;
    do {
        // Run processors for round n
        round.run(false, false);
        // Processors for round n have run to completion.
        // Check for errors and whether there is more work to do.
        errorStatus = round.unrecoverableError();
        moreToDo = moreToDo();
        round.showDiagnostics(errorStatus || showResolveErrors);
        // Set up next round.
        // Copy mutable collections returned from filer.
        round = round.next(new LinkedHashSet<JavaFileObject>(filer.getGeneratedSourceFileObjects()), new LinkedHashMap<String, JavaFileObject>(filer.getGeneratedClasses()));
        // Check for errors during setup.
        if (round.unrecoverableError())
            errorStatus = true;
    } while (moreToDo && !errorStatus);
    // run last round
    round.run(true, errorStatus);
    round.showDiagnostics(true);
    filer.warnIfUnclosedFiles();
    warnIfUnmatchedOptions();
    /*
         * If an annotation processor raises an error in a round,
         * that round runs to completion and one last round occurs.
         * The last round may also occur because no more source or
         * class files have been generated.  Therefore, if an error
         * was raised on either of the last *two* rounds, the compile
         * should exit with a nonzero exit code.  The current value of
         * errorStatus holds whether or not an error was raised on the
         * second to last round; errorRaised() gives the error status
         * of the last round.
         */
    if (messager.errorRaised() || werror && round.warningCount() > 0 && round.errorCount() > 0)
        errorStatus = true;
    Set<JavaFileObject> newSourceFiles = new LinkedHashSet<JavaFileObject>(filer.getGeneratedSourceFileObjects());
    roots = cleanTrees(round.roots);
    JavaCompiler compiler = round.finalCompiler(errorStatus);
    if (newSourceFiles.size() > 0)
        roots = roots.appendList(compiler.parseFiles(newSourceFiles));
    errorStatus = errorStatus || (compiler.errorCount() > 0);
    // Free resources
    this.close();
    if (taskListener != null)
        taskListener.finished(new TaskEvent(TaskEvent.Kind.ANNOTATION_PROCESSING));
    if (errorStatus) {
        if (compiler.errorCount() == 0)
            compiler.log.nerrors++;
        return compiler;
    }
    if (procOnly && !foundTypeProcessors) {
        compiler.todo.clear();
    } else {
        if (procOnly && foundTypeProcessors)
            compiler.shouldStopPolicy = CompileState.FLOW;
        compiler.enterTrees(roots);
    }
    return compiler;
}
Also used : JavaFileObject(javax.tools.JavaFileObject) TaskListener(com.sun.source.util.TaskListener) TaskEvent(com.sun.source.util.TaskEvent) JavaCompiler(com.sun.tools.javac.main.JavaCompiler)

Example 18 with JavaCompiler

use of com.sun.tools.javac.main.JavaCompiler in project ceylon-compiler by ceylon.

the class T6358166 method test.

static void test(JavacFileManager fm, JavaFileObject f, String... args) throws Throwable {
    Context context = new Context();
    fm.setContext(context);
    Main compilerMain = new Main("javac", new PrintWriter(System.err, true));
    compilerMain.setOptions(Options.instance(context));
    compilerMain.filenames = new ListBuffer<File>();
    compilerMain.processArgs(args);
    JavaCompiler c = JavaCompiler.instance(context);
    c.compile(List.of(f));
    if (c.errorCount() != 0)
        throw new AssertionError("compilation failed");
    long msec = c.elapsed_msec;
    if (// allow test 5 mins to execute, should be more than enough!
    msec < 0 || msec > 5 * 60 * 1000)
        throw new AssertionError("elapsed time is suspect: " + msec);
}
Also used : JavaCompiler(com.sun.tools.javac.main.JavaCompiler)

Aggregations

JavaCompiler (com.sun.tools.javac.main.JavaCompiler)18 JavacTaskImpl (com.sun.tools.javac.api.JavacTaskImpl)4 JavaFileObject (javax.tools.JavaFileObject)4 Field (java.lang.reflect.Field)3 CompletionFailure (com.sun.tools.javac.code.Symbol.CompletionFailure)2 JavacFileManager (com.sun.tools.javac.file.JavacFileManager)2 BadClassFile (com.sun.tools.javac.jvm.ClassReader.BadClassFile)2 Context (com.sun.tools.javac.util.Context)2 File (java.io.File)2 JavaFileManager (javax.tools.JavaFileManager)2 EnvironmentException (com.redhat.ceylon.compiler.EnvironmentException)1 RepositoryException (com.redhat.ceylon.model.cmr.RepositoryException)1 CompilationUnitTree (com.sun.source.tree.CompilationUnitTree)1 MethodTree (com.sun.source.tree.MethodTree)1 TaskEvent (com.sun.source.util.TaskEvent)1 TaskListener (com.sun.source.util.TaskListener)1 TreePathScanner (com.sun.source.util.TreePathScanner)1 Symbol (com.sun.tools.javac.code.Symbol)1 ClassSymbol (com.sun.tools.javac.code.Symbol.ClassSymbol)1 Type (com.sun.tools.javac.code.Type)1