CSR :
|
Summary ------- Update `ParameterizedType.getOwnerType()` and `AnnotatedType.getOwnerType()` docs to indicate they can return `null`, and top-level or local class or interface and anonymous class are (but not necessarily the only) scenarios where they do. Problem ------- 1. `ParameterizedType.getOwnerType()` may return `null`, and it does so for top level classes or interfaces, anonymous classes, and local classes or interfaces. However, the specification appears like `null` can only be returned for top-level classes or interfaces. 2. `AnnotatedParameterizedType.getOwnerType()` note describes an impossible scenario where it represents a primitive type or `void`. Solution -------- 1. Specify that `ParameterizedType.getOwnerType` may return `null`, and list those classes or interfaces as scenarios that it always return `null`. 2. Clarify those scenarios to be "top-level or local class or interface or anonymous class". 3. Remove the impossible primitive or `void` scenario in `AnnotatedParameterizedType.getOwnerType()`'s note. Specification ------------- diff --git a/src/java.base/share/classes/java/lang/reflect/AnnotatedParameterizedType.java b/src/java.base/share/classes/java/lang/reflect/AnnotatedParameterizedType.java index 1c62d3d131c..f6bd9d5dc3f 100644 --- a/src/java.base/share/classes/java/lang/reflect/AnnotatedParameterizedType.java +++ b/src/java.base/share/classes/java/lang/reflect/AnnotatedParameterizedType.java @@ -48,16 +48,13 @@ public interface AnnotatedParameterizedType extends AnnotatedType { AnnotatedType[] getAnnotatedActualTypeArguments(); /** - * Returns the potentially annotated type that this type is a member of, if - * this type represents a nested type. For example, if this type is + * {@return the potentially annotated type that this type is a member of, if + * this type represents a nested type, or {@code null}} For example, if this type is * {@code @TA O<T>.I<S>}, return a representation of {@code @TA O<T>}. * * <p>Returns {@code null} if this {@code AnnotatedType} represents a - * top-level class or interface, or a local or anonymous class, or - * a primitive type, or void. + * top-level or local class or interface or an anonymous class. * - * @return an {@code AnnotatedType} object representing the potentially - * annotated type that this type is a member of, or {@code null} * @throws TypeNotPresentException if the owner type * refers to a non-existent class or interface declaration * @throws MalformedParameterizedTypeException if the owner type diff --git a/src/java.base/share/classes/java/lang/reflect/AnnotatedType.java b/src/java.base/share/classes/java/lang/reflect/AnnotatedType.java index 9525d3638fd..bc563b731b6 100644 --- a/src/java.base/share/classes/java/lang/reflect/AnnotatedType.java +++ b/src/java.base/share/classes/java/lang/reflect/AnnotatedType.java @@ -50,12 +50,12 @@ public interface AnnotatedType extends AnnotatedElement { /** - * Returns the potentially annotated type that this type is a member of, if - * this type represents a nested type. For example, if this type is + * {@return the potentially annotated type that this type is a member of, if + * this type represents a nested type, or {@code null}} For example, if this type is * {@code @TA O<T>.I<S>}, return a representation of {@code @TA O<T>}. * * <p>Returns {@code null} if this {@code AnnotatedType} represents a - * top-level class or interface, or a local or anonymous class, or + * top-level or local class or interface or an anonymous class, or * a primitive type, or void. * * <p>Returns {@code null} if this {@code AnnotatedType} is an instance of @@ -66,8 +66,6 @@ public interface AnnotatedType extends AnnotatedElement { * This default implementation returns {@code null} and performs no other * action. * - * @return an {@code AnnotatedType} object representing the potentially - * annotated type that this type is a member of, or {@code null} * @throws TypeNotPresentException if the owner type * refers to a non-existent class or interface declaration * @throws MalformedParameterizedTypeException if the owner type diff --git a/src/java.base/share/classes/java/lang/reflect/ParameterizedType.java b/src/java.base/share/classes/java/lang/reflect/ParameterizedType.java index 99016623a3e..0e42fe9079b 100644 --- a/src/java.base/share/classes/java/lang/reflect/ParameterizedType.java +++ b/src/java.base/share/classes/java/lang/reflect/ParameterizedType.java @@ -76,15 +76,14 @@ public interface ParameterizedType extends Type { Type getRawType(); /** - * Returns a {@code Type} object representing the type that this type - * is a member of. For example, if this type is {@code O<T>.I<S>}, + * {@return a {@code Type} object representing the type that this type + * is a member of, or {@code null} if this type is not a member of + * another type} For example, if this type is {@code O<T>.I<S>}, * return a representation of {@code O<T>}. * - * <p>If this type is a top-level type, {@code null} is returned. + * <p>If this type is a top-level or local class or interface or + * an anonymous class, {@code null} is returned. * - * @return a {@code Type} object representing the type that - * this type is a member of. If this type is a top-level type, - * {@code null} is returned * @throws TypeNotPresentException if the owner type * refers to a non-existent class or interface declaration * @throws MalformedParameterizedTypeException if the owner type