Flag missing with "requires java.base"?

Paul Benedict pbenedict at apache.org
Fri Jul 29 19:18:07 UTC 2016


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>
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