Change in behavior of javax.tools.JavaCompiler in JDK 8 running with -proc:only ?
Jonathan Gibbons
jonathan.gibbons at oracle.com
Wed Mar 12 19:25:00 UTC 2014
I'll file a bug, so that this gets investigated further. Jan's
comments about exit code handling are noteworthy.
-- Jon
On 03/12/2014 12:13 PM, Boaz Nahum wrote:
>
> I'm little confused- How should I continue, keep investigating and
> bring more info? Or take it as is ?
>
> Boaz
>
> On Mar 12, 2014 7:17 PM, "Jonathan Gibbons"
> <jonathan.gibbons at oracle.com <mailto:jonathan.gibbons at oracle.com>> wrote:
>
> This sounds like a possible bug, but I doubt it is related to
> -proc:only.
>
> In JDK 8 javac, diagnostics are classified as "recoverable" or
> not, depending on whether a diagnostic could conceivably go away
> if an annotation processor is run. It is possible that "package
> does not exist" is not being marked as a recoverable error. The
> other possibility is that the message is coming out of the last
> round of anno processing (before -proc:only) is kicking in.
>
> -- Jon
>
>
>
>
> On 03/12/2014 03:00 AM, Boaz Nahum wrote:
>> 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
>> <mailto: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/76af154d/attachment-0001.html>
More information about the compiler-dev
mailing list