Hi,
We’re seeing some weird behaviour when compiling some
code with the 1.5.4 version of the AspectJ compiler, both from the command line
and through the Eclipse plugin. I have this pretty convoluted class:
 
public class ExceptionTest
{
    public void doSomething()
    {
        throw new
RuntimeException("From doSomething");
    }    
 
    public int run()
        throws Throwable
    {
        try {
           
return 0;
        } catch
(Throwable t) {
           
System.out.println("Catch");
           
throw new RuntimeException("From catch");
        } finally {
           
System.out.println("Finally");
           
try {
               
doSomething();
           
} catch (Throwable t) {
            
   System.out.println("Last catch");
               
throw new RuntimeException("From catch finally");
           
}
        }
    }
 
    public static void main(String[] arg)
        throws Throwable
    {
        new
ExceptionTest().run();
    }
}
 
Note that there are no aspects being woven into this class.
But after just compiling with AspectJ it gives the following output:
 
Finally
Last catch
Catch
Finally
Last catch
Exception in thread "main"
java.lang.RuntimeException: From catch finally
           
at com.eharmony.samplematch.ExceptionTest.run(ExceptionTest.java:24)
           
at com.eharmony.samplematch.ExceptionTest.main(ExceptionTest.java:32)
 
So the Exception thrown from the finally block is caught by
the earlier catch block. With the regular Java compiler, instead I get the expected:
 
Finally
Last catch
Exception in thread "main"
java.lang.RuntimeException: From catch finally
           
at com.eharmony.samplematch.ExceptionTest.run(ExceptionTest.java:24)
           
at com.eharmony.samplematch.ExceptionTest.main(ExceptionTest.java:32)
 
The problem seems to be related to the “return
0” inside the first try block. If I move that statement out to the last
line of the run() method things work fine.
 
Any ideas on this? I’d be happy to file a bug if
that’s the case.
Thanks,
/ Per