[ https://issues.apache.org/jira/browse/CURATOR-515?focusedWorklogId=811925&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-811925 ]
ASF GitHub Bot logged work on CURATOR-515: ------------------------------------------ Author: ASF GitHub Bot Created on: 25/Sep/22 14:47 Start Date: 25/Sep/22 14:47 Worklog Time Spent: 10m Work Description: tisonkun closed pull request #308: CURATOR-515: Remove use of deprecated Throwables method URL: https://github.com/apache/curator/pull/308 Issue Time Tracking ------------------- Worklog Id: (was: 811925) Time Spent: 20m (was: 10m) > Backgrounding CheckError > ------------------------- > > Key: CURATOR-515 > URL: https://issues.apache.org/jira/browse/CURATOR-515 > Project: Apache Curator > Issue Type: Improvement > Reporter: David Mollitor > Assignee: Jordan Zimmerman > Priority: Minor > Time Spent: 20m > Remaining Estimate: 0h > > This code is confusing to me: > > {code:java|title=Backgrounding.java} > 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); > } > } > } > {code} > > > [https://github.com/apache/curator/blob/master/curator-framework/src/main/java/org/apache/curator/framework/imps/Backgrounding.java#L123-L140] > 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] > [https://github.com/google/guava/blob/master/guava/src/com/google/common/base/Throwables.java#L132-L134] > So, really, whatever the {{Throwable}} argument is, it is simply re-thrown. > This code could be simplified to: > {code:java|title=Backgrounding.java} > 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; > } > } > } > {code} > Is this the intended behavior our should {{RuntimeException}} and {{Error}} > be wrapped into a checked {{Error}}? -- This message was sent by Atlassian Jira (v8.20.10#820010)