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