Search in sources :

Example 6 with DiagnosticListener

use of javax.tools.DiagnosticListener in project lombok by rzwitserloot.

the class CompilerMessageSuppressor method disableLoggers.

public boolean disableLoggers() {
    contextDiagnosticListener = context.get(DiagnosticListener.class);
    context.put(DiagnosticListener.class, (DiagnosticListener<?>) null);
    if (dontBother)
        return false;
    boolean dontBotherInstance = false;
    PrintWriter dummyWriter = new PrintWriter(new OutputStream() {

        @Override
        public void write(int b) throws IOException {
        // Do nothing on purpose
        }
    });
    if (deferDiagnosticsField != null)
        try {
            if (Boolean.TRUE.equals(deferDiagnosticsField.get(log))) {
                queueCache.set((Queue<?>) deferredDiagnosticsField.get(log));
                Queue<?> empty = new LinkedList<Object>();
                deferredDiagnosticsField.set(log, empty);
            }
        } catch (Exception e) {
        }
    if (diagnosticHandlerField != null)
        try {
            Object handler = diagnosticHandlerField.get(log);
            Field field = getDeferredField(handler);
            if (field != null) {
                queueCache.set((Queue<?>) field.get(handler));
                Queue<?> empty = new LinkedList<Object>();
                field.set(handler, empty);
            }
        } catch (Exception e) {
        }
    if (!dontBotherInstance)
        try {
            errWriter = (PrintWriter) errWriterField.get(log);
            errWriterField.set(log, dummyWriter);
        } catch (Exception e) {
            dontBotherInstance = true;
        }
    if (!dontBotherInstance)
        try {
            warnWriter = (PrintWriter) warnWriterField.get(log);
            warnWriterField.set(log, dummyWriter);
        } catch (Exception e) {
            dontBotherInstance = true;
        }
    if (!dontBotherInstance)
        try {
            noticeWriter = (PrintWriter) noticeWriterField.get(log);
            noticeWriterField.set(log, dummyWriter);
        } catch (Exception e) {
            dontBotherInstance = true;
        }
    if (!dontBotherInstance)
        try {
            dumpOnError = (Boolean) dumpOnErrorField.get(log);
            dumpOnErrorField.set(log, false);
        } catch (Exception e) {
            dontBotherInstance = true;
        }
    if (!dontBotherInstance)
        try {
            promptOnError = (Boolean) promptOnErrorField.get(log);
            promptOnErrorField.set(log, false);
        } catch (Exception e) {
            dontBotherInstance = true;
        }
    if (!dontBotherInstance)
        try {
            logDiagnosticListener = (DiagnosticListener<?>) diagnosticListenerField.get(log);
            diagnosticListenerField.set(log, null);
        } catch (Exception e) {
            dontBotherInstance = true;
        }
    if (dontBotherInstance)
        enableLoggers();
    return !dontBotherInstance;
}
Also used : OutputStream(java.io.OutputStream) DiagnosticListener(javax.tools.DiagnosticListener) IOException(java.io.IOException) IOException(java.io.IOException) Field(java.lang.reflect.Field) JavaFileObject(javax.tools.JavaFileObject) Queue(java.util.Queue) PrintWriter(java.io.PrintWriter)

Example 7 with DiagnosticListener

use of javax.tools.DiagnosticListener 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();
}
Also used : SimpleJavaFileObject(javax.tools.SimpleJavaFileObject) Trees(com.sun.source.util.Trees) TreeScanner(com.sun.source.util.TreeScanner) CompilationUnitTree(com.sun.source.tree.CompilationUnitTree) JavaCompiler(javax.tools.JavaCompiler) Diagnostic(javax.tools.Diagnostic) DiagnosticListener(javax.tools.DiagnosticListener) SimpleJavaFileObject(javax.tools.SimpleJavaFileObject) JavaFileObject(javax.tools.JavaFileObject) TreeScanner(com.sun.source.util.TreeScanner) ErroneousTree(com.sun.source.tree.ErroneousTree) JavacTask(com.sun.source.util.JavacTask)

Example 8 with DiagnosticListener

use of javax.tools.DiagnosticListener in project ceylon-compiler by ceylon.

the class JavahFileManager method create.

static JavahFileManager create(final DiagnosticListener<? super JavaFileObject> dl, PrintWriter log) {
    Context javac_context = new Context();
    if (dl != null)
        javac_context.put(DiagnosticListener.class, dl);
    javac_context.put(com.sun.tools.javac.util.Log.outKey, log);
    return new JavahFileManager(javac_context, null);
}
Also used : Context(com.sun.tools.javac.util.Context) DiagnosticListener(javax.tools.DiagnosticListener)

Example 9 with DiagnosticListener

use of javax.tools.DiagnosticListener in project ceylon-compiler by ceylon.

the class JavapTask method getDiagnosticListenerForWriter.

private DiagnosticListener<JavaFileObject> getDiagnosticListenerForWriter(Writer w) {
    final PrintWriter pw = getPrintWriterForWriter(w);
    return new DiagnosticListener<JavaFileObject>() {

        public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
            switch(diagnostic.getKind()) {
                case ERROR:
                    pw.print(getMessage("err.prefix"));
                    break;
                case WARNING:
                    pw.print(getMessage("warn.prefix"));
                    break;
                case NOTE:
                    pw.print(getMessage("note.prefix"));
                    break;
            }
            pw.print(" ");
            pw.println(diagnostic.getMessage(null));
        }
    };
}
Also used : JavaFileObject(javax.tools.JavaFileObject) Diagnostic(javax.tools.Diagnostic) DiagnosticListener(javax.tools.DiagnosticListener) PrintWriter(java.io.PrintWriter)

Example 10 with DiagnosticListener

use of javax.tools.DiagnosticListener in project ceylon-compiler by ceylon.

the class CeyloncTool method getStandardFileManager.

public JavacFileManager getStandardFileManager(Writer out, DiagnosticListener<? super JavaFileObject> diagnosticListener, Locale locale, Charset charset) {
    Context context = new Context();
    if (diagnosticListener != null)
        context.put(DiagnosticListener.class, diagnosticListener);
    // make sure we set the out before someone else sets a default one, or uses one
    if (context.get(Log.outKey) == null) {
        if (out == null)
            context.put(Log.outKey, new PrintWriter(System.err, true));
        else
            context.put(Log.outKey, new PrintWriter(out, true));
    }
    CeylonLog.preRegister(context);
    return new CeyloncFileManager(context, true, charset);
}
Also used : Context(com.sun.tools.javac.util.Context) DiagnosticListener(javax.tools.DiagnosticListener) PrintWriter(java.io.PrintWriter)

Aggregations

DiagnosticListener (javax.tools.DiagnosticListener)10 JavaFileObject (javax.tools.JavaFileObject)6 Context (com.sun.tools.javac.util.Context)4 PrintWriter (java.io.PrintWriter)4 Diagnostic (javax.tools.Diagnostic)4 IOException (java.io.IOException)3 JavaCompiler (javax.tools.JavaCompiler)3 OutputStream (java.io.OutputStream)2 SimpleJavaFileObject (javax.tools.SimpleJavaFileObject)2 ImmutableList (com.google.common.collect.ImmutableList)1 Main (com.redhat.ceylon.compiler.java.launcher.Main)1 CompilationUnitTree (com.sun.source.tree.CompilationUnitTree)1 ErroneousTree (com.sun.source.tree.ErroneousTree)1 JavacTask (com.sun.source.util.JavacTask)1 TreeScanner (com.sun.source.util.TreeScanner)1 Trees (com.sun.source.util.Trees)1 File (java.io.File)1 InputStream (java.io.InputStream)1 StringWriter (java.io.StringWriter)1 Writer (java.io.Writer)1