JDK 8 code review request for 8014836: Have GenericDeclaration extend AnnotatedElement

Remi Forax forax at univ-mlv.fr
Mon May 20 21:28:41 UTC 2013


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
>




More information about the core-libs-dev mailing list