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