[9] RFR (M): 8050052: Small cleanups in java.lang.invoke code
Remi Forax
forax at univ-mlv.fr
Mon Jul 14 08:39:53 UTC 2014
On 07/14/2014 07:03 AM, David Holmes wrote:
> On 12/07/2014 3:56 AM, Remi Forax wrote:
>>
>> On 07/11/2014 06:18 PM, Vladimir Ivanov wrote:
>>> http://cr.openjdk.java.net/~vlivanov/8050052/webrev.00
>>> https://bugs.openjdk.java.net/browse/JDK-8050052
>>
>> I've found myself writing the very same code as
>> MethodHandleStatics.uncaughException several times
>> and I wonder if it should not be an instance method of Throwable.
>> Something like:
>>
>> public <E extends Throwable> E rethrow(Function<? super Throwable, ?
>> extends E> uncaughtHandler) {
>> if (this instanceof RuntimeException) {
>> throw (RuntimeException)this;
>> }
>> if (this instanceof Error) {
>> throw (Error)this;
>> }
>> return uncaughtHandler.apply(this);
>
> Rethrowing is one thing but what is this uncaughtHandler supposed to
> be doing?
Sometimes there is a catch(Exception) or a catch(Throwable) that was
already done
in the code of an API you use so the exception kind you get is too broad,
by example, using the reflection:
try {
return method.invoke(...);
} catch(InvocationTargetException e) {
throw e.getCause().rethrow(...); // here e.getCause() can store any
Throwable
}
rethrow cleanly separate the checked exception from the unchecked ones,
so the user can manage exceptions correctly.
>
> At this level you expect all these exceptions to be "uncaught" and
> propagate up.
I expect that either there is a dedicated exception, like SAXException
for an XML parser,
UndeclaredThrowableException for a reflect.Proxy, that can tunnel
checked exceptions
in the signature of the method that calls rethrow or that the user want
to suppress
the checked exception using by example an IOError to wrap an IOException.
so I expect the code to be something like
throw e.rethrow(SAXException::new); or
throw e.rethrow(IOError::new);
>
> David
> -----
Rémi
>
>
>> }
>>
>> in that case, throw uncaughtException(ex) can be replaced by throw
>> ex.rethrow(::newInternalError);
>>
>> cheers,
>> Rémi
>>
>>>
>>> Numerous small code cleanups in java.lang.invoke package.
>>>
>>> Testing: jtreg, nashorn, octane w/ "-ea -esa" and
>>> COMPILE_THRESHOLD={0,30}.
>>>
>>> Reviewed-by: vlivanov, ?
>>> Contributed-by: john.r.rose at oracle.com
>>>
>>> Thanks!
>>>
>>> Best regards,
>>> Vladimir Ivanov
>>> _______________________________________________
>>> mlvm-dev mailing list
>>> mlvm-dev at openjdk.java.net
>>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>>
More information about the core-libs-dev
mailing list