Flag missing with "requires java.base"?
Paul Benedict
pbenedict at apache.org
Fri Jul 29 19:53:09 UTC 2016
Ahh. I now see that paragraph you're referencing. I somehow was glossing
over that and giving more attention to the attributes section where that
distinction wasn't called out. That's a great help Alex, thanks for your
direction.
Cheers,
Paul
On Fri, Jul 29, 2016 at 2:27 PM, Alex Buckley <alex.buckley at oracle.com>
wrote:
> You can determine that. The "Modules in the Java Language and JVM"
> document specifies when ACC_MANDATED is present and when it isn't.
> (Channeling Neal, the document is acting as a mini compiler spec when it
> says "then a compiler must emit ...".)
>
> Alex
>
> On 7/29/2016 12:18 PM, Paul Benedict wrote:
>
>> Okay. So I was hoping to look at any module-info.class and determine
>> whether "requires java.base" was source code explicit or merely a
>> compiler shim. I understand this particular "requires" is ACC_MANDATED,
>> but it seems there is not a way to trace back to the actual source code.
>> I consider this a loss of information. I was really hoping ACC_SYNTHETIC
>> could/would be used to capture the difference. Is there any recourse here?
>>
>> Cheers,
>> Paul
>>
>> On Fri, Jul 29, 2016 at 1:34 PM, Alex Buckley <alex.buckley at oracle.com
>> <mailto:alex.buckley at oracle.com>> wrote:
>>
>> On 7/29/2016 12:48 AM, Andrew Dinn wrote:
>>
>> It might be worth pointing out at this stage in the discussion
>> that
>> ACC_SYNTHETIC was never given a hard and fast meaning whose logic
>> transcends the vagaries of what javac decided to use it for --
>> citation,
>> Neal Gafter in a thread I was involved in many years ago on the
>> meaning
>> of this term:
>>
>> Said definition:
>>
>>
>> http://mail.openjdk.java.net/pipermail/compiler-dev/2010-August/002257.html
>>
>> and explanation:
>>
>>
>> http://mail.openjdk.java.net/pipermail/compiler-dev/2010-August/002258.html
>>
>>
>> On the contrary, Neal and I agree on the hard and fast meaning of
>> ACC_SYNTHETIC. The second link says:
>>
>> "As a simple example, the compiler-provided default constructor is
>> added by the compiler, but it is not synthetic because it is
>> supposed to be visible for the purposes of the language. The
>> synthetic flag was systematically added to precisely those symbols
>> that should not be visible in the language."
>>
>> The default ctor, specified in JLS 8.8.9, is not present in source
>> code but is nevertheless not marked as ACC_SYNTHETIC. It is the
>> poster child for ACC_MANDATED. In terms of the first link, the
>> default ctor is plainly used for semantic analysis so ACC_SYNTHETIC
>> is inappropriate.
>>
>> The problem is that I can't go back in time to JVMS1 and add
>> ACC_MANDATED to ClassFile.access_flags, field_info.access_flags, and
>> method_info.access_flags. There are some classes, fields, and
>> methods on this Earth marked ACC_SYNTHETIC which "should" be
>> ACC_MANDATED because they're JLS-defined. As we define new class
>> file artifacts, we can specify the ACC_SYNTHETIC mask and the
>> ACC_MANDATED mask to allow more precise recording of "origin".
>>
>> Alex
>>
>>
>>
More information about the jigsaw-dev
mailing list