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