mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8296743: Tighten Class.getModifiers spec for array classes
Reviewed-by: rriggs, mchung, heidinga
This commit is contained in:
parent
3a15e8483c
commit
6fd1442123
3 changed files with 171 additions and 37 deletions
|
@ -1296,17 +1296,21 @@ public final class Class<T> implements java.io.Serializable,
|
|||
* {@code abstract} and {@code interface}; they should be decoded
|
||||
* using the methods of class {@code Modifier}.
|
||||
*
|
||||
* <p> If the underlying class is an array class, then its
|
||||
* {@code public}, {@code private} and {@code protected}
|
||||
* modifiers are the same as those of its component type. If this
|
||||
* {@code Class} object represents a primitive type or void, its
|
||||
* {@code public} modifier is always {@code true}, and its
|
||||
* {@code protected} and {@code private} modifiers are always
|
||||
* {@code false}. If this {@code Class} object represents an array class, a
|
||||
* primitive type or void, then its {@code final} modifier is always
|
||||
* {@code true} and its interface modifier is always
|
||||
* {@code false}. The values of its other modifiers are not determined
|
||||
* by this specification.
|
||||
* <p> If the underlying class is an array class:
|
||||
* <ul>
|
||||
* <li> its {@code public}, {@code private} and {@code protected}
|
||||
* modifiers are the same as those of its component type
|
||||
* <li> its {@code abstract} and {@code final} modifiers are always
|
||||
* {@code true}
|
||||
* <li> its interface modifier is always {@code false}, even when
|
||||
* the component type is an interface
|
||||
* </ul>
|
||||
* If this {@code Class} object represents a primitive type or
|
||||
* void, its {@code public}, {@code abstract}, and {@code final}
|
||||
* modifiers are always {@code true}.
|
||||
* For {@code Class} objects representing void, primitive types, and
|
||||
* arrays, the values of other modifiers are {@code false} other
|
||||
* than as specified above.
|
||||
*
|
||||
* <p> The modifier encodings are defined in section {@jvms 4.1}
|
||||
* of <cite>The Java Virtual Machine Specification</cite>.
|
||||
|
@ -1320,6 +1324,7 @@ public final class Class<T> implements java.io.Serializable,
|
|||
* @since 1.1
|
||||
* @jls 8.1.1 Class Modifiers
|
||||
* @jls 9.1.1. Interface Modifiers
|
||||
* @jvms 4.1 The {@code ClassFile} Structure
|
||||
*/
|
||||
@IntrinsicCandidate
|
||||
public native int getModifiers();
|
||||
|
@ -1328,17 +1333,19 @@ public final class Class<T> implements java.io.Serializable,
|
|||
* {@return an unmodifiable set of the {@linkplain AccessFlag access
|
||||
* flags} for this class, possibly empty}
|
||||
*
|
||||
* <p> If the underlying class is an array class, then its
|
||||
* {@code PUBLIC}, {@code PRIVATE} and {@code PROTECTED}
|
||||
* access flags are the same as those of its component type. If this
|
||||
* {@code Class} object represents a primitive type or void, the
|
||||
* {@code PUBLIC} access flag is present, and the
|
||||
* {@code PROTECTED} and {@code PRIVATE} access flags are always
|
||||
* absent. If this {@code Class} object represents an array class, a
|
||||
* primitive type or void, then the {@code FINAL} access flag is always
|
||||
* present and the interface access flag is always
|
||||
* absent. The values of its other access flags are not determined
|
||||
* by this specification.
|
||||
* <p> If the underlying class is an array class:
|
||||
* <ul>
|
||||
* <li> its {@code PUBLIC}, {@code PRIVATE} and {@code PROTECTED}
|
||||
* access flags are the same as those of its component type
|
||||
* <li> its {@code ABSTRACT} and {@code FINAL} flags are present
|
||||
* <li> its {@code INTERFACE} flag is absent, even when the
|
||||
* component type is an interface
|
||||
* </ul>
|
||||
* If this {@code Class} object represents a primitive type or
|
||||
* void, the flags are {@code PUBLIC}, {@code ABSTRACT}, and
|
||||
* {@code FINAL}.
|
||||
* For {@code Class} objects representing void, primitive types, and
|
||||
* arrays, access flags are absent other than as specified above.
|
||||
*
|
||||
* @see #getModifiers()
|
||||
* @jvms 4.1 The ClassFile Structure
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue