Unreachable catch classes

David Holmes David.Holmes at oracle.com
Wed Apr 27 02:42:12 UTC 2011


Hi Joe,

I sent email to coin-dev on this yesterday but it doesn't seem to have 
turned up - at least I haven't seen it.

In some cases at least these catch clauses are in fact reachable - e.g. 
ThreadPoolExecutor. The analysis assumes that checked-exceptions can 
only be thrown by methods that declare them, but we all know that is not 
the case: Class.newInstance and native methods can throw them too (are 
there other cases?). So sometimes we want the "unreachable" catch as a 
"safety-net" for these cases.

Given checked-exception checks can be circumvented it seems to me that 
the analysis should not be issuing warnings for these cases because it 
will encourage people to "fix the code" - as you have just asked to be 
done! - when in fact the code could be less robust if it is changed.

Cheers,
David

Joe Darcy said the following on 04/27/11 11:53:
> Hello.
> 
> FYI, javac in JDK 7 does a more precise analysis than before on what 
> catch blocks can actually be reached and warnings are issued for 
> unreachable catch blocks.  I've extracted those warnings from a recent 
> full JDK build in case anyone wants to update the code in question.
> 
> -Joe
> 
> ../../../../../../src/share/classes/com/sun/corba/se/impl/protocol/BootstrapServerRequestDispatcher.java:124: 
> warning: unreachable catch clause
>        } catch (java.lang.Exception ex) {
>          ^
>  thrown type RuntimeException has already been caught
> 
> ../../../../../../src/share/classes/com/sun/corba/se/impl/protocol/BootstrapServerRequestDispatcher.java:124: 
> warning: unreachable catch clause
>        } catch (java.lang.Exception ex) {
>          ^
>  thrown type RuntimeException has already been caught
> 
> ../../../src/share/classes/java/util/concurrent/ThreadPoolExecutor.java:1115: 
> warning: unreachable catch clause
>                    } catch (Throwable x) {
>                      ^
>  thrown types RuntimeException,Error have already been caught
> ../../../src/share/classes/java/net/DatagramSocket.java:183: warning: 
> unreachable catch clause
>        } catch(IOException e) {
>          ^
>  thrown type SocketException has already been caught
> Note: Some input files use or override a deprecated API.
> Note: Recompile with -Xlint:deprecation for details.
> Note: Some input files use unchecked or unsafe operations.
> Note: Recompile with -Xlint:unchecked for details.
> 2 warnings
> 
> ../../../src/share/classes/java/security/cert/X509CertSelector.java:2217: 
> warning: unreachable catch clause
>        } catch (CertificateException e3) {
>          ^
>  thrown types 
> CertificateNotYetValidException,CertificateExpiredException have already 
> been caught
> 
> ../../../src/share/classes/javax/management/modelmbean/RequiredModelMBean.java:1220: 
> warning: unreachable catch clause
>        } catch (Exception e) {
>          ^
>  thrown types 
> InvocationTargetException,IllegalAccessException,RuntimeException have 
> already been caught
> 1 warning
> 
> ../../../../src/share/classes/sun/security/rsa/RSASignature.java:205: 
> warning: unreachable catch clause
>        } catch (GeneralSecurityException e) {
>          ^
>  thrown type BadPaddingException has already been caught
> 
> 



More information about the core-libs-dev mailing list