8151198: VarHandle factory-specific exceptions
Reviewed-by: shade
This commit is contained in:
parent
a7aff44bbb
commit
e10605459a
@ -154,7 +154,9 @@ import static java.lang.invoke.MethodHandleStatics.newInternalError;
|
|||||||
* supported, which may also include documenting restrictions based on the
|
* supported, which may also include documenting restrictions based on the
|
||||||
* variable type and whether a variable is read-only. If an access mode is not
|
* variable type and whether a variable is read-only. If an access mode is not
|
||||||
* supported then the corresponding signature-polymorphic method will on
|
* supported then the corresponding signature-polymorphic method will on
|
||||||
* invocation throw an {@code UnsupportedOperationException}.
|
* invocation throw an {@code UnsupportedOperationException}. Factory methods
|
||||||
|
* should document any additional undeclared exceptions that may be thrown by
|
||||||
|
* access mode methods.
|
||||||
* The {@link #get get} access mode is supported for all
|
* The {@link #get get} access mode is supported for all
|
||||||
* VarHandle instances and the corresponding method never throws
|
* VarHandle instances and the corresponding method never throws
|
||||||
* {@code UnsupportedOperationException}.
|
* {@code UnsupportedOperationException}.
|
||||||
@ -168,7 +170,7 @@ import static java.lang.invoke.MethodHandleStatics.newInternalError;
|
|||||||
* Unless stated otherwise in the documentation of a factory method, the access
|
* Unless stated otherwise in the documentation of a factory method, the access
|
||||||
* modes {@code get} and {@code set} (if supported) provide atomic access for
|
* modes {@code get} and {@code set} (if supported) provide atomic access for
|
||||||
* reference types and all primitives types, with the exception of {@code long}
|
* reference types and all primitives types, with the exception of {@code long}
|
||||||
* and {@code double} on 32-bit platforms
|
* and {@code double} on 32-bit platforms.
|
||||||
*
|
*
|
||||||
* <p>Access modes will override any memory ordering effects specified at
|
* <p>Access modes will override any memory ordering effects specified at
|
||||||
* the declaration site of a variable. For example, a VarHandle accessing a
|
* the declaration site of a variable. For example, a VarHandle accessing a
|
||||||
@ -467,6 +469,8 @@ public abstract class VarHandle {
|
|||||||
* , statically represented using {@code Object}.
|
* , statically represented using {@code Object}.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
*/
|
*/
|
||||||
public final native
|
public final native
|
||||||
@MethodHandle.PolymorphicSignature
|
@MethodHandle.PolymorphicSignature
|
||||||
@ -491,6 +495,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
*/
|
*/
|
||||||
public final native
|
public final native
|
||||||
@MethodHandle.PolymorphicSignature
|
@MethodHandle.PolymorphicSignature
|
||||||
@ -520,6 +526,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
*/
|
*/
|
||||||
public final native
|
public final native
|
||||||
@MethodHandle.PolymorphicSignature
|
@MethodHandle.PolymorphicSignature
|
||||||
@ -536,6 +544,10 @@ public abstract class VarHandle {
|
|||||||
* must match the access mode type that is the result of calling
|
* must match the access mode type that is the result of calling
|
||||||
* {@code accessModeType(VarHandle.AccessMode.setVolatile)} on this VarHandle.
|
* {@code accessModeType(VarHandle.AccessMode.setVolatile)} on this VarHandle.
|
||||||
*
|
*
|
||||||
|
* @apiNote
|
||||||
|
* Ignoring the many semantic differences from C and C++, this method has
|
||||||
|
* memory ordering effects compatible with {@code memory_order_seq_cst}.
|
||||||
|
*
|
||||||
* @param args the signature-polymorphic parameter list of the form
|
* @param args the signature-polymorphic parameter list of the form
|
||||||
* {@code (CT, T newValue)}
|
* {@code (CT, T newValue)}
|
||||||
* , statically represented using varargs.
|
* , statically represented using varargs.
|
||||||
@ -543,9 +555,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
* @apiNote Ignoring the many semantic differences from C and C++, this
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
* method has memory ordering effects compatible with
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* {@code memory_order_seq_cst}.
|
|
||||||
*/
|
*/
|
||||||
public final native
|
public final native
|
||||||
@MethodHandle.PolymorphicSignature
|
@MethodHandle.PolymorphicSignature
|
||||||
@ -573,6 +584,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
*/
|
*/
|
||||||
public final native
|
public final native
|
||||||
@MethodHandle.PolymorphicSignature
|
@MethodHandle.PolymorphicSignature
|
||||||
@ -597,6 +610,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
*/
|
*/
|
||||||
public final native
|
public final native
|
||||||
@MethodHandle.PolymorphicSignature
|
@MethodHandle.PolymorphicSignature
|
||||||
@ -616,6 +631,11 @@ public abstract class VarHandle {
|
|||||||
* must match the access mode type that is the result of calling
|
* must match the access mode type that is the result of calling
|
||||||
* {@code accessModeType(VarHandle.AccessMode.getAcquire)} on this VarHandle.
|
* {@code accessModeType(VarHandle.AccessMode.getAcquire)} on this VarHandle.
|
||||||
*
|
*
|
||||||
|
* @apiNote
|
||||||
|
* Ignoring the many semantic differences from C and C++, this method has
|
||||||
|
* memory ordering effects compatible with {@code memory_order_acquire}
|
||||||
|
* ordering.
|
||||||
|
*
|
||||||
* @param args the signature-polymorphic parameter list of the form
|
* @param args the signature-polymorphic parameter list of the form
|
||||||
* {@code (CT)}
|
* {@code (CT)}
|
||||||
* , statically represented using varargs.
|
* , statically represented using varargs.
|
||||||
@ -626,9 +646,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
* @apiNote Ignoring the many semantic differences from C and C++, this
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
* method has memory ordering effects compatible with
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* {@code memory_order_acquire} ordering.
|
|
||||||
*/
|
*/
|
||||||
public final native
|
public final native
|
||||||
@MethodHandle.PolymorphicSignature
|
@MethodHandle.PolymorphicSignature
|
||||||
@ -645,6 +664,11 @@ public abstract class VarHandle {
|
|||||||
* must match the access mode type that is the result of calling
|
* must match the access mode type that is the result of calling
|
||||||
* {@code accessModeType(VarHandle.AccessMode.setRelease)} on this VarHandle.
|
* {@code accessModeType(VarHandle.AccessMode.setRelease)} on this VarHandle.
|
||||||
*
|
*
|
||||||
|
* @apiNote
|
||||||
|
* Ignoring the many semantic differences from C and C++, this method has
|
||||||
|
* memory ordering effects compatible with {@code memory_order_release}
|
||||||
|
* ordering.
|
||||||
|
*
|
||||||
* @param args the signature-polymorphic parameter list of the form
|
* @param args the signature-polymorphic parameter list of the form
|
||||||
* {@code (CT, T newValue)}
|
* {@code (CT, T newValue)}
|
||||||
* , statically represented using varargs.
|
* , statically represented using varargs.
|
||||||
@ -652,9 +676,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
* @apiNote Ignoring the many semantic differences from C and C++, this
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
* method has memory ordering effects compatible with
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* {@code memory_order_release} ordering.
|
|
||||||
*/
|
*/
|
||||||
public final native
|
public final native
|
||||||
@MethodHandle.PolymorphicSignature
|
@MethodHandle.PolymorphicSignature
|
||||||
@ -687,6 +710,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* @see #setVolatile(Object...)
|
* @see #setVolatile(Object...)
|
||||||
* @see #getVolatile(Object...)
|
* @see #getVolatile(Object...)
|
||||||
*/
|
*/
|
||||||
@ -720,6 +745,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* @see #setVolatile(Object...)
|
* @see #setVolatile(Object...)
|
||||||
* @see #getVolatile(Object...)
|
* @see #getVolatile(Object...)
|
||||||
*/
|
*/
|
||||||
@ -753,6 +780,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* @see #set(Object...)
|
* @see #set(Object...)
|
||||||
* @see #getAcquire(Object...)
|
* @see #getAcquire(Object...)
|
||||||
*/
|
*/
|
||||||
@ -785,6 +814,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* @see #setRelease(Object...)
|
* @see #setRelease(Object...)
|
||||||
* @see #get(Object...)
|
* @see #get(Object...)
|
||||||
*/
|
*/
|
||||||
@ -822,6 +853,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* @see #set(Object...)
|
* @see #set(Object...)
|
||||||
* @see #get(Object...)
|
* @see #get(Object...)
|
||||||
*/
|
*/
|
||||||
@ -857,6 +890,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* @see #set(Object...)
|
* @see #set(Object...)
|
||||||
* @see #getAcquire(Object...)
|
* @see #getAcquire(Object...)
|
||||||
*/
|
*/
|
||||||
@ -892,6 +927,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* @see #setRelease(Object...)
|
* @see #setRelease(Object...)
|
||||||
* @see #get(Object...)
|
* @see #get(Object...)
|
||||||
*/
|
*/
|
||||||
@ -922,6 +959,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* @see #setVolatile(Object...)
|
* @see #setVolatile(Object...)
|
||||||
* @see #getVolatile(Object...)
|
* @see #getVolatile(Object...)
|
||||||
*/
|
*/
|
||||||
@ -956,6 +995,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* @see #setVolatile(Object...)
|
* @see #setVolatile(Object...)
|
||||||
* @see #getVolatile(Object...)
|
* @see #getVolatile(Object...)
|
||||||
*/
|
*/
|
||||||
@ -986,6 +1027,8 @@ public abstract class VarHandle {
|
|||||||
* for this VarHandle.
|
* for this VarHandle.
|
||||||
* @throws WrongMethodTypeException if the access mode type is not
|
* @throws WrongMethodTypeException if the access mode type is not
|
||||||
* compatible with the caller's symbolic type descriptor.
|
* compatible with the caller's symbolic type descriptor.
|
||||||
|
* @throws ClassCastException if the access mode type is compatible with the
|
||||||
|
* caller's symbolic type descriptor, but a reference cast fails.
|
||||||
* @see #setVolatile(Object...)
|
* @see #setVolatile(Object...)
|
||||||
* @see #getVolatile(Object...)
|
* @see #getVolatile(Object...)
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user