Hi Alan,

On 07/18/2016 08:42 AM, Alan Bateman wrote:
On 17/07/2016 23:36, Peter Levart wrote:

:

Here's an alternative implementation that does not need to define the class in the VM:

http://cr.openjdk.java.net/~plevart/jdk9-jake/Module.annotations/webrev.02/

It instead modifies AnnotationParser to use a special AnnotationParser.ConstantPool interface which is implemented by two classes: a classical reflection ConstantPool backed by VM and a lightweight Java-only implementation which is used to parse module-info.class. So while parsing module-info.class, the RuntimeVisibleAnnotations attribute is extracted and memorized in ModuleDescriptor. Together with the lightweight ConstantPool implementation, they are used in Module to parse the annotations when 1st requiested.

It is more involved than current implementation, but it is also lighter and might be extended to support - let's call them annotation-descriptors - on ModuleDescriptor.

What do you think?
One of the initial prototypes that we did was to have jdk.internal.reflect.ConstantPool backed by the constant pool in the module-info.class so that the raw annotations + constant pool could be used with the existing parser. So not too dissimilar to what you have in this patch.

With the proposal to keep things simple (in particular, not impacting ModuleDescriptor, Builder, ...) then it opened up the door for a much simpler implementations, hence the current implementation.

It is simpler, yes, but feels like overkill to create new class loader and transform and load a class in order to just parse annotations from it...


BTW: I see you've changed Module to implement GenericDeclaration rather than AnnotatedElement. I'm curious about.

This was just to simplify changes in sun.reflect.generics.factory.CoreReflectionFactory (used by AnnotationParser) which takes a GenericDeclaration. But it is odd to have a useless method that always returns an empty array, so a variant is to implement just AnnotatedElement and have an explicit Module field in CoreReflectionFactory:

http://cr.openjdk.java.net/~plevart/jdk9-jake/Module.annotations/webrev.03/

Regards, Peter


-Alan

Reply via email to