[antlr-interest] Exceptions and finally blocks

Scott Stanchfield scott at javadude.com
Sun Mar 12 11:38:07 PST 2006


heheh... Fun stuff. The trick is that Java only allows one pending
exception. I usually handle it something like this (useful for jdbc close,
for example)

Throwable pendingThrowable = null;
Connection connection = null;
try {
  try {
    connection = ... // open connection
    // do database stuff
  } catch(Throwable t) {
    pendingThrowable = t;
  } 

} finally {
  try {
    if (connection != null) {
      connection.close();
    }
  } catch(Throwable t) {
    if (pendingThrowable != null) {
      throw pendingThrowable;
    }
    throw t;
  }
}

Lovely, ain't it? Gotta fix this when I write my language...

Hope this helps a bit...
-- Scott


> -----Original Message-----
> From: antlr-interest-bounces at antlr.org 
> [mailto:antlr-interest-bounces at antlr.org] On Behalf Of Terence Parr
> Sent: Sunday, March 12, 2006 2:23 PM
> To: antlr-interest Interest
> Subject: [antlr-interest] Exceptions and finally blocks
> 
> hi,
> 
>   I'm running into this very strange Java behavior, which I believe  
> is considered normal but it does not give us what we want.   when an  
> exception is thrown in a method it still tries to execute the 
> finally of course. However, when an exception occurs usually 
> it means that this stuff in the finally clause will not 
> execute without its own exception. This second exception 
> forces the first exception to be lost. It is very confusing 
> because you see an exception in the finally when all of those 
> variables should be okay but you get null pointer.
> 
>   should I add the following:
> 
> catch (Exception e) {
> ..handle exception..perhaps noUserFinally=true; throw e; } finally {
>    usual cleanup
>    if ( !noUserFinally ) { user stuff }
> ...
> }
> 
> Hmm.... this is turning out to be a serious problem for me as I  
> developed my Mantra language with version three. Very very   
> annoying.  Suggestions?
> 
> Ter
> 




More information about the antlr-interest mailing list