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.buck...@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.buck...@oracle.com >> <mailto:alex.buck...@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 >> >> >>