[jboss-cvs] JBossAS SVN: r62758 - in projects/aop/trunk/aop/src: test/org/jboss/test/aop/beforeafterArgs and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed May 2 16:52:59 EDT 2007


Author: flavia.rainone at jboss.com
Date: 2007-05-02 16:52:59 -0400 (Wed, 02 May 2007)
New Revision: 62758

Modified:
   projects/aop/trunk/aop/src/resources/test/beforeafterArgs/jboss-aop.xml
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsPOJO.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnPOJO.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerPOJO.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownPOJO.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownTestCase.java
Log:
[JBAOP-381] Tests finally with all parameter annotations

Modified: projects/aop/trunk/aop/src/resources/test/beforeafterArgs/jboss-aop.xml
===================================================================
--- projects/aop/trunk/aop/src/resources/test/beforeafterArgs/jboss-aop.xml	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/resources/test/beforeafterArgs/jboss-aop.xml	2007-05-02 20:52:59 UTC (rev 62758)
@@ -37,6 +37,7 @@
       <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
 
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch3(..))">
@@ -51,6 +52,7 @@
       <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
 
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch4(..))">
@@ -81,13 +83,36 @@
    </bind>
    
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch7(..))">
+      <advice name="around6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch8(..))">
+      <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch9(..))">
+      <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+   </bind>
 
    <bind pointcut="execution(void org.jboss.test.aop.beforeafterArgs.ArgsPOJO->*(org.jboss.test.aop.beforeafterArgs.Interface))">
       <before name="beforeInterface1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
@@ -110,6 +135,11 @@
       <throwing name="throwingInterface3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <throwing name="throwingInterface4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <throwing name="throwingInterface5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finallyInterface1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finallyInterface2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finallyInterface3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finallyInterface4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finallyInterface5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
    
    <bind pointcut="execution(void org.jboss.test.aop.beforeafterArgs.ArgsPOJO->*(java.lang.String,java.util.Collection))">
@@ -121,6 +151,8 @@
       <after name="afterInvertedArgs2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <throwing name="throwingInvertedArgs1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <throwing name="throwingInvertedArgs2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finallyInvertedArgs1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finallyInvertedArgs2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
 
    <!-- @Args test -->
@@ -135,9 +167,11 @@
    </bind>
    
    <bind pointcut="set(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->field2)">
-      <before name="before6" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
-      <before name="XXX6" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
-      <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
+      <before name="before6" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <before name="XXX6" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
    </bind>
 
 	<bind pointcut="field(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->field3)">
@@ -161,31 +195,64 @@
 		<after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 		<after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 		<after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
    </bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method1(..))">
-	   <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
-	   <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
- 	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
+	   <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	   <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+ 	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 	</bind>
 
-	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method2(..))">
-	   <before name="before7" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
-	   <advice name="around1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
-	   <after name="after7" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method2(..))">
+	   <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	   <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+ 	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 	</bind>
-
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method3(..))">
-	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
+	   <before name="before7" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	   <advice name="around1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	   <after name="after7" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 	</bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method4(..))">
+	   <before name="before7" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	   <advice name="around1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	   <after name="after7" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	</bind>
+
+	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method5(..))">
+	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	</bind>
 	
-	<bind pointcut="call(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method3(..)) AND withincode(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method4(..))">
-      <before name="before8" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
-      <advice name="around2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
-      <after name="after8" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
-	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect" />
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method6(..))">
+	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 	</bind>
+   
+	<bind pointcut="call(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method5(..)) AND withincode(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method7(..))">
+      <before name="before8" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <advice name="around2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <after name="after8" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	</bind>
 	
+   <bind pointcut="call(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method6(..)) AND withincode(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method8(..))">
+      <before name="before8" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <advice name="around2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <after name="after8" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	</bind>
+   
    <!-- @Caller test -->
 	<aspect class="org.jboss.test.aop.beforeafterArgs.CallerAspect" scope="PER_VM"/>
 
@@ -201,9 +268,16 @@
       <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <throwing name="throwing1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
 	</stack>
 	
-   <bind pointcut="call(org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->new(int))">
+   <bind pointcut="call(org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->new(int,..))">
 		<stack-ref name="CallerAdvices"/>
    </bind>
    
@@ -222,6 +296,7 @@
 	<bind pointcut="set(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->text)">
 		<before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
 		<after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
 
 	<bind pointcut="get(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->text)">
@@ -241,15 +316,20 @@
    </bind>
    
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->method3(..))">
+     	<before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+		<after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    	<throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->method4(..))">
    	<throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->method5(..))">
    	<throwing name="throwing4" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+      <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->method6(..))">
@@ -263,61 +343,84 @@
 		<before name="before" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<advice name="around1" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 	
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method2(..))">
 		<advice name="around2" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method3(..))">
 		<before name="before" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<advice name="around3" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method4(..))">
 		<advice name="around4" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method5(..))">
 		<advice name="around5" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally5" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method6(..))">
 		<advice name="around6" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally6" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method7(..))">
 		<advice name="around7" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after7" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally7" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method8(..))">
 		<before name="before" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<advice name="around8" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after8" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally8" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method9(..))">
 		<advice name="around9" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after9" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally9" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method10(..))">
 		<before name="before" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<advice name="around10" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after10" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally10" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method11(..))">
 		<advice name="around11" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after11" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally11" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method12(..))">
+		<advice name="around12" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+		<after name="after12" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally12" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+	</bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method13(..))">
+		<advice name="around12" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+		<finally name="finally12" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+      <finally name="finally13" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+	</bind>
+   
    <!-- @Target test -->
 	<aspect class="org.jboss.test.aop.beforeafterArgs.TargetAspect" scope="PER_VM"/>
 
@@ -330,9 +433,15 @@
       <advice name="around3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
       <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <throwing name="throwing1" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
 	</stack>
 	
-   <bind pointcut="execution(org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO->new(int))">
+   <bind pointcut="execution(org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO->new(int,..))">
 		<stack-ref name="TargetAdvices"/>
    </bind>
 
@@ -348,10 +457,18 @@
 		<stack-ref name="TargetAdvices"/>
    </bind>
 
-   <bind pointcut="call(org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->new(int))">
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO->method3(..))">
 		<stack-ref name="TargetAdvices"/>
    </bind>
    
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO->method4(..))">
+		<stack-ref name="TargetAdvices"/>
+   </bind>
+   
+   <bind pointcut="call(org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->new(int,..))">
+		<stack-ref name="TargetAdvices"/>
+   </bind>
+   
    <bind pointcut="call(void org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->*())">
 		<stack-ref name="TargetAdvices"/>
    </bind>
@@ -361,27 +478,37 @@
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method1(..))">
 		<throwing name="throwing1" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method2(..))">
 		<throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
 	
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method3(..))">
 		<throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
 	
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method4(..))">
 		<throwing name="throwing4" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
+      <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
 	
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method5(..))">
 		<throwing name="throwing5" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
+      <finally name="finally5" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
 	
-	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method6(..))">
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method6(..))">
 		<throwing name="throwing6" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
+      <finally name="finally6" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
+	</bind>
+   
+	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method7(..))">
 		<throwing name="throwing7" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
+		<throwing name="throwing8" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
 
    <!-- overloaded advices test -->

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgAspect.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgAspect.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -55,6 +55,9 @@
    static boolean after4 = false;
    static boolean after6 = false;
    
+   static boolean finally1 = false;
+   static boolean finally2 = false;
+   
    static int before1X = 0;
    static int before2X = 0;
    static int before3Q = 0;
@@ -71,6 +74,9 @@
    static int after4Q = 0;
    static Object[] after6Args = null;
    
+   static int finally1X = 0;
+   static Object[] finally2Args = null;
+   
    static boolean beforeInterface1 = false;
    static boolean beforeInterface2 = false;
    static boolean beforeInterface3 = false;
@@ -83,11 +89,15 @@
    static boolean throwingInterface1 = false;
    static boolean throwingInterface2 = false;
    static boolean throwingInterface3 = false;
+   static boolean finallyInterface1 = false;
+   static boolean finallyInterface2 = false;
+   static boolean finallyInterface3 = false;
    
    static boolean beforeInverted1 = false;
    static boolean aroundInverted1 = false;
    static boolean afterInverted1 = false;
    static boolean throwingInverted1 = false;
+   static boolean finallyInverted1 = false;
    
    public static void clear()
    {
@@ -102,6 +112,8 @@
       after1 = false;
       after4 = false;
       after6 = false;
+      finally1 = false;
+      finally2 = false;
       
       before1X = 0;
       before2X = 0;
@@ -115,6 +127,8 @@
       after4X = 0;
       after4Q = 0;
       after6Args = null;
+      finally1X = 0;
+      finally2Args = null;
       
       beforeInterface1 = false;
       beforeInterface2 = false;
@@ -128,11 +142,15 @@
       throwingInterface1 = false;
       throwingInterface2 = false;
       throwingInterface3 = false;
+      finallyInterface1 = false;
+      finallyInterface2 = false;
+      finallyInterface3 = false;
       
       beforeInverted1 = false;
       aroundInverted1 = false;
       afterInverted1 = false;
       throwingInverted1 = false;
+      finallyInverted1 = false;
    }
    
    public void before1(@Arg(index=0) int x)
@@ -147,10 +165,10 @@
       before2X = x;
    }
    
-   public void before3(@Arg(index=4) int y)
+   public void before3(@Arg(index=4) int q)
    {
       before3 = true;
-      before3Q = y;
+      before3Q = q;
    }
    
    public void before4(@Args Object[] arguments)
@@ -163,11 +181,11 @@
       }
    }
    
-   public void before5(@Arg int x, @Arg int y)
+   public void before5(@Arg int x, @Arg int q)
    {
       before5 = true;
       before5X = x;
-      before5Q = y;
+      before5Q = q;
    }
    
    public int around1(@Arg int x, @Arg double y, @Arg float z, @Arg String str, @Arg long q)
@@ -248,9 +266,27 @@
    public void after6(@Args Object[] args)
    {
       after6 = true;
+      args[0] = Integer.valueOf(((Integer) args[0]).intValue() - 1);
       after6Args = args;
    }
    
+   public void finally1(@Arg int x)
+   {
+      finally1 = true;
+      finally1X = x;
+   }
+   
+   public void finally2(@Args Object[] args)
+   {
+      finally2 = true;
+      finally2Args = args;
+   }
+   
+   public void finally3(@Arg Collection arg)
+   {
+      Assert.fail("This advice should never be executed");
+   }
+   
    public void beforeInterface1(@Arg Interface param)
    {
       beforeInterface1 = true;
@@ -356,6 +392,31 @@
       Assert.fail("This advice should never be executed");
    }
    
+   public void finallyInterface1(@Arg Interface param)
+   {
+      finallyInterface1 = true;
+   }
+   
+   public void finallyInterface2(@Arg SuperInterface param)
+   {
+      finallyInterface2 = true;
+   }
+   
+   public void finallyInterface3(@Arg Object param)
+   {
+      finallyInterface3 = true;
+   }
+   
+   public void finallyInterface4(@Arg Implementor param)
+   {
+      Assert.fail("This advice should never be executed");
+   }
+   
+   public void finallyInterface5(@Arg SubInterface param)
+   {
+      Assert.fail("This advice should never be executed");
+   }
+   
    public void beforeInvertedArgs1(@Arg Object arg2, @Arg (index = 0) String arg1)
    {
       beforeInverted1 = true;
@@ -402,4 +463,15 @@
    {
       Assert.fail("This advice should never be executed");
    }
+   
+   public void finallyInvertedArgs1(@Arg Object arg2, @Arg (index = 0) String arg1)
+   {
+      finallyInverted1 = true;
+   }
+   
+   public void finallyInvertedArgs2(@Arg (index = 0) Object arg2,
+         @Arg (index = 0) String arg1)
+   {
+      Assert.fail("This advice should never be executed");
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgTestCase.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgTestCase.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -92,37 +92,14 @@
       assertEquals(34, ArgAspect.around5Q);
       assertEquals(17, ArgAspect.after1X);
       assertEquals(17, ArgAspect.after4X);
-      assertEquals(34, ArgAspect.after4Q);  
+      assertEquals(34, ArgAspect.after4Q);
+      
+      assertFalse(ArgAspect.finally1);
+      assertFalse(ArgAspect.finally2);
    }
    
    public void test2()
    {
-      assertEquals(52, this.pojo.bunch1(5, (double) 1.3, (float) 0, "test1", 1));
-      
-      assertTrue(ArgAspect.before1);
-      assertTrue(ArgAspect.before2);
-      assertTrue(ArgAspect.before3);
-      assertTrue(ArgAspect.before4);
-      assertTrue(ArgAspect.before5);
-      assertTrue(ArgAspect.around4);
-      assertTrue(ArgAspect.around5);
-      assertTrue(ArgAspect.after1);
-      assertTrue(ArgAspect.after4);
-      
-      assertEquals(5, ArgAspect.before1X);
-      assertEquals(5, ArgAspect.before2X);
-      assertEquals(1, ArgAspect.before3Q);
-      assertEquals(25, ArgAspect.before5X);
-      assertEquals(-17, ArgAspect.before5Q);
-      assertEquals(17, ArgAspect.around5X);
-      assertEquals(34, ArgAspect.around5Q);
-      assertEquals(17, ArgAspect.after1X);
-      assertEquals(17, ArgAspect.after4X);
-      assertEquals(34, ArgAspect.after4Q);  
-   }
-   
-   public void test3()
-   {
       assertEquals(108, this.pojo.bunch2(1, (double) 2.0, (float) 3, 4));
       
       assertTrue(ArgAspect.before1);
@@ -132,20 +109,23 @@
       assertTrue(ArgAspect.around6);
       assertTrue(ArgAspect.after4);
       assertTrue(ArgAspect.after6);
+      assertTrue(ArgAspect.finally1);
       
       assertEquals(1, ArgAspect.before1X);
       assertEquals(1, ArgAspect.before2X);
       assertEquals(5, ArgAspect.before5X);
       assertEquals(4, ArgAspect.before5Q);
       assertEquals(6, ArgAspect.after4X);
-      assertEquals(48, ArgAspect.after4Q);  
+      assertEquals(48, ArgAspect.after4Q);
+      assertEquals(5, ArgAspect.finally1X);
       assertSame(ArgAspect.around6Args, ArgAspect.after6Args);
       
       assertFalse(ArgAspect.before3);
       assertFalse(ArgAspect.after1);
+      assertFalse(ArgAspect.finally2);
    }
    
-   public void test4()
+   public void test3()
    {
       assertEquals(18, this.pojo.bunch3(1, (double) 2.0, (float) 3, 4));
       
@@ -155,6 +135,7 @@
       assertTrue(ArgAspect.before5);
       assertTrue(ArgAspect.after4);
       assertTrue(ArgAspect.after6);
+      assertTrue(ArgAspect.finally2);
       
       assertEquals(1, ArgAspect.before1X);
       assertEquals(1, ArgAspect.before2X);
@@ -163,7 +144,9 @@
       assertEquals(5, ArgAspect.after4X);
       assertEquals(4, ArgAspect.after4Q);  
       assertNotNull(ArgAspect.after6Args);
-      assertEquals(5, ((Integer) ArgAspect.after6Args[0]).intValue());
+      assertNotNull(ArgAspect.finally2Args);
+      assertSame(ArgAspect.after6Args, ArgAspect.finally2Args);
+      assertEquals(4, ((Integer) ArgAspect.after6Args[0]).intValue());
       assertEquals(2.0, ((Double) ArgAspect.after6Args[1]).doubleValue());
       assertEquals(3.0, ((Float) ArgAspect.after6Args[2]).floatValue());
       assertEquals(4, ((Integer) ArgAspect.after6Args[3]).intValue());
@@ -171,9 +154,10 @@
       assertFalse(ArgAspect.before3);
       assertFalse(ArgAspect.around6);
       assertFalse(ArgAspect.after1);
+      assertFalse(ArgAspect.finally1);
    }
    
-   public void test5()
+   public void test4()
    {
       assertEquals(132, this.pojo.bunch4(10, (double) 9.0, (float) 8.0, 7));
       
@@ -192,9 +176,11 @@
       assertFalse(ArgAspect.after1);
       assertFalse(ArgAspect.after4);
       assertFalse(ArgAspect.after6);
+      assertFalse(ArgAspect.finally1);
+      assertFalse(ArgAspect.finally2);
    }
    
-   public void test6()
+   public void test5()
    {
       assertEquals(110, this.pojo.bunch5(10, (double) 9.0, (float) 8.0, 7));
       
@@ -214,9 +200,11 @@
       assertFalse(ArgAspect.after1);
       assertFalse(ArgAspect.after4);
       assertFalse(ArgAspect.after6);
+      assertFalse(ArgAspect.finally1);
+      assertFalse(ArgAspect.finally2);
    }
    
-   public void test7()
+   public void test6()
    {
       assertEquals(156, this.pojo.bunch6(51, (double) 5.3, (float) 61, 131));
       
@@ -234,11 +222,37 @@
       assertFalse(ArgAspect.before5);
       assertFalse(ArgAspect.before3);
       assertFalse(ArgAspect.after1);
+      assertFalse(ArgAspect.finally1);
+      assertFalse(ArgAspect.finally2);
    }
    
+   public void test7()
+   {
+      assertEquals(168, this.pojo.bunch7(15, (double) 3.5, (float) 16, 131));
+      
+      assertTrue(ArgAspect.around6);
+      assertTrue(ArgAspect.after4);
+      assertTrue(ArgAspect.after6);
+      assertTrue(ArgAspect.finally1);
+      assertTrue(ArgAspect.finally2);
+      
+      assertEquals(6, ArgAspect.after4X);
+      assertEquals(48, ArgAspect.after4Q);  
+      assertEquals(5, ArgAspect.finally1X);
+      assertSame(ArgAspect.around6Args, ArgAspect.after6Args);
+      assertSame(ArgAspect.after6Args, ArgAspect.finally2Args);
+      
+      assertFalse(ArgAspect.before1);
+      assertFalse(ArgAspect.before2);
+      assertFalse(ArgAspect.before4);
+      assertFalse(ArgAspect.before5);
+      assertFalse(ArgAspect.before3);
+      assertFalse(ArgAspect.after1);
+   }
+   
    public void test8()
    {
-      assertEquals(278, this.pojo.bunch7(51, (double) 5.3, (float) 61, 131));
+      assertEquals(283, this.pojo.bunch8(51, (double) 5.3, (float) 61, 131));
       
       assertTrue(ArgAspect.after4);
       assertTrue(ArgAspect.after6);
@@ -246,7 +260,7 @@
       assertEquals(51, ArgAspect.after4X);
       assertEquals(131, ArgAspect.after4Q);  
       assertNotNull(ArgAspect.after6Args);
-      assertEquals(51, ((Integer) ArgAspect.after6Args[0]).intValue());
+      assertEquals(50, ((Integer) ArgAspect.after6Args[0]).intValue());
       assertEquals(5.3, ((Double) ArgAspect.after6Args[1]).doubleValue());
       assertEquals(61, ((Float) ArgAspect.after6Args[2]).floatValue());
       assertEquals(131, ((Integer) ArgAspect.after6Args[3]).intValue());
@@ -258,12 +272,41 @@
       assertFalse(ArgAspect.before3);
       assertFalse(ArgAspect.around6);
       assertFalse(ArgAspect.after1);
+      assertFalse(ArgAspect.finally1);
+      assertFalse(ArgAspect.finally2);
    }
    
-   public void test9() throws POJOException
+   public void test9()
    {
-      this.pojo.method5(new Implementor());
+      assertEquals(189, this.pojo.bunch9(15, (double) 3.5, (float) 16, 131));
       
+      assertTrue(ArgAspect.after4);
+      assertTrue(ArgAspect.after6);
+      assertTrue(ArgAspect.finally1);
+      assertTrue(ArgAspect.finally2);
+      
+      assertEquals(15, ArgAspect.after4X);
+      assertEquals(131, ArgAspect.after4Q);  
+      assertNotNull(ArgAspect.after6Args);
+      assertEquals(14, ArgAspect.finally1X);
+      assertEquals(14, ((Integer) ArgAspect.after6Args[0]).intValue());
+      assertEquals(3.5, ((Double) ArgAspect.after6Args[1]).doubleValue());
+      assertEquals(16, ((Float) ArgAspect.after6Args[2]).floatValue());
+      assertEquals(131, ((Integer) ArgAspect.after6Args[3]).intValue());
+      
+      assertFalse(ArgAspect.before1);
+      assertFalse(ArgAspect.before2);
+      assertFalse(ArgAspect.before4);
+      assertFalse(ArgAspect.before5);
+      assertFalse(ArgAspect.before3);
+      assertFalse(ArgAspect.around6);
+      assertFalse(ArgAspect.after1);
+   }
+   
+   public void test10() throws POJOException
+   {
+      this.pojo.method9(new Implementor());
+      
       assertTrue(ArgAspect.beforeInterface1);
       assertTrue(ArgAspect.beforeInterface2);
       assertTrue(ArgAspect.beforeInterface3);
@@ -279,14 +322,18 @@
       assertFalse(ArgAspect.throwingInterface1);
       assertFalse(ArgAspect.throwingInterface2);
       assertFalse(ArgAspect.throwingInterface3);
+      
+      assertTrue(ArgAspect.finallyInterface1);
+      assertTrue(ArgAspect.finallyInterface2);
+      assertTrue(ArgAspect.finallyInterface3);
    }
    
-   public void test10()
+   public void test11()
    {
       boolean thrown = false;
       try
       {
-         this.pojo.method6(null);
+         this.pojo.method10(null);
       }
       catch(POJOException e)
       {
@@ -310,16 +357,21 @@
       assertTrue(ArgAspect.throwingInterface1);
       assertTrue(ArgAspect.throwingInterface2);
       assertTrue(ArgAspect.throwingInterface3);
+      
+      assertTrue(ArgAspect.finallyInterface1);
+      assertTrue(ArgAspect.finallyInterface2);
+      assertTrue(ArgAspect.finallyInterface3);
    }
    
    public void testInverted1()
    {
-      pojo.method7("testInverted", null);
+      pojo.method11("testInverted", null);
       
       assertTrue(ArgAspect.beforeInverted1);
       assertTrue(ArgAspect.aroundInverted1);
       assertTrue(ArgAspect.afterInverted1);
       assertFalse(ArgAspect.throwingInverted1);
+      assertTrue(ArgAspect.finallyInverted1);
    }
    
    public void testInverted2()
@@ -327,7 +379,7 @@
       boolean thrown = false;
       try
       {
-         pojo.method8("testInverted", null);
+         pojo.method12("testInverted", null);
       }
       catch(POJOException e)
       {
@@ -340,5 +392,6 @@
       assertTrue(ArgAspect.aroundInverted1);
       assertFalse(ArgAspect.afterInverted1);
       assertTrue(ArgAspect.throwingInverted1);
+      assertTrue(ArgAspect.finallyInverted1);
    }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsAspect.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsAspect.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -71,6 +71,11 @@
    static boolean throwing = false;
    static Object[] throwingArgs = null;
    
+   static boolean finally1 = false;
+   static Object[] finally1Args = null;
+   static boolean finally3 = false;
+   static Object[] finally3Args = null;
+   
    public static void clear()
    {
       before1 = false;
@@ -106,6 +111,11 @@
       
       throwing = false;
       throwingArgs = null;
+      
+      finally1 = false;
+      finally1Args = null;
+      finally3 = false;
+      finally3Args = null;
    }
    
    public void before1()
@@ -237,4 +247,22 @@
       throwing = true;
       throwingArgs = arguments;
    }
+   
+   public void finally1(@Args Object[] arguments)
+   {
+      finally1 = true;
+      finally1Args = arguments;
+   }
+   
+   public void finally2(@Args int arguments)
+   {
+      Assert.fail("This advice should never be executed");
+   }
+   
+   public void finally3(@Args Object[] arguments)
+   {
+      finally3 = true;
+      arguments[0]="finally3";
+      finally3Args = arguments;
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsPOJO.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsPOJO.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -73,32 +73,58 @@
       return x + (int) y * 7 + (int) z + q;
    }
    
+   public int bunch8(int x, double y, float z, int q)
+   {
+      return x + (int) y * 8 + (int) z + q;
+   }
+   
+   public int bunch9(int x, double y, float z, int q)
+   {
+      return x + (int) y * 9 + (int) z + q;
+   }
+   
    public void method1(String param1, int param2, boolean param3, ArgsPOJO[] param4)
    {}
    
    public void method2(String param1, int param2, boolean param3, ArgsPOJO[] param4)
    {}
    
-   public void method3(short param1, long param2) throws POJOException
+   public void method3(String param1, int param2, boolean param3, ArgsPOJO[] param4)
+   {}
+   
+   public void method4(String param1, int param2, boolean param3, ArgsPOJO[] param4)
+   {}
+   
+   public void method5(short param1, long param2) throws POJOException
    {
       throw new POJOException();
    }
    
-   public void method4() throws POJOException
+   public void method6(short param1, long param2) throws POJOException
    {
-      this.method3((short) -4, (long) 4);
+      throw new POJOException();
    }
    
-   public void method5(Interface param) throws POJOException {}
+   public void method7() throws POJOException
+   {
+      this.method5((short) -4, (long) 4);
+   }
    
-   public void method6(Interface param) throws POJOException
+   public void method8() throws POJOException
    {
+      this.method6((short) -4, (long) 4);
+   }
+   
+   public void method9(Interface param) throws POJOException {}
+   
+   public void method10(Interface param) throws POJOException
+   {
       throw new POJOException();
    }
    
-   public void method7(String param1, Collection param2) {}
+   public void method11(String param1, Collection param2) {}
    
-   public void method8(String param1, Collection param2) throws POJOException
+   public void method12(String param1, Collection param2) throws POJOException
    {
       throw new POJOException();
    }

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsTestCase.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsTestCase.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -66,6 +66,7 @@
       assertTrue(ArgsAspect.before1);
       assertTrue(ArgsAspect.before2);
       assertTrue(ArgsAspect.before3);
+      
       assertSame(ArgsAspect.before2Args, ArgsAspect.before3Args);
       assertEquals(0, ArgsAspect.before2Args.length);
       
@@ -82,6 +83,8 @@
       assertFalse(ArgsAspect.around2);
       assertFalse(ArgsAspect.around3);
       assertFalse(ArgsAspect.throwing);
+      assertFalse(ArgsAspect.finally1);
+      assertFalse(ArgsAspect.finally3);
    }
    
    public void test2()
@@ -90,9 +93,11 @@
       assertTrue(ArgsAspect.before1);
       assertTrue(ArgsAspect.before2);
       assertTrue(ArgsAspect.before3);
+      
       assertSame(ArgsAspect.before2Args, ArgsAspect.before3Args);
       assertEquals(1, ArgsAspect.before2Args.length);
       assertEquals("test2", ArgsAspect.before2Args[0]);
+      
       assertFalse(ArgsAspect.before6);
       assertFalse(ArgsAspect.before7);
       assertFalse(ArgsAspect.before8);
@@ -106,6 +111,8 @@
       assertFalse(ArgsAspect.around2);
       assertFalse(ArgsAspect.around3);
       assertFalse(ArgsAspect.throwing);
+      assertFalse(ArgsAspect.finally1);
+      assertFalse(ArgsAspect.finally3);
    }
    
    public void test3()
@@ -113,10 +120,13 @@
       pojo.field2 = "test3";
       assertTrue(ArgsAspect.before6);
       assertTrue(ArgsAspect.after6);
+      assertTrue(ArgsAspect.finally3);
+      
       assertNotNull(ArgsAspect.before6Args);
       assertSame(ArgsAspect.before6Args, ArgsAspect.after6Args);
+      assertSame(ArgsAspect.after6Args, ArgsAspect.finally3Args);
       assertEquals(1, ArgsAspect.before6Args.length);
-      assertEquals("after6", ArgsAspect.before6Args[0]);
+      assertEquals("finally3", ArgsAspect.before6Args[0]);
       
       assertFalse(ArgsAspect.before1);
       assertFalse(ArgsAspect.before2);
@@ -132,6 +142,7 @@
       assertFalse(ArgsAspect.around2);
       assertFalse(ArgsAspect.around3);
       assertFalse(ArgsAspect.throwing);
+      assertFalse(ArgsAspect.finally1);
       
       assertEquals("before6", pojo.field2);
    }
@@ -139,10 +150,12 @@
    public void test4()
    {
       pojo.field3 = 10;
+      
       assertTrue(ArgsAspect.around3);
       assertTrue(ArgsAspect.after1);
       assertTrue(ArgsAspect.after2);
       assertTrue(ArgsAspect.after3);
+      
       assertNotNull(ArgsAspect.around3Args);
       assertEquals(1, ArgsAspect.around3Args.length);
       assertEquals(10, ArgsAspect.around3Args[0]);
@@ -163,6 +176,8 @@
       assertFalse(ArgsAspect.around1);
       assertFalse(ArgsAspect.around2);
       assertFalse(ArgsAspect.throwing);
+      assertFalse(ArgsAspect.finally1);
+      assertFalse(ArgsAspect.finally3);
    }
    
    public void test5()
@@ -176,10 +191,13 @@
       assertTrue(ArgsAspect.after1);
       assertTrue(ArgsAspect.after2);
       assertTrue(ArgsAspect.after3);
+      assertTrue(ArgsAspect.finally1);
+      
       assertNotNull(ArgsAspect.before2Args);
       assertSame(ArgsAspect.before2Args, ArgsAspect.before3Args);
       assertSame(ArgsAspect.before2Args, ArgsAspect.after2Args);
       assertSame(ArgsAspect.before2Args, ArgsAspect.after3Args);
+      assertSame(ArgsAspect.before2Args, ArgsAspect.finally1Args);
       assertEquals(0, ArgsAspect.before2Args.length);
       
       assertFalse(ArgsAspect.after6);
@@ -191,6 +209,7 @@
       assertFalse(ArgsAspect.around1);
       assertFalse(ArgsAspect.around2);
       assertFalse(ArgsAspect.throwing);
+      assertFalse(ArgsAspect.finally3);
    }
    
    public void test6()
@@ -204,11 +223,15 @@
       assertTrue(ArgsAspect.after1);
       assertTrue(ArgsAspect.after2);
       assertTrue(ArgsAspect.after3);
+      assertTrue(ArgsAspect.finally1);
+      
       assertNotNull(ArgsAspect.before2Args);
       assertSame(ArgsAspect.before2Args, ArgsAspect.before3Args);
       assertSame(ArgsAspect.before2Args, ArgsAspect.around3Args);
       assertSame(ArgsAspect.around3Args, ArgsAspect.after2Args);
       assertSame(ArgsAspect.before2Args, ArgsAspect.after3Args);
+      assertSame(ArgsAspect.before2Args, ArgsAspect.finally1Args);
+      
       assertEquals(1, ArgsAspect.before2Args.length);
       assertEquals(false, ((Boolean) ArgsAspect.before2Args[0]).booleanValue());
       
@@ -221,22 +244,27 @@
       assertFalse(ArgsAspect.around1);
       assertFalse(ArgsAspect.around2);
       assertFalse(ArgsAspect.throwing);
+      assertFalse(ArgsAspect.finally3);
    }
    
    public void test7()
    {
-      pojo.method1("test6", 6, true, null);
+      pojo.method1("test7", 7, true, null);
       
       assertTrue(ArgsAspect.before3);
       assertTrue(ArgsAspect.after3);
       assertNotNull(ArgsAspect.before3Args);
+      
       assertSame(ArgsAspect.before3Args, ArgsAspect.after3Args);
       assertEquals(4, ArgsAspect.before3Args.length);
-      assertEquals("test6", ArgsAspect.before3Args[0]);
-      assertEquals(6, ((Integer) ArgsAspect.before3Args[1]).intValue());
+      
+      assertEquals("test7", ArgsAspect.before3Args[0]);
+      assertEquals(7, ((Integer) ArgsAspect.before3Args[1]).intValue());
       assertEquals(true, ((Boolean) ArgsAspect.before3Args[2]).booleanValue());
       assertNull(ArgsAspect.before3Args[3]);
+      
       System.out.println("AROUND ARGS: " + ArgsAspect.around3Args);
+      
       assertFalse(ArgsAspect.before1);
       assertFalse(ArgsAspect.before2);
       assertFalse(ArgsAspect.before6);
@@ -251,14 +279,54 @@
       assertFalse(ArgsAspect.around2);
       assertFalse(ArgsAspect.around3);
       assertFalse(ArgsAspect.throwing);
+      assertFalse(ArgsAspect.finally1);
+      assertFalse(ArgsAspect.finally3);
    }
    
    public void test8()
    {
-      pojo.method2("test7", 0, false, null);
+      pojo.method2("test8", 8, true, null);
+      
+      assertTrue(ArgsAspect.before3);
+      assertTrue(ArgsAspect.after3);
+      assertTrue(ArgsAspect.finally1);
+      
+      assertNotNull(ArgsAspect.before3Args);
+      assertSame(ArgsAspect.before3Args, ArgsAspect.after3Args);
+      assertSame(ArgsAspect.after3Args, ArgsAspect.finally1Args);
+      
+      assertEquals(4, ArgsAspect.before3Args.length);
+      assertEquals("test8", ArgsAspect.before3Args[0]);
+      assertEquals(8, ((Integer) ArgsAspect.before3Args[1]).intValue());
+      assertEquals(true, ((Boolean) ArgsAspect.before3Args[2]).booleanValue());
+      assertNull(ArgsAspect.before3Args[3]);
+      
+      System.out.println("AROUND ARGS: " + ArgsAspect.around3Args);
+      
+      assertFalse(ArgsAspect.before1);
+      assertFalse(ArgsAspect.before2);
+      assertFalse(ArgsAspect.before6);
+      assertFalse(ArgsAspect.before7);
+      assertFalse(ArgsAspect.before8);
+      assertFalse(ArgsAspect.after1);
+      assertFalse(ArgsAspect.after2);
+      assertFalse(ArgsAspect.after6);
+      assertFalse(ArgsAspect.after7);
+      assertFalse(ArgsAspect.after8);
+      assertFalse(ArgsAspect.around1);
+      assertFalse(ArgsAspect.around2);
+      assertFalse(ArgsAspect.around3);
+      assertFalse(ArgsAspect.throwing);
+      assertFalse(ArgsAspect.finally3);
+   }
+   
+   public void test9()
+   {
+      pojo.method3("test9", 0, false, null);
+      
       assertTrue(ArgsAspect.before7);
+      assertTrue(ArgsAspect.around1);
       assertTrue(ArgsAspect.after7);
-      assertTrue(ArgsAspect.around1);
       
       assertNotNull(ArgsAspect.before7Args);
       assertSame(ArgsAspect.before7Args, ArgsAspect.after7Args);
@@ -285,14 +353,55 @@
       assertFalse(ArgsAspect.around2);
       assertFalse(ArgsAspect.around3);
       assertFalse(ArgsAspect.throwing);
+      assertFalse(ArgsAspect.finally1);
+      assertFalse(ArgsAspect.finally3);
    }
    
-   public void test9()
+   public void test10()
    {
+      pojo.method4("test10", 0, false, null);
+      
+      assertTrue(ArgsAspect.before7);
+      assertTrue(ArgsAspect.around1);
+      assertTrue(ArgsAspect.after7);
+      assertTrue(ArgsAspect.finally1);
+      
+      assertNotNull(ArgsAspect.before7Args);
+      assertSame(ArgsAspect.before7Args, ArgsAspect.around1Args);
+      assertSame(ArgsAspect.around1Args, ArgsAspect.after7Args);
+      assertSame(ArgsAspect.after7Args, ArgsAspect.finally1Args);
+      
+      assertEquals(4, ArgsAspect.before7Args.length);
+      assertEquals("after7", ArgsAspect.before7Args[0]);
+      assertEquals(14, ((Integer) ArgsAspect.before7Args[1]).intValue());
+      assertEquals(false, ((Boolean) ArgsAspect.before7Args[2]).booleanValue());
+      
+      assertNotNull(ArgsAspect.before7Args[3]);
+      assertEquals(1, ((ArgsPOJO[]) ArgsAspect.before7Args[3]).length);
+      assertNull(((ArgsPOJO[]) ArgsAspect.before7Args[3])[0]);
+      
+      assertFalse(ArgsAspect.before1);
+      assertFalse(ArgsAspect.before2);
+      assertFalse(ArgsAspect.before3);
+      assertFalse(ArgsAspect.before6);
+      assertFalse(ArgsAspect.before8);
+      assertFalse(ArgsAspect.after1);
+      assertFalse(ArgsAspect.after2);
+      assertFalse(ArgsAspect.after3);
+      assertFalse(ArgsAspect.after6);
+      assertFalse(ArgsAspect.after8);
+      assertFalse(ArgsAspect.around2);
+      assertFalse(ArgsAspect.around3);
+      assertFalse(ArgsAspect.throwing);
+      assertFalse(ArgsAspect.finally3);
+   }
+   
+   public void test11()
+   {
       boolean exceptionThrown = false;
       try
       {
-         pojo.method3((short) 0, 100);
+         pojo.method5((short) 0, 100);
       }
       catch(POJOException e)
       {
@@ -301,6 +410,7 @@
       assertTrue(exceptionThrown);
       
       assertTrue(ArgsAspect.throwing);
+      
       assertNotNull(ArgsAspect.throwingArgs);
       assertEquals(2, ArgsAspect.throwingArgs.length);
       assertEquals(0, ((Short) ArgsAspect.throwingArgs[0]).shortValue());
@@ -321,14 +431,56 @@
       assertFalse(ArgsAspect.around1);
       assertFalse(ArgsAspect.around2);
       assertFalse(ArgsAspect.around3);
+      assertFalse(ArgsAspect.finally1);
+      assertFalse(ArgsAspect.finally3);
    }
    
-   public void test10()
+   public void test12()
    {
       boolean exceptionThrown = false;
       try
       {
-         pojo.method4();
+         pojo.method6((short) 5, 112);
+      }
+      catch(POJOException e)
+      {
+         exceptionThrown = true;
+      }
+      assertTrue(exceptionThrown);
+      
+      assertTrue(ArgsAspect.throwing);
+      assertTrue(ArgsAspect.finally1);
+      
+      assertNotNull(ArgsAspect.throwingArgs);
+      assertSame(ArgsAspect.throwingArgs, ArgsAspect.finally1Args);
+      assertEquals(2, ArgsAspect.throwingArgs.length);
+      assertEquals(5, ((Short) ArgsAspect.throwingArgs[0]).shortValue());
+      assertEquals(112, ((Long) ArgsAspect.throwingArgs[1]).longValue());
+      
+      assertFalse(ArgsAspect.before1);
+      assertFalse(ArgsAspect.before2);
+      assertFalse(ArgsAspect.before3);
+      assertFalse(ArgsAspect.before6);
+      assertFalse(ArgsAspect.before7);
+      assertFalse(ArgsAspect.before8);
+      assertFalse(ArgsAspect.after1);
+      assertFalse(ArgsAspect.after2);
+      assertFalse(ArgsAspect.after3);
+      assertFalse(ArgsAspect.after6);
+      assertFalse(ArgsAspect.after7);
+      assertFalse(ArgsAspect.after8);
+      assertFalse(ArgsAspect.around1);
+      assertFalse(ArgsAspect.around2);
+      assertFalse(ArgsAspect.around3);
+      assertFalse(ArgsAspect.finally3);
+   }
+   
+   public void test13()
+   {
+      boolean exceptionThrown = false;
+      try
+      {
+         pojo.method7();
       } catch (POJOException e)
       {
          exceptionThrown = true;
@@ -361,5 +513,50 @@
       assertFalse(ArgsAspect.after8);
       assertFalse(ArgsAspect.around1);
       assertFalse(ArgsAspect.around3);
+      assertFalse(ArgsAspect.finally1);
+      assertFalse(ArgsAspect.finally3);
    }
+   
+   public void test14()
+   {
+      boolean exceptionThrown = false;
+      try
+      {
+         pojo.method8();
+      } catch (POJOException e)
+      {
+         exceptionThrown = true;
+      }
+      assertTrue(exceptionThrown);
+      assertTrue(ArgsAspect.finally1);
+      
+      assertTrue(ArgsAspect.before8);
+      assertTrue(ArgsAspect.around2);
+      assertTrue(ArgsAspect.throwing);
+      
+      assertNotNull(ArgsAspect.before8Args);
+      assertSame(ArgsAspect.before8Args, ArgsAspect.around2Args);
+      assertSame(ArgsAspect.around2Args, ArgsAspect.throwingArgs);
+      assertSame(ArgsAspect.throwingArgs, ArgsAspect.finally1Args);
+      
+      assertEquals(2, ArgsAspect.before8Args.length);
+      assertEquals((short) -8, ((Short) ArgsAspect.before8Args[0]).shortValue());
+      assertEquals((long) 8, ((Long) ArgsAspect.before8Args[1]).longValue());
+      
+      assertFalse(ArgsAspect.before1);
+      assertFalse(ArgsAspect.before2);
+      assertFalse(ArgsAspect.before3);
+      assertFalse(ArgsAspect.before6);
+      assertFalse(ArgsAspect.before7);
+      assertFalse(ArgsAspect.after1);
+      assertFalse(ArgsAspect.after2);
+      assertFalse(ArgsAspect.after3);
+      assertFalse(ArgsAspect.after6);
+      assertFalse(ArgsAspect.after7);
+      // after 8 is not called due to the exception thrown
+      assertFalse(ArgsAspect.after8);
+      assertFalse(ArgsAspect.around1);
+      assertFalse(ArgsAspect.around3);
+      assertFalse(ArgsAspect.finally3);
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerAspect.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerAspect.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -24,6 +24,7 @@
 import junit.framework.Assert;
 
 import org.jboss.aop.advice.annotation.Caller;
+import org.jboss.aop.advice.annotation.Thrown;
 import org.jboss.aop.joinpoint.CurrentInvocation;
 
 /**
@@ -41,12 +42,20 @@
    static boolean around4 = false;
    static boolean after1 = false;
    static boolean after2 = false;
- 
+   static boolean throwing1 = false;
+   static boolean throwing3 = false;
+   static boolean finally1 = false;
+   static boolean finally2 = false;
+   static boolean finally4 = false;
+   
    static Object before2Caller = null;
    static Object before3Caller = null;
    static Object around2Caller = null;
    static Object around4Caller = null;
    static Object after2Caller = null;
+   static Object throwing3Caller = null;
+   static Object finally1Caller = null;
+   static Object finally4Caller = null;
    
    public static void clear()
    {
@@ -58,11 +67,19 @@
       around4 = false;
       after1 = false;
       after2 = false;
+      throwing1 = false;
+      throwing3 = false;
+      finally1 = false;
+      finally2 = false;
+      finally4 = false;
       before2Caller = null;
       before3Caller = null;
       around2Caller = null;
       around4Caller = null;
       after2Caller = null;
+      throwing3Caller = null;
+      finally1Caller = null;
+      finally4Caller = null;
    }
 
    
@@ -129,4 +146,42 @@
    {
       Assert.fail("This advice should never be executed");
    }
+   
+   public void throwing1(@Thrown Throwable throwable)
+   {
+      throwing1 = true;
+   }
+   
+   public void throwing2(@Caller String caller, @Thrown Throwable throwable)
+   {
+      Assert.fail("This advice should never be executed");
+   }
+   
+   public void throwing3(@Caller Object caller, @Thrown Throwable throwable)
+   {
+      throwing3 = true;
+      throwing3Caller = caller;
+   }
+   
+   public void finally1(@Caller TargetCallerPOJO caller)
+   {
+      finally1 = true;
+      finally1Caller = caller;
+   }
+   
+   public void finally2()
+   {
+      finally2 = true;
+   }
+   
+   public void finally3(@Caller ArgTestCase caller)
+   {
+      Assert.fail("This advice should never be executed");
+   }
+   
+   public void finally4(@Caller Object caller)
+   {
+      finally4 = true;
+      finally4Caller = caller;
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerTestCase.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/CallerTestCase.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -62,54 +62,146 @@
    
    public void test1() throws Exception
    {
-      pojo.method3();
-      assertAllAdvices(pojo);
+      pojo.method5();
+      assertAllAdvices(pojo, false);
    }
    
    public void test2() throws Exception
    {
-      pojo.method4();
-      assertAllAdvices(pojo);
+      boolean thrown = false;
+      try
+      {
+         pojo.method6();
+      }
+      catch (POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertAllAdvices(pojo, thrown);
    }
    
    public void test3() throws Exception
    {
-      pojo.method5();
-      assertAllAdvices(pojo);
+      pojo.method7();
+      assertAllAdvices(pojo,false);
    }
    
    public void test4() throws Exception
    {
-      TargetCallerPOJO.method6();
-      assertAllAdvices(null);
+      pojo.method8();
+      assertAllAdvices(pojo, false);
    }
    
    public void test5() throws Exception
    {
-      TargetCallerPOJO.method7();
-      assertAllAdvices(null);
+      boolean thrown = false;
+      try
+      {
+         pojo.method9();
+      }
+      catch(POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertAllAdvices(pojo, thrown);
    }
    
    public void test6() throws Exception
    {
-      TargetCallerPOJO.method8();
-      assertAllAdvices(null);
+      boolean thrown = false;
+      try
+      {
+         pojo.method10();
+      }
+      catch(POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertAllAdvices(pojo, thrown);
    }
    
-   public void assertAllAdvices(Object caller)
+   public void test7() throws Exception
    {
+      TargetCallerPOJO.method11();
+      assertAllAdvices(null, false);
+   }
+   
+   public void test8() throws Exception
+   {
+      TargetCallerPOJO.method12();
+      assertAllAdvices(null, false);
+   }
+   
+   public void test9() throws Exception
+   {
+      TargetCallerPOJO.method13();
+      assertAllAdvices(null, false);
+   }
+   
+   public void test10() throws Exception
+   {
+      boolean thrown = false;
+      try
+      {
+         TargetCallerPOJO.method14();
+      }
+      catch(POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertAllAdvices(null, thrown);
+   }
+   
+   public void test11() throws Exception
+   {
+      boolean thrown = false;
+      try
+      {
+         TargetCallerPOJO.method15();
+      }
+      catch(POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertAllAdvices(null, thrown);
+   }
+   
+   public void assertAllAdvices(Object caller, boolean error)
+   {
       assertTrue(CallerAspect.before1);
       assertTrue(CallerAspect.before2);
       assertTrue(CallerAspect.before3);
       assertTrue(CallerAspect.around1);
       assertTrue(CallerAspect.around2);
       assertTrue(CallerAspect.around4);
-      assertTrue(CallerAspect.after1);
-      assertTrue(CallerAspect.after2);
+      assertEquals(!error, CallerAspect.after1);
+      assertEquals(!error, CallerAspect.after2);
+      assertEquals(error, CallerAspect.throwing1);
+      assertEquals(error, CallerAspect.throwing3);
+      assertTrue(CallerAspect.finally1);
+      assertTrue(CallerAspect.finally2);
+      assertTrue(CallerAspect.finally4);
+      
       assertSame(caller, CallerAspect.before2Caller);
       assertSame(CallerAspect.before2Caller, CallerAspect.before3Caller);
       assertSame(CallerAspect.before3Caller, CallerAspect.around2Caller);
       assertSame(CallerAspect.around2Caller, CallerAspect.around4Caller);
-      assertSame(CallerAspect.around4Caller, CallerAspect.after2Caller);
+      if (error)
+      {
+         assertSame(CallerAspect.around4Caller, CallerAspect.throwing3Caller);
+         assertNull(CallerAspect.after2Caller);
+      }
+      else
+      {
+         assertSame(CallerAspect.around4Caller, CallerAspect.after2Caller);
+         assertNull(CallerAspect.throwing3Caller);
+      }
+      assertSame(CallerAspect.around4Caller, CallerAspect.finally1Caller);
+      assertSame(CallerAspect.finally1Caller, CallerAspect.finally4Caller);
    }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointAspect.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointAspect.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -43,6 +43,8 @@
    static JoinPointInfo afterJoinPointInfo = null;
    static String throwingAdvice = null;
    static JoinPointInfo throwingJoinPointInfo = null;
+   static String finallyAdvice = null;
+   static JoinPointInfo finallyJoinPointInfo = null;
    
    public static void clear()
    {
@@ -52,6 +54,8 @@
       afterJoinPointInfo = null;
       throwingAdvice = null;
       throwingJoinPointInfo = null;
+      finallyAdvice = null;
+      finallyJoinPointInfo = null;
    }
    
    public void before1()
@@ -139,4 +143,27 @@
       throwingAdvice = "throwing5";
       throwingJoinPointInfo = joinPointInfo;
    }
+   
+
+   public void finally1(@JoinPoint FieldInfo joinPointInfo)
+   {
+      finallyAdvice = "finally1";
+      finallyJoinPointInfo = joinPointInfo;
+   }
+   
+   public void finally2()
+   {
+      finallyAdvice = "finally2";
+   }
+   
+   public void finally3(@JoinPoint Object joinPointInfo)
+   {
+      finallyAdvice = "finally3";
+      finallyJoinPointInfo = (JoinPointInfo) joinPointInfo;
+   }
+   
+   public void finally4(@JoinPoint ConstructorInfo joinPointInfo)
+   {
+      Assert.fail("This advice should never be executed");
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointTestCase.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointTestCase.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -69,6 +69,11 @@
       assertNull(JoinPointAspect.beforeJoinPointInfo);
       assertEquals("after1", JoinPointAspect.afterAdvice);
       assertNotNull(JoinPointAspect.afterJoinPointInfo);
+      assertNull(JoinPointAspect.throwingAdvice);
+      assertNull(JoinPointAspect.throwingJoinPointInfo);
+      assertNull(JoinPointAspect.finallyAdvice);
+      assertNull(JoinPointAspect.finallyJoinPointInfo);
+      
       assertTrue(JoinPointAspect.afterJoinPointInfo instanceof FieldInfo);
       FieldInfo fieldInfo = (FieldInfo) JoinPointAspect.afterJoinPointInfo;
       assertEquals("number", fieldInfo.getAdvisedField().getName());
@@ -82,7 +87,13 @@
       assertNotNull(JoinPointAspect.beforeJoinPointInfo);
       assertNull(JoinPointAspect.afterAdvice);
       assertNull(JoinPointAspect.afterJoinPointInfo);
+      assertNull(JoinPointAspect.throwingAdvice);
+      assertNull(JoinPointAspect.throwingJoinPointInfo);
+      assertEquals("finally1", JoinPointAspect.finallyAdvice);
+      assertNotNull(JoinPointAspect.finallyJoinPointInfo);
       
+      assertSame(JoinPointAspect.beforeJoinPointInfo,
+            JoinPointAspect.finallyJoinPointInfo);
       assertTrue(JoinPointAspect.beforeJoinPointInfo instanceof FieldInfo);
       FieldInfo fieldInfo = (FieldInfo) JoinPointAspect.beforeJoinPointInfo;
       assertEquals("text", fieldInfo.getAdvisedField().getName());
@@ -96,6 +107,11 @@
       assertNull(JoinPointAspect.beforeJoinPointInfo);
       assertEquals("after5", JoinPointAspect.afterAdvice);
       assertNotNull(JoinPointAspect.afterJoinPointInfo);
+      assertNull(JoinPointAspect.throwingAdvice);
+      assertNull(JoinPointAspect.throwingJoinPointInfo);
+      assertNull(JoinPointAspect.finallyAdvice);
+      assertNull(JoinPointAspect.finallyJoinPointInfo);
+      
       assertTrue(JoinPointAspect.afterJoinPointInfo instanceof FieldInfo);
       FieldInfo fieldInfo = (FieldInfo) JoinPointAspect.afterJoinPointInfo;
       assertEquals("text", fieldInfo.getAdvisedField().getName());
@@ -109,6 +125,11 @@
       assertNotNull(JoinPointAspect.beforeJoinPointInfo);
       assertEquals("after3", JoinPointAspect.afterAdvice);
       assertNull(JoinPointAspect.afterJoinPointInfo);
+      assertNull(JoinPointAspect.throwingAdvice);
+      assertNull(JoinPointAspect.throwingJoinPointInfo);
+      assertNull(JoinPointAspect.finallyAdvice);
+      assertNull(JoinPointAspect.finallyJoinPointInfo);
+      
       assertTrue(JoinPointAspect.beforeJoinPointInfo instanceof MethodInfo);
       assertEquals("method1", ((MethodInfo) JoinPointAspect.beforeJoinPointInfo).
             getAdvisedMethod().getName());
@@ -123,6 +144,9 @@
       assertNotNull(JoinPointAspect.afterJoinPointInfo);
       assertNull(JoinPointAspect.throwingAdvice);
       assertNull(JoinPointAspect.throwingJoinPointInfo);
+      assertNull(JoinPointAspect.finallyAdvice);
+      assertNull(JoinPointAspect.finallyJoinPointInfo);
+      
       assertSame(JoinPointAspect.beforeJoinPointInfo, JoinPointAspect.afterJoinPointInfo);
       assertTrue(JoinPointAspect.beforeJoinPointInfo instanceof MethodInfo);
       assertEquals("method2", ((MethodInfo) JoinPointAspect.beforeJoinPointInfo).
@@ -148,6 +172,9 @@
       assertNull(JoinPointAspect.afterJoinPointInfo);
       assertEquals("throwing1", JoinPointAspect.throwingAdvice);
       assertNotNull(JoinPointAspect.throwingJoinPointInfo);
+      assertNull(JoinPointAspect.finallyAdvice);
+      assertNull(JoinPointAspect.finallyJoinPointInfo);
+      
       assertSame(JoinPointAspect.beforeJoinPointInfo,
             JoinPointAspect.throwingJoinPointInfo);
       assertTrue(JoinPointAspect.beforeJoinPointInfo instanceof MethodInfo);
@@ -168,12 +195,18 @@
       }
       assertTrue(exceptionThrown);
       
-      assertNull(JoinPointAspect.beforeAdvice);
-      assertNull(JoinPointAspect.beforeJoinPointInfo);
+      assertEquals("before4", JoinPointAspect.beforeAdvice);
+      assertNotNull(JoinPointAspect.beforeJoinPointInfo);
       assertNull(JoinPointAspect.afterAdvice);
       assertNull(JoinPointAspect.afterJoinPointInfo);
       assertNull(JoinPointAspect.throwingAdvice);
       assertNull(JoinPointAspect.throwingJoinPointInfo);
+      assertEquals("finally2", JoinPointAspect.finallyAdvice);
+      assertNull(JoinPointAspect.finallyJoinPointInfo);
+      
+      assertTrue(JoinPointAspect.beforeJoinPointInfo instanceof MethodInfo);
+      assertEquals("method3", ((MethodInfo) JoinPointAspect.beforeJoinPointInfo).
+            getAdvisedMethod().getName());
    }
    
    public void test8() throws POJOException
@@ -195,6 +228,11 @@
       assertNull(JoinPointAspect.afterJoinPointInfo);
       assertEquals("throwing3", JoinPointAspect.throwingAdvice);
       assertNotNull(JoinPointAspect.throwingJoinPointInfo);
+      assertEquals("finally3", JoinPointAspect.finallyAdvice);
+      assertNotNull(JoinPointAspect.finallyJoinPointInfo);
+      
+      assertSame(JoinPointAspect.throwingJoinPointInfo,
+            JoinPointAspect.finallyJoinPointInfo);
       assertTrue(JoinPointAspect.throwingJoinPointInfo instanceof MethodInfo);
       assertEquals("method4", ((MethodInfo) JoinPointAspect.throwingJoinPointInfo).
             getAdvisedMethod().getName());
@@ -219,6 +257,8 @@
       assertNull(JoinPointAspect.afterJoinPointInfo);
       assertEquals("throwing4", JoinPointAspect.throwingAdvice);
       assertNull(JoinPointAspect.throwingJoinPointInfo);
+      assertNull(JoinPointAspect.finallyAdvice);
+      assertNull(JoinPointAspect.finallyJoinPointInfo);
    }
    
    public void test10() throws POJOException
@@ -240,6 +280,9 @@
       assertNull(JoinPointAspect.afterJoinPointInfo);
       assertEquals("throwing5", JoinPointAspect.throwingAdvice);
       assertNotNull(JoinPointAspect.throwingJoinPointInfo);
+      assertNull(JoinPointAspect.finallyAdvice);
+      assertNull(JoinPointAspect.finallyJoinPointInfo);
+      
       assertTrue(JoinPointAspect.throwingJoinPointInfo instanceof MethodInfo);
       assertEquals("method6", ((MethodInfo) JoinPointAspect.throwingJoinPointInfo).
             getAdvisedMethod().getName());

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnAspect.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnAspect.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -26,6 +26,7 @@
 import org.jboss.aop.JoinPointInfo;
 import org.jboss.aop.advice.annotation.JoinPoint;
 import org.jboss.aop.advice.annotation.Return;
+import org.jboss.aop.advice.annotation.Thrown;
 import org.jboss.aop.joinpoint.Invocation;
 
 /**
@@ -39,6 +40,9 @@
    public static Object aroundReturn = null;
    public static String afterAdvice = null;
    public static Object afterReturn = null;
+   public static String finallyAdvice = null;
+   public static Object finallyReturn = null;
+   public static Object finallyThrown = null;
    
    public static void clear()
    {
@@ -46,6 +50,8 @@
       aroundReturn = null;
       afterAdvice = null;
       afterReturn = null;
+      finallyAdvice = null;
+      finallyReturn = null;
    }
    
    public void before(@Return Object object)
@@ -132,6 +138,12 @@
       return new SuperValue(110);
    }
 
+   public Object around12(Invocation invocation) throws Throwable
+   {
+      aroundAdvice = "around12";
+      aroundReturn = invocation.invokeNext();
+      return new SuperValue(120);
+   }
    
    public void after1(@org.jboss.aop.advice.annotation.JoinPoint JoinPointInfo info) throws Exception
    {
@@ -203,4 +215,99 @@
       afterReturn = returnedValue;
       return new SubValue(1100);
    }
+   
+   public SubValue after12(@Return SubValue returnedValue)
+   {
+      // intercepted method throws an exception, and should go directly to finally
+      Assert.fail("This advice should never be executed");
+      return new SubValue(0);
+   }
+   
+   public void finally1()
+   {
+      finallyAdvice = "finally1";
+   }
+   
+   public void finally2(@Return String returnedValue)
+   {
+      Assert.fail("This advice should never be executed");
+   }
+   
+   public String finally3(@Return Object returnedValue, @Thrown Throwable thrown)
+   {
+      finallyAdvice = "finally3";
+      finallyReturn = returnedValue;
+      finallyThrown = thrown;
+      return finallyAdvice;
+   }
+   
+   public String finally4(@Thrown Throwable thrown, @Return String returnedValue)
+   {
+      finallyAdvice = "finally4";
+      finallyReturn = returnedValue;
+      finallyThrown = thrown;
+      return finallyAdvice;
+   }
+   
+   public String finally5(@Return int returnedValue, @Thrown Throwable thrown)
+   {
+      Assert.fail("This advice should never be executed");
+      return null;
+   }
+   
+   public Object finally6(@Return Object returnedValue, @Thrown Throwable thrown)
+   {
+      finallyAdvice = "finally6";
+      finallyReturn = returnedValue;
+      finallyThrown = thrown;
+      return finallyAdvice;
+   }
+   
+   public void finally7(@Return Object returnedValue, @Thrown Throwable thrown)
+   {
+      finallyAdvice = "finally7";
+      finallyReturn = returnedValue;
+      finallyThrown = thrown;
+   }
+   
+   public SubValue finally8()
+   {
+      finallyAdvice = "finally8";
+      return new SubValue(8000);
+   }
+   
+   public SuperValue finally9() throws Throwable
+   {
+      Assert.fail("This advice should never be executed");
+      return null;
+   }
+   
+   public SubValue finally10(@Return SuperValue returnedValue, @Thrown Throwable thrown) throws Throwable
+   {
+      finallyAdvice = "finally10";
+      finallyReturn = returnedValue;
+      finallyThrown = thrown;
+      return new SubValue(10000);
+   }
+   
+   public SubValue finally11(@Return SuperValue returnedValue, @Thrown Throwable thrown) throws Throwable
+   {
+      finallyAdvice = "finally11";
+      finallyReturn = returnedValue;
+      finallyThrown = thrown;
+      return new SubValue(11000);
+   }
+   
+   public SubValue finally12(@Return SuperValue returnedValue, @Thrown Throwable thrown)
+   {
+      finallyAdvice = "finally12";
+      finallyReturn = returnedValue;
+      finallyThrown = thrown;
+      return new SubValue(12000);
+   }
+   
+   public SubValue finally13()
+   {
+      return new SubValue(13);
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnPOJO.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnPOJO.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -81,8 +81,13 @@
       return new SuperValue(11);
    }
    
-   public Object method12() throws POJOException
+   public SubValue method12() throws POJOException
    {
       throw new POJOException();
    }
+   
+   public SubValue method13() throws POJOException
+   {
+      throw new POJOException();
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnTestCase.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnTestCase.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -63,75 +63,108 @@
    public void test1()
    {
       pojo.method1();
+      
       assertNull(ReturnAspect.aroundAdvice);
       assertNull(ReturnAspect.aroundReturn);
       assertEquals("after1", ReturnAspect.afterAdvice);
       assertNull(ReturnAspect.afterReturn);
+      assertEquals("finally1", ReturnAspect.finallyAdvice);
+      assertNull(ReturnAspect.finallyReturn);
+      assertNull(ReturnAspect.finallyThrown);
    }
    
    public void test2()
    {
       assertEquals("method2", pojo.method2());
+      
       assertNull(ReturnAspect.aroundAdvice);
       assertNull(ReturnAspect.aroundReturn);
       assertEquals("after2", ReturnAspect.afterAdvice);
       assertEquals("method2", ReturnAspect.afterReturn);
+      assertNull(ReturnAspect.finallyAdvice);
+      assertNull(ReturnAspect.finallyReturn);
+      assertNull(ReturnAspect.finallyThrown);
    }
    
    public void test3()
    {
-      assertEquals("after3", pojo.method3());
+      assertEquals("finally3", pojo.method3());
+      
       assertEquals("around3", ReturnAspect.aroundAdvice);
       assertEquals("method3", ReturnAspect.aroundReturn);
       assertEquals("after3", ReturnAspect.afterAdvice);
       assertEquals("around3", ReturnAspect.afterReturn);
+      assertEquals("finally3", ReturnAspect.finallyAdvice);
+      assertEquals("after3", ReturnAspect.finallyReturn);
+      assertNull(ReturnAspect.finallyThrown);
    }
    
    public void test4()
    {
-      assertEquals("after4", pojo.method4());
+      assertEquals("finally4", pojo.method4());
+      
       assertEquals("around4", ReturnAspect.aroundAdvice);
       assertEquals("method4", ReturnAspect.aroundReturn);
       assertEquals("after4", ReturnAspect.afterAdvice);
       assertEquals("around4", ReturnAspect.afterReturn);
+      assertEquals("finally4", ReturnAspect.finallyAdvice);
+      assertEquals("after4", ReturnAspect.finallyReturn);
+      assertNull(ReturnAspect.finallyThrown);
    }
    
    public void test5()
    {
       assertEquals("after5", pojo.method5());
+      
       assertEquals("around5", ReturnAspect.aroundAdvice);
       assertNull(ReturnAspect.aroundReturn);
       assertEquals("after5", ReturnAspect.afterAdvice);
       assertNull(ReturnAspect.afterReturn);
+      assertNull(ReturnAspect.finallyAdvice);
+      assertNull(ReturnAspect.finallyReturn);
+      assertNull(ReturnAspect.finallyThrown);
    }
    
    public void test6()
    {
-      assertEquals("method6", pojo.method6());
+      assertEquals("finally6", pojo.method6());
+      
       assertNull(ReturnAspect.aroundAdvice);
       assertNull(ReturnAspect.aroundReturn);
       assertEquals("after6", ReturnAspect.afterAdvice);
       assertNull(ReturnAspect.afterReturn);
+      assertEquals("finally6", ReturnAspect.finallyAdvice);
+      assertEquals("method6", ReturnAspect.finallyReturn);
+      assertNull(ReturnAspect.finallyThrown);
    }
    
    public void test7()
    {
       assertEquals("after7", pojo.method7());
+      
       assertEquals("around7", ReturnAspect.aroundAdvice);
       assertEquals("method7", ReturnAspect.aroundReturn);
       assertEquals("after7", ReturnAspect.afterAdvice);
       assertEquals("around7", ReturnAspect.afterReturn);
+      assertEquals("finally7", ReturnAspect.finallyAdvice);
+      assertNotNull(ReturnAspect.finallyReturn);
+      assertEquals("after7", ReturnAspect.finallyReturn);
+      assertNull(ReturnAspect.finallyThrown);
    }
    
    public void test8()
    {
       SubValue value = pojo.method8();
       assertNotNull(value);
-      assertEquals(800, value.i);
+      assertEquals(8000, value.i);
+      
       assertEquals("around8", ReturnAspect.aroundAdvice);
       assertNull(ReturnAspect.aroundReturn);
       assertEquals("after8", ReturnAspect.afterAdvice);
       assertNull(ReturnAspect.afterReturn);
+      assertEquals("finally8", ReturnAspect.finallyAdvice);
+      assertNull(ReturnAspect.finallyReturn);
+      assertNull(ReturnAspect.finallyThrown);
    }
    
    public void test9()
@@ -139,43 +172,92 @@
       SubValue value = pojo.method9();
       assertNotNull(value);
       assertEquals(9, value.i);
+      
       assertNull(ReturnAspect.aroundAdvice);
       assertNull(ReturnAspect.aroundReturn);
       assertNull(ReturnAspect.afterAdvice);
       assertNull(ReturnAspect.afterReturn);
+      assertNull(ReturnAspect.finallyAdvice);
+      assertNull(ReturnAspect.finallyReturn);
+      assertNull(ReturnAspect.finallyThrown);
    }
    
    public void test10()
    {
       SuperValue value = pojo.method10();
       assertNotNull(value);
-      assertEquals(100, value.i);
+      assertEquals(10000, value.i);
+      
       assertEquals("around10", ReturnAspect.aroundAdvice);
       assertNotNull(ReturnAspect.aroundReturn);
       assertEquals(10, ((SuperValue) ReturnAspect.aroundReturn).i);
       assertNull(ReturnAspect.afterAdvice);
       assertNull(ReturnAspect.afterReturn);
+      assertEquals("finally10", ReturnAspect.finallyAdvice);
+      assertNotNull(ReturnAspect.finallyReturn);
+      assertEquals(100, ((SuperValue) ReturnAspect.finallyReturn).i);
+      assertNull(ReturnAspect.finallyThrown);
    }
 
    public void test11()
    {
       SuperValue value = pojo.method11();
       assertNotNull(value);
-      assertEquals(1100, value.i);
+      assertEquals(11000, value.i);
+      
       assertEquals("around11", ReturnAspect.aroundAdvice);
       assertNotNull(ReturnAspect.aroundReturn);
       assertEquals(11, ((SuperValue) ReturnAspect.aroundReturn).i);
       assertEquals("after11", ReturnAspect.afterAdvice);
       assertNotNull(ReturnAspect.afterReturn);
       assertEquals(110, ((SuperValue) ReturnAspect.afterReturn).i);
+      assertEquals("finally11", ReturnAspect.finallyAdvice);
+      assertNotNull(ReturnAspect.finallyReturn);
+      assertEquals(1100, ((SuperValue) ReturnAspect.finallyReturn).i);
+      assertNull(ReturnAspect.finallyThrown);
    }
    
    public void test12()
    {
+      Throwable thrown = null;
       try
       {
          pojo.method12();
       }
-      catch(POJOException e){}
+      catch(POJOException e)
+      {
+         thrown = e;
+      }
+      assertNotNull(thrown);
+      
+      assertEquals("around12", ReturnAspect.aroundAdvice);
+      assertNull(ReturnAspect.aroundReturn);
+      assertNull(ReturnAspect.afterAdvice);
+      assertNull(ReturnAspect.afterReturn);
+      assertEquals("finally12", ReturnAspect.finallyAdvice);
+      assertNull(ReturnAspect.finallyReturn);
+      assertSame(thrown, ReturnAspect.finallyThrown);
    }
+   
+   public void method13()
+   {
+      boolean thrown = false;
+      try
+      {
+         pojo.method13();
+      }
+      catch(POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      assertEquals("around12", ReturnAspect.aroundAdvice);
+      assertNull(ReturnAspect.aroundReturn);
+      assertNull(ReturnAspect.afterAdvice);
+      assertNull(ReturnAspect.afterReturn);
+      assertEquals("finally13", ReturnAspect.finallyAdvice);
+      assertNull(ReturnAspect.finallyReturn);
+      assertNull(ReturnAspect.finallyThrown);
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetAspect.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetAspect.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -24,6 +24,7 @@
 import junit.framework.Assert;
 
 import org.jboss.aop.advice.annotation.Target;
+import org.jboss.aop.advice.annotation.Thrown;
 import org.jboss.aop.joinpoint.CurrentInvocation;
 
 /**
@@ -39,10 +40,16 @@
    static boolean around2 = false;
    static boolean after1 = false;
    static boolean after2 = false;
- 
+   static boolean throwing1 = false;
+   static boolean throwing2 = false;
+   static boolean finally1 = false;
+   static boolean finally2 = false;
+
    static Object before2Target = null;
    static Object around2Target = null;
    static Object after2Target = null;
+   static Object throwing1Target = null;
+   static Object finally2Target = null;
    
    public static void clear()
    {
@@ -52,9 +59,16 @@
       around2 = false;
       after1 = false;
       after2 = false;
+      throwing1 = false;
+      throwing2 = false;
+      finally1 = false;
+      finally2 = false;
+      
       before2Target = null;
       around2Target = null;
       after2Target = null;
+      throwing1Target = null;
+      finally2Target = null;
    }
    
    public void before1()
@@ -102,4 +116,36 @@
       after2 = true;
       after2Target = target;
    }
+   
+   public void throwing1(@Thrown Throwable thrown, @Target TargetCallerPOJO target)
+   {
+      throwing1 = true;
+      throwing1Target = target;
+   }
+   
+   public void throwing2(@Thrown Throwable thrown)
+   {
+      throwing2 = true;
+   }
+   
+   public void throwing3(@Thrown Throwable thrown, @Target String target)
+   {
+      Assert.fail("This advice should never be executed");
+   }
+   
+   public void finally1()
+   {
+      finally1 = true;
+   }
+   
+   public void finally2(@Target Object target)
+   {
+      finally2 = true;
+      finally2Target = target;
+   }
+   
+   public void finally3(@Target double target)
+   {
+      Assert.fail("This advice should never be executed");
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerPOJO.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerPOJO.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -30,49 +30,108 @@
 public class TargetCallerPOJO
 {
    public TargetCallerPOJO(){}
+   
    public TargetCallerPOJO(int x){}
    
+   public TargetCallerPOJO(int x, String y) throws POJOException
+   {
+      throw new POJOException();
+   }
+   
    public int field1;
    public static int field2;
    
    public void method1(){}
    public static void method2(){}
    
-   public void method3(){
+   public void method3() throws POJOException
+   {
+      throw new POJOException();
+   }
+   
+   public static void method4() throws POJOException
+   {
+      throw new POJOException();
+   }
+      
+   public void method5()
+   {
       new TargetCallerPOJO2(3);
    }
    
-   public void method4()
+   public void method6() throws POJOException
    {
+      new TargetCallerPOJO2(3, "method6");
+   }
+   
+   public void method7()
+   {
       TargetCallerPOJO2 pojo2 = new TargetCallerPOJO2();
-      pojo2.method1();
+      pojo2.method1_();
    }
    
-   public void method5()
+   public void method8()
    {
-      TargetCallerPOJO2.method2();
+      TargetCallerPOJO2.method2_();
    }
    
-   public static void method6(){
+   public void method9() throws POJOException
+   {
+      TargetCallerPOJO2 pojo2 = new TargetCallerPOJO2();
+      pojo2.method3_();
+   }
+   
+   public void method10() throws POJOException
+   {
+      TargetCallerPOJO2.method4_();
+   }
+   
+   public static void method11(){
       new TargetCallerPOJO2(3);
    }
    
-   public static void method7()
+   public static void method12()
    {
       TargetCallerPOJO2 pojo2 = new TargetCallerPOJO2();
-      pojo2.method1();
+      pojo2.method1_();
    }
    
-   public static void method8()
+   public static void method13()
    {
-      TargetCallerPOJO2.method2();
+      TargetCallerPOJO2.method2_();
    }
+   
+   public static void method14() throws POJOException
+   {
+      TargetCallerPOJO2 pojo2 = new TargetCallerPOJO2();
+      pojo2.method3_();
+   }
+   
+   public static void method15() throws POJOException
+   {
+      TargetCallerPOJO2.method4_();
+   }
 }
 
 class TargetCallerPOJO2 extends TargetCallerPOJO
 {
    public TargetCallerPOJO2(){}
+   
    public TargetCallerPOJO2(int x){}
-   public void method1(){}
-   public static void method2(){}
+   
+   public TargetCallerPOJO2(int x, String y) throws POJOException
+   {
+      throw new POJOException();
+   }
+   
+   public void method1_(){}
+   public static void method2_(){}
+   public void method3_() throws POJOException
+   {
+      throw new POJOException();
+   }
+   public static void method4_() throws POJOException
+   {
+      throw new POJOException();
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetTestCase.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetTestCase.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -63,126 +63,276 @@
    public void test1()
    {
       new TargetCallerPOJO(1);
-      assertStaticAdvices();
+      assertStaticAdvices(false);
    }
-
    
    public void test2()
    {
-      pojo.field1 = 0;
-      assertAllAdvices();
-      assertTarget(pojo);
+      boolean thrown = false;
+      try
+      {
+         new TargetCallerPOJO(1, "test2");
+      }
+      catch (POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertStaticAdvices(thrown);
    }
-   
+
    public void test3()
    {
-      int test = pojo.field1;
-      assertAllAdvices();
-      assertTarget(pojo);
+      pojo.field1 = 0;
+      assertAllAdvices(false);
+      assertTarget(pojo, false);
    }
    
    public void test4()
    {
-      TargetCallerPOJO.field2 = 5;
-      assertAllAdvices();
-      assertTarget(null);
+      int test = pojo.field1;
+      assertAllAdvices(false);
+      assertTarget(pojo, false);
    }
    
    public void test5()
    {
-      int test = TargetCallerPOJO.field2;
-      assertAllAdvices();
-      assertTarget(null);
+      TargetCallerPOJO.field2 = 5;
+      assertAllAdvices(false);
+      assertTarget(null, false);
    }
    
    public void test6()
    {
-      pojo.method1();
-      assertAllAdvices();
-      assertTarget(pojo);
+      int test = TargetCallerPOJO.field2;
+      assertAllAdvices(false);
+      assertTarget(null, false);
    }
    
    public void test7()
    {
-      TargetCallerPOJO.method2();
-      assertAllAdvices();
-      assertTarget(null);
+      pojo.method1();
+      assertAllAdvices(false);
+      assertTarget(pojo, false);
    }
    
    public void test8()
    {
-      pojo.method3();
-      assertStaticAdvices();
+      TargetCallerPOJO.method2();
+      assertAllAdvices(false);
+      assertTarget(null, false);
    }
    
    public void test9()
    {
-      pojo.method4();
-      assertAllAdvices();
-      assertTarget();
+      boolean thrown = false;
+      try
+      {
+         pojo.method3();
+      }
+      catch (POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertAllAdvices(thrown);
+      assertTarget(pojo, thrown);
    }
    
    public void test10()
    {
-      pojo.method5();
-      assertAllAdvices();
-      assertTarget(null);
+      boolean thrown = false;
+      try
+      {
+         TargetCallerPOJO.method4();
+      }
+      catch (POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertAllAdvices(thrown);
+      assertTarget(null, thrown);
    }
    
    public void test11()
    {
-      TargetCallerPOJO.method6();
-      assertStaticAdvices();
+      pojo.method5();
+      assertStaticAdvices(false);
    }
    
    public void test12()
    {
-      TargetCallerPOJO.method7();
-      assertAllAdvices();
-      assertTarget();
+      boolean thrown = false;
+      try
+      {
+         pojo.method6();
+      }
+      catch (POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertStaticAdvices(thrown);
    }
    
    public void test13()
    {
-      TargetCallerPOJO.method8();
-      assertAllAdvices();
-      assertTarget(null);
+      pojo.method7();
+      assertAllAdvices(false);
+      assertTarget(false);
    }
    
-   private void assertAllAdvices()
+   public void test14()
    {
+      pojo.method8();
+      assertAllAdvices(false);
+      assertTarget(null, false);
+   }
+   
+   public void test15()
+   {
+      boolean thrown = false;
+      try
+      {
+         pojo.method9();
+      }
+      catch (POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertAllAdvices(thrown);
+      assertTarget(thrown);
+   }
+   
+   public void test16()
+   {
+      boolean thrown = false;
+      try
+      {
+         pojo.method10();
+      }
+      catch (POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertAllAdvices(thrown);
+      assertTarget(null, thrown);
+   }
+   
+   public void test17()
+   {
+      TargetCallerPOJO.method11();
+      assertStaticAdvices(false);
+   }
+   
+   public void test18()
+   {
+      TargetCallerPOJO.method12();
+      assertAllAdvices(false);
+      assertTarget(false);
+   }
+   
+   public void test19()
+   {
+      TargetCallerPOJO.method13();
+      assertAllAdvices(false);
+      assertTarget(null, false);
+   }
+   
+   public void test20()
+   {
+      boolean thrown = false;
+      try
+      {
+         TargetCallerPOJO.method14();
+      }
+      catch (POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertAllAdvices(thrown);
+      assertTarget(thrown);
+   }
+   
+   public void test21()
+   {
+      boolean thrown = false;
+      try
+      {
+         TargetCallerPOJO.method15();
+      }
+      catch (POJOException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      assertAllAdvices(thrown);
+      assertTarget(null, thrown);
+   }
+   
+   private void assertAllAdvices(boolean error)
+   {
       assertTrue(TargetAspect.before1);
       assertTrue(TargetAspect.before2);
       assertTrue(TargetAspect.around1);
       assertTrue(TargetAspect.around2);
-      assertTrue(TargetAspect.after1);
-      assertTrue(TargetAspect.after2);
+      assertEquals(!error, TargetAspect.after1);
+      assertEquals(!error, TargetAspect.after2);
+      assertEquals(error, TargetAspect.throwing1);
+      assertEquals(error, TargetAspect.throwing2);
+      assertTrue(TargetAspect.finally1);
+      assertTrue(TargetAspect.finally2);
    }
    
-   private void assertTarget()
+   private void assertTarget(boolean error)
    {
       assertNotNull(TargetAspect.before2Target);
-      assertSame(TargetAspect.before2Target, TargetAspect.around2Target);
-      assertSame(TargetAspect.around2Target, TargetAspect.after2Target);
+      assertSameTarget(error);
    }
    
-   private void assertTarget(Object target)
+   private void assertTarget(Object target, boolean error)
    {
       assertSame(target, TargetAspect.before2Target);
+      assertSameTarget(error);
+   }
+   
+   private void assertSameTarget(boolean error)
+   {
       assertSame(TargetAspect.before2Target, TargetAspect.around2Target);
-      assertSame(TargetAspect.around2Target, TargetAspect.after2Target);
+      if (error)
+      {
+         assertSame(TargetAspect.around2Target, TargetAspect.throwing1Target);
+         assertNull(TargetAspect.after2Target);
+      }
+      else
+      {
+         assertSame(TargetAspect.around2Target, TargetAspect.after2Target);
+         assertNull(TargetAspect.throwing1Target);
+      }
+      assertSame(TargetAspect.around2Target, TargetAspect.finally2Target);
    }
    
-   private void assertStaticAdvices()
+   private void assertStaticAdvices(boolean error)
    {
       assertTrue(TargetAspect.before1);
       assertFalse(TargetAspect.before2);
       assertTrue(TargetAspect.around1);
       assertFalse(TargetAspect.around2);
-      assertTrue(TargetAspect.after1);
+      assertEquals(!error, TargetAspect.after1);
       assertFalse(TargetAspect.after2);
+      assertFalse(TargetAspect.throwing1);
+      assertEquals(error, TargetAspect.throwing2);
+      assertTrue(TargetAspect.finally1);
+      assertFalse(TargetAspect.finally2);
+      
       assertNull(TargetAspect.before2Target);
       assertNull(TargetAspect.around2Target);
       assertNull(TargetAspect.after2Target);
+      assertNull(TargetAspect.throwing1Target);
+      assertNull(TargetAspect.finally2Target);
    }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownAspect.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownAspect.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -33,42 +33,52 @@
  */
 public class ThrownAspect
 {
-
-   public static String advice;
-   public static Throwable thrown;
-   public static int thrownNumber;
+   // as a convention, the number of the thrown exception should never be 0, so we
+   // can identify when the number hasn't been set in ThrownAspect, and when it has
    
+   public static String throwingAdvice;
+   public static Throwable throwingThrown;
+   public static int throwingNumber;
+   public static String finallyAdvice;
+   public static Throwable finallyThrown;
+   public static int finallyNumber;
+   
+   
    public static void clear()
    {
-      advice = null;
-      thrown = null;
-      thrownNumber = 0;
+      throwingAdvice = null;
+      throwingThrown = null;
+      throwingNumber = 0;
+      finallyAdvice = null;
+      finallyThrown = null;
+      finallyNumber = 0;
    }
    
    public void throwing1()
    {
-      advice = "throwing1";
+      throwingAdvice = "throwing1";
    }
    
    public void throwing2(@Thrown Throwable throwable, @Arg int i)
    {
-      advice = "throwing2";
-      thrownNumber = i;
-      thrown = throwable;
+      throwingAdvice = "throwing2";
+      throwingNumber = i;
+      throwingThrown = throwable;
+      ((POJOException) throwable).number = throwingNumber + 1;
    }
    
    public void throwing3(@Thrown Exception exception)
    {
-      advice = "throwing3";
-      thrownNumber = ((POJOException) exception).number;
-      thrown = exception;
+      throwingAdvice = "throwing3";
+      throwingNumber = ((POJOException) exception).number;
+      throwingThrown = exception;
    }
    
    public void throwing4(@Thrown POJOException pojoException, @Arg int i)
    {
-      advice = "throwing4";
-      thrownNumber = i;
-      thrown = pojoException;
+      throwingAdvice = "throwing4";
+      throwingNumber = i;
+      throwingThrown = pojoException;
    }
    
    public void throwing5(@Thrown RuntimeException runtimeException)
@@ -76,13 +86,59 @@
       Assert.fail("This advice should never be executed");
    }
    
-   public void throwing6(Throwable throwable)
+   public void throwing6(@Thrown Throwable throwable)
    {
+      // exception isn't thrown by joinpoint
       Assert.fail("This advice should never be executed");
    }
    
-   public void throwing7(@Arg int i)
+   public void throwing7(Throwable throwable)
    {
       Assert.fail("This advice should never be executed");
    }
+   
+   public void throwing8(@Arg int i)
+   {
+      Assert.fail("This advice should never be executed");
+   }
+   
+   public void finally1(@Thrown Throwable throwable)
+   {
+      finallyAdvice = "finally1";
+      finallyThrown = throwable;
+      finallyNumber = ((POJOException) throwable).number;
+      ((POJOException) throwable).number = finallyNumber + 1;
+   }
+   
+   public void finally2()
+   {
+      finallyAdvice = "finally2";
+   }
+   
+   public void finally3(@Thrown POJOException throwable)
+   {
+      finallyAdvice = "finally3";
+      finallyThrown = throwable;
+      finallyNumber = throwable.number;
+   }
+ 
+   public void finally4(@Arg int i, @Thrown Throwable throwable)
+   {
+      finallyAdvice = "finally4";
+      finallyThrown = throwable;
+      finallyNumber = i;
+   }
+   
+   public void finally5(@Thrown Object throwable)
+   {
+      finallyAdvice = "finally5";
+      finallyThrown = (Throwable) throwable;
+      finallyNumber = ((POJOException) throwable).number;
+   }
+   
+   public void finally6(@Thrown Throwable throwable)
+   {
+      finallyAdvice = "finally6";
+      finallyThrown = throwable;
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownPOJO.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownPOJO.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -28,6 +28,9 @@
  */
 public class ThrownPOJO
 {
+   // as a convention, the number of the thrown exception should never be 0, so we
+   // can identify when the number hasn't been set in ThrownAspect, and when it has
+   
    public void method1(int i) throws POJOException
    {
       throw new POJOException(i);
@@ -53,7 +56,9 @@
       throw new POJOException(i);
    }
    
-   public void method6() throws POJOException
+   public void method6() throws POJOException { }
+   
+   public void method7() throws POJOException
    {
       throw new POJOException(6);
    }

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownTestCase.java	2007-05-02 20:01:57 UTC (rev 62757)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownTestCase.java	2007-05-02 20:52:59 UTC (rev 62758)
@@ -35,6 +35,9 @@
  */
 public class ThrownTestCase extends AOPTestWithSetup
 {
+   // as a convention, the number of the thrown exception should never be 0, so we
+   // can identify when the number hasn't been set in ThrownAspect, and when it has
+   
    private ThrownPOJO pojo;
 
    public static void main(String[] args)
@@ -71,10 +74,15 @@
       catch(POJOException pojoException)
       {
          thrown = true;
-         assertEquals(11, pojoException.number);
-         assertNull(ThrownAspect.advice);
-         assertNull(ThrownAspect.thrown);
-         assertEquals(0, ThrownAspect.thrownNumber);
+         assertEquals(12, pojoException.number);
+         
+         assertNull(ThrownAspect.throwingAdvice);
+         assertNull(ThrownAspect.throwingThrown);
+         assertEquals(0, ThrownAspect.throwingNumber);
+         
+         assertEquals("finally1", ThrownAspect.finallyAdvice);
+         assertSame(pojoException, ThrownAspect.finallyThrown);
+         assertEquals(11, ThrownAspect.finallyNumber);
       }
       assertTrue(thrown);
    }
@@ -89,10 +97,15 @@
       catch(POJOException pojoException)
       {
          thrown = true;
-         assertEquals(23, pojoException.number);
-         assertEquals("throwing2", ThrownAspect.advice);
-         assertEquals(pojoException, ThrownAspect.thrown);
-         assertEquals(23, ThrownAspect.thrownNumber);
+         assertEquals(24, pojoException.number);
+         
+         assertEquals("throwing2", ThrownAspect.throwingAdvice);
+         assertSame(pojoException, ThrownAspect.throwingThrown);
+         assertEquals(23, ThrownAspect.throwingNumber);
+         
+         assertEquals("finally2", ThrownAspect.finallyAdvice);
+         assertNull(ThrownAspect.finallyThrown);
+         assertEquals(0, ThrownAspect.finallyNumber);
       }
       assertTrue(thrown);
    }
@@ -108,12 +121,17 @@
       {
          thrown = true;
          assertEquals(37, pojoException.number);
-         assertNull(ThrownAspect.advice);
-         assertNull(ThrownAspect.thrown);
-         assertEquals(0, ThrownAspect.thrownNumber);
+         
+         assertNull(ThrownAspect.throwingAdvice);
+         assertNull(ThrownAspect.throwingThrown);
+         assertEquals(0, ThrownAspect.throwingNumber);
          /*assertEquals("throwing3", ThrownAspect.advice);
-         assertEquals(pojoException, ThrownAspect.thrown);
+         assertSame(pojoException, ThrownAspect.thrown);
          assertEquals(37, ThrownAspect.thrownNumber);*/
+         
+         assertNull(ThrownAspect.finallyAdvice);
+         assertNull(ThrownAspect.finallyThrown);
+         assertEquals(0, ThrownAspect.finallyNumber);
       }
       assertTrue(thrown);
    }
@@ -129,12 +147,15 @@
       {
          thrown = true;
          assertEquals(43, pojoException.number);
-         assertNull(ThrownAspect.advice);
-         assertNull(ThrownAspect.thrown);
-         assertEquals(0, ThrownAspect.thrownNumber);
+         
+         assertNull(ThrownAspect.throwingAdvice);
+         assertNull(ThrownAspect.throwingThrown);
+         assertEquals(0, ThrownAspect.throwingNumber);
          /*assertEquals("throwing4", ThrownAspect.advice);
-         assertEquals(pojoException, ThrownAspect.thrown);
+         assertSame(pojoException, ThrownAspect.thrown);
          assertEquals(43, ThrownAspect.thrownNumber);*/
+         
+
       }
       assertTrue(thrown);
    }
@@ -150,9 +171,14 @@
       {
          thrown = true;
          assertEquals(59, pojoException.number);
-         assertNull(ThrownAspect.advice);
-         assertNull(ThrownAspect.thrown);
-         assertEquals(0, ThrownAspect.thrownNumber);
+         
+         assertNull(ThrownAspect.throwingAdvice);
+         assertNull(ThrownAspect.throwingThrown);
+         assertEquals(0, ThrownAspect.throwingNumber);
+         
+         assertEquals("finally5", ThrownAspect.finallyAdvice);
+         assertSame(pojoException, ThrownAspect.finallyThrown);
+         assertEquals(59, ThrownAspect.finallyNumber);
       }
       assertTrue(thrown);
    }
@@ -167,10 +193,36 @@
       catch(POJOException pojoException)
       {
          thrown = true;
+      }
+      assertFalse(thrown);
+      
+      assertNull(ThrownAspect.throwingAdvice);
+      assertNull(ThrownAspect.throwingThrown);
+      assertEquals(0, ThrownAspect.throwingNumber);
+      
+      assertEquals("finally6", ThrownAspect.finallyAdvice);
+      assertNull(ThrownAspect.finallyThrown);
+      assertEquals(0, ThrownAspect.finallyNumber);
+   }
+   
+   public void test7()
+   {
+      boolean thrown = false;
+      try
+      {
+         pojo.method7();
+      }
+      catch(POJOException pojoException)
+      {
+         thrown = true;
          assertEquals(6, pojoException.number);
-         assertNull(ThrownAspect.advice);
-         assertNull(ThrownAspect.thrown);
-         assertEquals(0, ThrownAspect.thrownNumber);
+         assertNull(ThrownAspect.throwingAdvice);
+         assertNull(ThrownAspect.throwingThrown);
+         assertEquals(0, ThrownAspect.throwingNumber);
+         
+         assertNull(ThrownAspect.finallyAdvice);
+         assertNull(ThrownAspect.finallyThrown);
+         assertEquals(0, ThrownAspect.finallyNumber);
       }
       assertTrue(thrown);
    }




More information about the jboss-cvs-commits mailing list