module-info.class file format
Remi Forax
forax at univ-mlv.fr
Sun May 29 21:40:09 UTC 2016
And I've forgotten another important point,
initially ACC_MODULE was thought to be used not only on classes but also on fields and methods (defining an access level).
The idea to use module as a visibility modifier was lost after several iteration of jigsaw but it's value in binary 0x8000 stay the same.
0x8000 is a great value because before JDK9 the value was not defined as a possible values for a class, a method and a field.
Now, using 0x8000 to specify a flag that is only valid on a class seems a waste, 0x0008, 0x0040, 0x0080, 0x0100, 0x0800 are all not defined for a class and will allow to save 0x8000 for a future use.
So i propose to change ACC_MODULE for one of those value.
cheers,
Rémi
----- Mail original -----
> De: "Remi Forax" <forax at univ-mlv.fr>
> À: jpms-spec-experts at openjdk.java.net
> Envoyé: Dimanche 29 Mai 2016 14:18:35
> Objet: module-info.class file format
>
> Hi all,
> I've implemented the reading/writing of the class file format of a module in
> ASM,
> it was very straightforward, but let me summarize what can be improved:
>
> - the current spec only specifies the Module attribute, not how the main
> class or the version (by example) are specified.
> Moreover, these values are currently implemented as custom attributes of
> the class and not as attribute of the Module attribute,
> which seems more logical (like Code is an attribute of a Method).
> So currently, if ASM wants to just followed the spec, it can not provide a
> way for a user to specify the main class or the module version of a
> module.
>
> - the module name is specified as a part of a constant pool entry which is
> tagged as a Class [1] instead of being specified as a UTF8, like the
> required dependencies by example.
> The spec should be changed so the module name is not extracted from the
> class name but encoded as a UTF8 in the Module attribute.
> It will also make life of users of tools like ASM easier, encoding the
> module name as package of the module-info breaks an important invariant,
> the name of the resource and the name inside the .class are the same. This
> is not true anymore with a module-info so tools need to be updated to
> avoid to write module-info.class
> inside a package corresponding to the name of the module.
>
> cheers,
> Rémi
>
> [1] https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4.1
>
More information about the jpms-spec-experts
mailing list