src/share/classes/java/lang/reflect/Executable.java

Print this page
rev 10466 : 8054987: (reflect) Add sharing of annotations between instances of Executable
Reviewed-by: duke

@@ -51,10 +51,15 @@
      * Accessor method to allow code sharing
      */
     abstract byte[] getAnnotationBytes();
 
     /**
+     * Accessor method to allow code sharing
+     */
+    abstract Executable getRoot();
+
+    /**
      * Does the Executable have generic information.
      */
     abstract boolean hasGenericInformation();
 
     abstract ConstructorRepository getGenericInfo();

@@ -538,16 +543,21 @@
 
     private transient Map<Class<? extends Annotation>, Annotation> declaredAnnotations;
 
     private synchronized  Map<Class<? extends Annotation>, Annotation> declaredAnnotations() {
         if (declaredAnnotations == null) {
+            Executable root = getRoot();
+            if (root != null) {
+                declaredAnnotations = root.declaredAnnotations();
+            } else {
             declaredAnnotations = AnnotationParser.parseAnnotations(
                 getAnnotationBytes(),
                 sun.misc.SharedSecrets.getJavaLangAccess().
                 getConstantPool(getDeclaringClass()),
                 getDeclaringClass());
         }
+        }
         return declaredAnnotations;
     }
 
     /**
      * Returns an {@code AnnotatedType} object that represents the use of a type to