On Fri, May 24, 2013 at 6:18 AM, Alan Bateman <alan.bate...@oracle.com>wrote:
> > The webrev with the proposed changes is here. As I mentioned in one of the > replies, there are 4 j.u.c tests that need to be updated so I've changed > these tests to use Unsafe.throwException. > Alan, you're telling everyone there's no need for Thread.stop, but you are replacing usages in tests with calls to Unsafe, which is not available to normal code. So you have a kind of moral obligation here to replace usages with "ordinary" java code. There are other ways to do sneakyThrow, and perhaps a sneakyRethrow method should be added to the jdk test library. Ordinary java code should be able to simply catch and rethrow a Throwable if type analysis can "prove" that the exception is not an Exception. As a data point, Doug uses this: (Doug, it's not obvious to me why you handle Error and RuntimeException specially) /** * A version of "sneaky throw" to relay exceptions */ static void rethrow(final Throwable ex) { if (ex != null) { if (ex instanceof Error) throw (Error)ex; if (ex instanceof RuntimeException) throw (RuntimeException)ex; ForkJoinTask.<RuntimeException>uncheckedThrow(ex); } } /** * The sneaky part of sneaky throw, relying on generics * limitations to evade compiler complaints about rethrowing * unchecked exceptions */ @SuppressWarnings("unchecked") static <T extends Throwable> void uncheckedThrow(Throwable t) throws T { if (t != null) throw (T)t; // rely on vacuous cast }