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