In discussions about future directions for CONSTANT_Dynamic, we've decided it
would be helpful to restrict the set of legal bootstrap signatures. The first
parameter type would be required to be declared with type MethodHandles.Lookup.
See [1] for further discussion.
Here's the proposed spec change:
--------
1. _R_ gives a symbolic reference to a bootstrap method handle. The bootstrap
method handle is resolved ([5.4.3.5]) to obtain a `reference` to an instance of
`java.lang.invoke.MethodHandle`.
Any exception that can be thrown as a result of failure of resolution of a
symbolic reference to a method handle can be thrown in this step.
**If _R_ is a symbolic reference to a dynamically-computed constant, then
it must be the case that the first parameter type of the
`java.lang.invoke.MethodType` of the `java.lang.invoke.MethodHandle` is a
`Class` representing the class `java.lang.invoke.MethodHandles$Lookup`. If not,
resolution fails with a `BootstrapMethodError`.**
> **In contrast, for historical reasons, a dynamically-computed call site
may be resolved using a bootstrap method handle whose first parameter type is
`Object` or some other compatible type, as determined by the
`invokeWithArguments` invocation described below.**
--------
—Dan
[1] https://bugs.openjdk.java.net/browse/JDK-8199051