Change in behavior of javax.tools.JavaCompiler in JDK 8 running with -proc:only ?

Boaz Nahum boaznahum at gmail.com
Wed Mar 12 10:00:50 UTC 2014


Thank you so much for your reply.

The simplest file that fails to compile is like this:

package wf.auto_testing_jsystem_tiny_test.tint_test;

import amat.jsystem.bbs_params.annotation.BuildingBlock;
import amat.jsystem.bbs_utils.infrastructure.BuildingBlockContext;

public class TinyTest {

    /**
     * A dummy comment
     */
    @BuildingBlock
    public static void loadBatchFromFile(BuildingBlockContext context,
String batchPath) throws Exception {

    }
}


one of the error messages  is:


*     ....\TinyTest.java:4: error: package
amat.jsystem.bbs_utils.infrastructure does not exist*

*     import amat.jsystem.bbs_utils.infrastructure.BuildingBlockContext;*
^

As I mentioned in my question, it is expected error, because we don't
supply all the necessary compilation dependencies(we can't) .

My question -again-, is That in JDK 7, it works perfect:
The errors above are reported only via
javax.tools.DiagnosticListener#report (not printed to the console)
javax.tools.JavaCompiler.CompilationTask#*call returns true*.

In JDK 8,
Same errors are reported both via javax.tools.DiagnosticListener#report and
are printed to the console,
javax.tools.JavaCompiler.CompilationTask#*call returns false*.

*In JDK 7*, If I omit '-proc:only', then I get the exact behavior *as JDK 8*,
that why I'm wondering, *maybe JDK 8 somehow ignore '-proc:only'*

Thank again
Boaz




On Tue, Mar 11, 2014 at 8:24 PM, Jonathan Gibbons <
jonathan.gibbons at oracle.com> wrote:

>  Boaz,
>
> In JDK 8, javac is more aggressive about reporting errors (and stopping
> the compilation) if the errors cannot be fixed by running annotation
> processors. This should not be an issue if you are using anno processors
> for generating code.
>
> What sort of errors are you seeing in your compilation?
>
> -- Jon
>
>
> On 03/11/2014 08:27 AM, Boaz Nahum wrote:
>
>   Hi
>
>  I hope some can give me hint how anlyse our probelms with JDK 8.
>
>  We use some code like this to do annotation processing (for generating
> code):
>
>              JavaCompiler.CompilationTask task =
>                 javaCompiler.getTask(null, fileManager, diagnostics,
> optionsAsList, null, compilationUnits);
>
>             BuildingBlockParamProcessor processor = new
> BuildingBlockParamProcessor();
>             List<Processor> processors = new ArrayList<Processor>();
>             processors.add(processor);
>             task.setProcessors(processors);
>   if(!task.call()){ .... }
>
>  The code we try to process won't be compile in regular environment - a
> lot of stuff is missing from classpath.
>  But that is OK, we use '-proc:only' and we *thought* that this what
> allows us to ignore the errors.
>
>
>  When we moved to JDK 8, the exact code fails,
> javax.tools.JavaCompiler.CompilationTask#call returns false.
>
>
> *My question, is a possibilty that '-proc:only' is ignored in JDK 8 ? *
>
> *Or maybe there is by-design change regarding annotation processing that
> we need to be aware of ? *
>  I want to mention that if the early EAP of JDK 8 , this code run without
> any problems.
>
>  (Moving to annotation processing during compilation is big effort for us)
>
>  Any tip/hint will be appreciatively accepted
>
>  Thanks
>  Boaz
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20140312/da5e00ff/attachment.html>


More information about the compiler-dev mailing list