- 
    CSR 
- 
    Resolution: Approved
- 
     P3 P3
- 
    None
- 
        behavioral
- 
        minimal
- 
        Java API
- 
        SE
Summary
Clarify exception handling of ConstantBootstraps.invoke, specifically the cases when a WrongMethodTypeException and ClassCastException may occur. In the former case the specification appeals to MethodHandle.asType for adjustment of the return type.
Specification
Difference:
--- a/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java  Mon Mar 12 16:09:18 2018 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java  Tue Mar 13 11:27:34 2018 -0700
@@ -208,20 +208,25 @@
     /**
      * Returns the result of invoking a method handle with the provided
      * arguments.
+     * <p>
+     * This method behaves as if the method handle to be invoked is the result
+     * of adapting the given method handle, via {@link MethodHandle#asType}, to
+     * adjust the return type to the desired type.
      *
      * @param lookup unused
      * @param name unused
-     * @param type the type of the value to be returned, which must be
+     * @param type the desired type of the value to be returned, which must be
      * compatible with the return type of the method handle
      * @param handle the method handle to be invoked
      * @param args the arguments to pass to the method handle, as if with
      * {@link MethodHandle#invokeWithArguments}.  Each argument may be
      * {@code null}.
      * @return the result of invoking the method handle
-     * @throws WrongMethodTypeException if the handle's return type cannot be
-     * adjusted to the desired type
-     * @throws ClassCastException if an argument cannot be converted by
-     * reference casting
+     * @throws WrongMethodTypeException if the handle's method type cannot be
+     * adjusted to take the given number of arguments, or if the handle's return
+     * type cannot be adjusted to the desired type
+     * @throws ClassCastException if an argument or the result produced by
+     * invoking the handle cannot be converted by reference casting
      * @throws Throwable anything thrown by the method handle invocation
      */
     public static Object invoke(MethodHandles.Lookup lookup, String name, Class<?> type,New:
/**
 * Returns the result of invoking a method handle with the provided
 * arguments.
 * <p>
 * This method behaves as if the method handle to be invoked is the result
 * of adapting the given method handle, via {@link MethodHandle#asType}, to
 * adjust the return type to the desired type.
 *
 * @param lookup unused
 * @param name unused
 * @param type the desired type of the value to be returned, which must be
 * compatible with the return type of the method handle
 * @param handle the method handle to be invoked
 * @param args the arguments to pass to the method handle, as if with
 * {@link MethodHandle#invokeWithArguments}.  Each argument may be
 * {@code null}.
 * @return the result of invoking the method handle
 * @throws WrongMethodTypeException if the handle's method type cannot be
 * adjusted to take the given number of arguments, or if the handle's return
 * type cannot be adjusted to the desired type
 * @throws ClassCastException if an argument or the result produced by
 * invoking the handle cannot be converted by reference casting
 * @throws Throwable anything thrown by the method handle invocation
 */
public static Object invoke(MethodHandles.Lookup lookup, String name, Class<?> type,
                            MethodHandle handle, Object... args) throws Throwable {- csr of
- 
                    JDK-8198889 Clarify the throwing of exceptions from ConstantBootstraps.invoke -           
- Resolved
 
-