[CURATOR-515] Backgrounding CheckError
This code is confusing to me:
void checkError(Throwable e, Watching watching) throws Exception
{
if ( e != null )
{
if ( errorListener != null )
{
errorListener.unhandledError("n/a", e);
}
else if ( e instanceof Exception )
{
throw (Exception)e;
}
else
{
Throwables.propagate(e);
}
}
}
I think the code here is meaning to take a run-time Exception and wrap it in a checked Exception. However, that is not actually happening here.
If the Throwable argument is an Exception, it is thrown as-is. Fair enough. However, if the Throwable is a RuntimeException it is also thrown here because RuntimeException is a sub-class of Exception. It is not turned into a checked exception. So, if the Throwable is not an Exception, the only other sub-class of Throwable is an Error. The call Throwables.propagate(e) will will see that it is an Error and simply throw it.
https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html
So, really, whatever the Throwable argument is, it is simply re-thrown. This code could be simplified to:
void checkError(Throwable e, Watching watching) throws Exception
{
if ( e != null )
{
if ( errorListener != null )
{
errorListener.unhandledError("n/a", e);
}
else if ( e instanceof Exception )
{
throw (Exception)e;
}
else
{
throw (Error)e;
}
}
}
Is this the intended behavior our should RuntimeException and Error be wrapped into a checked Error?
Originally reported by belugabehr, imported from: Backgrounding CheckError
- assignee: randgalt
- status: Open
- priority: Minor
- resolution: Unresolved
- imported: 2025-01-21
And the reason this caught my eye in the first place is that Throwables.propagate is deprecated.