Flag missing with "requires java.base"?

Alex Buckley alex.buckley at oracle.com
Fri Jul 29 19:27:16 UTC 2016


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