On 05/20/2013 11:10 PM, Joe Darcy wrote:
Hello,

Please review the patch below which implements

    8014836: Have GenericDeclaration extend AnnotatedElement

All the existing implementations of GenericDeclaration in the JDK already implement AnnotatedElement. Some code in java.lang.Class needed to be adjusted slightly since AnnotatedElement declares a default method and calling an interface's default method in an implementing class has to go through the direct interface type.

GenericDeclaration is a public interface, so you will break the code of everyone that implements it.
By example, Guava's Invokable also implements GenericDeclaration
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/reflect/Invokable.html


Thanks,

-Joe

Rémi


--- a/src/share/classes/java/lang/Class.java Mon May 20 11:56:46 2013 -0700 +++ b/src/share/classes/java/lang/Class.java Mon May 20 14:07:15 2013 -0700
@@ -28,6 +28,7 @@
 import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Array;
 import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.GenericDeclaration;
 import java.lang.reflect.Member;
 import java.lang.reflect.Field;
 import java.lang.reflect.Executable;
@@ -115,9 +116,9 @@
  * @since   JDK1.0
  */
 public final class Class<T> implements java.io.Serializable,
- java.lang.reflect.GenericDeclaration,
-                              java.lang.reflect.Type,
-                              java.lang.reflect.AnnotatedElement {
+                              GenericDeclaration,
+                              Type,
+                              AnnotatedElement {
     private static final int ANNOTATION= 0x00002000;
     private static final int ENUM      = 0x00004000;
     private static final int SYNTHETIC = 0x00001000;
@@ -3182,7 +3183,7 @@
      */
     @Override
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) { - return AnnotatedElement.super.isAnnotationPresent(annotationClass); + return GenericDeclaration.super.isAnnotationPresent(annotationClass);
     }

     /**
diff -r 6a9148865139 src/share/classes/java/lang/reflect/GenericDeclaration.java --- a/src/share/classes/java/lang/reflect/GenericDeclaration.java Mon May 20 11:56:46 2013 -0700 +++ b/src/share/classes/java/lang/reflect/GenericDeclaration.java Mon May 20 14:07:15 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,7 +30,7 @@
  *
  * @since 1.5
  */
-public interface GenericDeclaration {
+public interface GenericDeclaration extends AnnotatedElement {
     /**
      * Returns an array of {@code TypeVariable} objects that
      * represent the type variables declared by the generic


Reply via email to