incompatible change coming in javac: invokedynamic calls will declare "throws Throwable"
John.Rose at Sun.COM
Fri Jun 12 23:50:31 PDT 2009
In response to comments on coin-dev at openjdk.java.net about our
proposed Java language changes, I am changing the implicit methods of
InvokeDynamic.foo and MethodHandle.invoke to include a static
declaration of "throws Throwable". This aligns with the reality that
there is no framework of static checking for throws and catches that
applies to those calls; they are essentially dynamic and can throw
anything. It allows the Java language to incorporate those new
constructs much more accurately (with respect to the conventions of
the Java language).
I have retrofitted the code internal to the Sun JDK (from meth.patch,
etc.), and the exercise consisted of pasting in a bunch of "throws
Throwable" declarations in places where they did no harm (other than
to look a little ugly). The bytecodes are essentially unchanged;
there are no new catches or throws. For more information on the
language issues (and subsequent discussion, if any) please see coin-dev:
Please let me know if there are any other problems with this change,
for users of JSR 292.
More information about the mlvm-dev