[jboss-cvs] JBossAS SVN: r63581 - in projects/aop/trunk/aop/src: resources/test/beforeafterthrowingscoped and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jun 20 09:06:31 EDT 2007


Author: kabir.khan at jboss.com
Date: 2007-06-20 09:06:31 -0400 (Wed, 20 Jun 2007)
New Revision: 63581

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java
   projects/aop/trunk/aop/src/resources/test/beforeafterthrowingscoped/jboss-aop.xml
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/BeforeAfterThrowingScopedTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/POJOWithPerJoinpointAspects.java
Log:
[JBAOP-425] We should not try to invoke lightweight aspect scoped PER_INSTANCE for contructors

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java	2007-06-20 12:39:57 UTC (rev 63580)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java	2007-06-20 13:06:31 UTC (rev 63581)
@@ -1474,6 +1474,10 @@
          ArrayList<AdviceSetup>[] aspects = (ArrayList<AdviceSetup>[]) new ArrayList<?>[length];
          for (int i = 0 ; i < allSetups.length ; i++)
          {
+            if (!allSetups[i].shouldInvokeAspect())
+            {
+               continue;
+            }
             AdviceMethodProperties properties = getAdviceMethodProperties(info, allSetups[i]);
             AdviceType type = allSetups[i].getType();
             int index = type.ordinal();
@@ -1482,6 +1486,7 @@
                aspects[index] = new ArrayList<AdviceSetup>();
             }
             
+            
             properties = type.getFactory().findAdviceMethod(properties);
             if (properties != null)
             {

Modified: projects/aop/trunk/aop/src/resources/test/beforeafterthrowingscoped/jboss-aop.xml
===================================================================
--- projects/aop/trunk/aop/src/resources/test/beforeafterthrowingscoped/jboss-aop.xml	2007-06-20 12:39:57 UTC (rev 63580)
+++ projects/aop/trunk/aop/src/resources/test/beforeafterthrowingscoped/jboss-aop.xml	2007-06-20 13:06:31 UTC (rev 63581)
@@ -5,33 +5,19 @@
 	<aspect class="org.jboss.test.aop.beforeafterthrowingscoped.PerClassAspect" scope="PER_CLASS"/>
 	<aspect class="org.jboss.test.aop.beforeafterthrowingscoped.PerVmAspect" scope="PER_VM"/>
 	
-	<bind pointcut="execution(* org.jboss.test.aop.beforeafterthrowingscoped.POJOWithPerInstanceAspects->methodWithPerInstanceAspects(..))">
+	<bind pointcut="all(org.jboss.test.aop.beforeafterthrowingscoped.POJOWithPerInstanceAspects)">
 		<before aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerInstanceAspect" name="before"/>
 		<after aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerInstanceAspect" name="after"/>
 		<throwing aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerInstanceAspect" name="throwing"/>		
 		<finally aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerInstanceAspect" name="finaly"/>
 	</bind>
 	
-	<bind pointcut="field(* org.jboss.test.aop.beforeafterthrowingscoped.POJOWithPerInstanceAspects->field)">
-		<before aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerInstanceAspect" name="before"/>
-		<after aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerInstanceAspect" name="after"/>
-		<throwing aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerInstanceAspect" name="throwing"/>		
-		<finally aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerInstanceAspect" name="finaly"/>
-	</bind>
-	
-	<bind pointcut="execution(* org.jboss.test.aop.beforeafterthrowingscoped.POJOWithPerJoinpointAspects->method*(..))">
+	<bind pointcut="all(org.jboss.test.aop.beforeafterthrowingscoped.POJOWithPerJoinpointAspects)">
 		<before aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerJoinpointAspect" name="before"/>
 		<after aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerJoinpointAspect" name="after"/>
 		<throwing aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerJoinpointAspect" name="throwing"/>		
 		<finally aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerJoinpointAspect" name="finaly"/>
 	</bind>
-
-	<bind pointcut="field(* org.jboss.test.aop.beforeafterthrowingscoped.POJOWithPerJoinpointAspects->field*)">
-		<before aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerJoinpointAspect" name="before"/>
-		<after aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerJoinpointAspect" name="after"/>
-		<throwing aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerJoinpointAspect" name="throwing"/>		
-		<finally aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerJoinpointAspect" name="finaly"/>
-	</bind>
 	
 	<bind pointcut="all(org.jboss.test.aop.beforeafterthrowingscoped.POJOWithPerClassJoinpointAspects)">
 		<before aspect="org.jboss.test.aop.beforeafterthrowingscoped.PerClassJoinpointAspect" name="before"/>

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/BeforeAfterThrowingScopedTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/BeforeAfterThrowingScopedTestCase.java	2007-06-20 12:39:57 UTC (rev 63580)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/BeforeAfterThrowingScopedTestCase.java	2007-06-20 13:06:31 UTC (rev 63581)
@@ -51,9 +51,18 @@
       return suite;
    }
 
+   public void testPerInstanceConstructorAspects()
+   {
+      PerInstanceAspect.reset();
+      POJOWithPerInstanceAspects pojo = new POJOWithPerInstanceAspects();
+      assertNull(PerInstanceAspect.before);
+      assertNull(PerInstanceAspect.after);
+      assertNull(PerInstanceAspect.throwing);
+      assertNull(PerInstanceAspect.finaly);
+   }
+   
    public void testPerInstanceVoidMethodAspects()
    {
-      System.out.println("===== testPerInstanceVoidMethodAspects()");
       System.out.println("Calling POJO 1");
       PerInstanceAspect.reset();
       POJOWithPerInstanceAspects pojo1 = new POJOWithPerInstanceAspects();
@@ -115,7 +124,6 @@
 
    public void testPerInstanceReturnMethodAspects()
    {
-      System.out.println("===== testPerInstanceReturnMethodAspects()");
       System.out.println("Calling POJO 1");
       PerInstanceAspect.reset();
       POJOWithPerInstanceAspects pojo1 = new POJOWithPerInstanceAspects();
@@ -156,7 +164,6 @@
 
    public void testPerInstanceFieldAspects()
    {
-      System.out.println("===== testPerInstanceReturnMethodAspects()");
       System.out.println("Calling POJO 1");
       PerInstanceAspect.reset();
       POJOWithPerInstanceAspects pojo1 = new POJOWithPerInstanceAspects();
@@ -243,6 +250,26 @@
       assertSame(aspect1, aspect3);
    }
    
+   public void testPerjoinpointConstructorAspects()
+   {
+      //For a constructor
+      PerJoinpointAspect.reset();
+      POJOWithPerJoinpointAspects pojo = new POJOWithPerJoinpointAspects();
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);
+      PerJoinpointAspect pja = PerJoinpointAspect.before;
+      
+      PerJoinpointAspect.reset();
+      POJOWithPerJoinpointAspects pojo2 = new POJOWithPerJoinpointAspects();
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);
+      assertEquals(pja, PerJoinpointAspect.before); //Works like PER_CLASS_JOINPOINT when no instance
+   }
+   
    public void testPerJoinpointMethodAspects()
    {
       POJOWithPerJoinpointAspects pojo1 = new POJOWithPerJoinpointAspects();
@@ -306,6 +333,162 @@
       
    }
    
+   public void testPerJoinpointStaticMethodAspects()
+   {
+      PerJoinpointAspect.reset();
+      assertEquals(10, POJOWithPerJoinpointAspects.staticMethodA(10));
+      
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
+      PerJoinpointAspect aspectA = PerJoinpointAspect.before; 
+      
+
+      PerJoinpointAspect.reset();
+      POJOWithPerJoinpointAspects.staticMethodB();
+      
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
+      PerJoinpointAspect aspectB = PerJoinpointAspect.before;
+      assertNotSame(aspectB, aspectA);
+      
+      PerJoinpointAspect.reset();
+      assertEquals(10, POJOWithPerJoinpointAspects.staticMethodA(10));
+      
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);    
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
+      assertNotSame(aspectA, PerJoinpointAspect.before);
+   }
+
+   public void testPerJoinpointFieldAspects()
+   {
+      PerJoinpointAspect.reset();
+      POJOWithPerJoinpointAspects pojo1 = new POJOWithPerJoinpointAspects();
+      PerJoinpointAspect ctorAspect = PerJoinpointAspect.before;
+      assertNotNull(ctorAspect);
+      POJOWithPerJoinpointAspects pojo2 = new POJOWithPerJoinpointAspects();
+
+      PerJoinpointAspect.reset();
+      pojo1.fieldA = 10;
+      
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
+      PerJoinpointAspect aspect1Aw = PerJoinpointAspect.before;
+
+      PerJoinpointAspect.reset();
+      assertEquals(10, pojo1.fieldA );
+      
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
+      PerJoinpointAspect aspect1Ar = PerJoinpointAspect.before;
+      assertSame(aspect1Aw, aspect1Ar);
+      assertNotSame(ctorAspect, aspect1Ar);
+      
+      PerJoinpointAspect.reset();
+      pojo1.fieldB = 10;
+
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
+      assertNotSame(aspect1Aw, PerJoinpointAspect.after);
+      assertNotSame(ctorAspect, PerJoinpointAspect.after);
+      
+      PerJoinpointAspect.reset();
+      pojo2.fieldA = 100;
+      
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
+      PerJoinpointAspect aspect2Aw = PerJoinpointAspect.before;
+      assertNotSame(aspect2Aw, aspect1Ar);
+
+      PerJoinpointAspect.reset();
+      assertEquals(100, pojo2.fieldA );
+
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
+      PerJoinpointAspect aspect2Ar = PerJoinpointAspect.before;
+      assertSame(aspect2Ar, aspect2Aw);
+      
+      PerJoinpointAspect.reset();
+      pojo1.fieldA = 1000;
+      assertNotNull(PerJoinpointAspect.before);
+      assertSame(aspect1Aw, PerJoinpointAspect.before);
+   }
+   
+
+   public void testPerJoinpointStaticFieldAspects()
+   {
+      PerJoinpointAspect.reset();
+      POJOWithPerJoinpointAspects.staticFieldA = 10;
+      
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
+      PerJoinpointAspect aspect1Aw = PerJoinpointAspect.before;
+
+      PerJoinpointAspect.reset();
+      assertEquals(10, POJOWithPerJoinpointAspects.staticFieldA );
+      
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
+      PerJoinpointAspect aspect1Ar = PerJoinpointAspect.before;
+      assertSame(aspect1Aw, aspect1Ar);
+      
+      PerJoinpointAspect.reset();
+      POJOWithPerJoinpointAspects.staticFieldB = 10;
+
+      assertNotNull(PerJoinpointAspect.before);
+      assertNotNull(PerJoinpointAspect.after);
+      assertNull(PerJoinpointAspect.throwing);
+      assertNotNull(PerJoinpointAspect.finaly);
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
+      assertNotSame(aspect1Aw, PerJoinpointAspect.after);
+      
+      PerJoinpointAspect.reset();
+      POJOWithPerJoinpointAspects.staticFieldA = 1000;
+      assertNotNull(PerJoinpointAspect.before);
+      assertSame(aspect1Aw, PerJoinpointAspect.before);
+   }
+   
+
    public void testPerClassjoinpointConstructorAspects()
    {
       PerClassJoinpointAspect.reset();

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/POJOWithPerJoinpointAspects.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/POJOWithPerJoinpointAspects.java	2007-06-20 12:39:57 UTC (rev 63580)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/POJOWithPerJoinpointAspects.java	2007-06-20 13:06:31 UTC (rev 63581)
@@ -30,6 +30,8 @@
 {
    public int fieldA;
    public int fieldB;
+   public static int staticFieldA;
+   public static int staticFieldB;
    
    public int methodA(int i)
    {
@@ -38,4 +40,12 @@
    public void methodB()
    {
    }
+   
+   public static int staticMethodA(int i)
+   {
+      return i;
+   }
+   public static void staticMethodB()
+   {
+   }
 }




More information about the jboss-cvs-commits mailing list