FTR, I captured this issue:

  https://bugs.openjdk.java.net/browse/JDK-8051294

(Wish they were all so easy to catch.)

— John

On Jul 17, 2014, at 5:12 PM, John Rose <john.r.r...@oracle.com> wrote:

> On Jul 16, 2014, at 11:20 AM, Peter Levart <peter.lev...@gmail.com> wrote:
> 
>> An alternative could be:
>> 
>> public Throwable throwIfUnchecked() {
>>   if (this instanceof RuntimeException) throw (RuntimeException) this;
>>   if (this instanceof Error) throw (Error) this;
>> return this;
>> }
>> 
>> Then use it like:
>> 
>>   try {
>>       ...
>>   } catch (Throwable t) {
>>       throw new WrapperException(t.throwIfUnchecked());
>>   }
> 
> I like this one.  (I wish we could declare This types, so that 
> TYPEOF[t.throwIfUnchecked()] == TYPEOF[t].)
> 
> It puts the throw of the "less dangerous" exception type inside the 
> subroutine, making the wrapping and the "more dangerous" (more ad hoc) 
> exception be explicit and in-line.
> 
> To complete the picture, add:
> 
> public <X extends Throwable> Throwable throwIf(Class<X> exClass) throws X {
>   if (exClass.isInstance(this)) throw exClass.cast(this);
>   return this;
> }
> 
> ...to be used as:
> 
>   try {
>       ...
>   } catch (Throwable t) {
>       t.throwIfUnchecked().throwIf(X.class).throwIf(Y.class).throwIf(Z.class);
>       throw new WrapperException(t);
>   }
> 
> Or some other combination of sequential and/or fluent calls.
> 
> — John

Reply via email to