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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jun 20 11:04:19 EDT 2007


Author: kabir.khan at jboss.com
Date: 2007-06-20 11:04:19 -0400 (Wed, 20 Jun 2007)
New Revision: 63584

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AspectDefinition.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/GeneratedAdvisorInterceptor.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/BeforeAfterThrowingScopedTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/POJOWithPerInstanceAspects.java
Log:
[JBAOP-426] PER_JOINPOINT scoped lightweight advice methods did not come from the same aspect instance

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AspectDefinition.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AspectDefinition.java	2007-06-20 14:17:23 UTC (rev 63583)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AspectDefinition.java	2007-06-20 15:04:19 UTC (rev 63584)
@@ -86,6 +86,11 @@
                   else if (scope == Scope.PER_CLASS)
                   {
                      advisor.removePerClassAspect(this);
+                     if (advisor instanceof GeneratedClassAdvisor)
+                     {
+                        //If it was a PER_JOINPOINT aspect for a static member, it might be listed under PER_CLASS_JOINPOINT as well
+                        ((GeneratedClassAdvisor)advisor).removePerClassJoinpointAspect(this);
+                     }
                   }
                   else if (scope == Scope.PER_CLASS_JOINPOINT)
                   {

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/GeneratedAdvisorInterceptor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/GeneratedAdvisorInterceptor.java	2007-06-20 14:17:23 UTC (rev 63583)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/GeneratedAdvisorInterceptor.java	2007-06-20 15:04:19 UTC (rev 63584)
@@ -259,7 +259,14 @@
 
             if (instance == null)
             {
-               instance = def.getFactory().createPerJoinpoint(advisor, ia, joinpoint);
+               instance = ((GeneratedClassAdvisor)advisor).getPerClassJoinpointAspect(def, joinpoint);
+               if (instance != null)
+               {
+                  return instance;
+               }
+               
+               ((GeneratedClassAdvisor)advisor).addPerClassJoinpointAspect(def, joinpoint);
+               instance = ((GeneratedClassAdvisor)advisor).getPerClassJoinpointAspect(def, joinpoint);
             }
          }
          return instance;

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 14:17:23 UTC (rev 63583)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/BeforeAfterThrowingScopedTestCase.java	2007-06-20 15:04:19 UTC (rev 63584)
@@ -219,6 +219,28 @@
       assertSame(aspect1w, PerInstanceAspect.before);
    }
    
+   public void testPerInstanceStaticMethodsAndFieldAspects()
+   {
+      PerInstanceAspect.reset();
+      POJOWithPerInstanceAspects.staticField = 10;
+      assertNull(PerInstanceAspect.before);
+      assertNull(PerInstanceAspect.after);
+      assertNull(PerInstanceAspect.throwing);
+      assertNull(PerInstanceAspect.finaly);
+
+      assertEquals(10, POJOWithPerInstanceAspects.staticField);
+      assertNull(PerInstanceAspect.before);
+      assertNull(PerInstanceAspect.after);
+      assertNull(PerInstanceAspect.throwing);
+      assertNull(PerInstanceAspect.finaly);
+      
+      assertEquals(101, POJOWithPerInstanceAspects.staticMethod(101));
+      assertNull(PerInstanceAspect.before);
+      assertNull(PerInstanceAspect.after);
+      assertNull(PerInstanceAspect.throwing);
+      assertNull(PerInstanceAspect.finaly);
+   }
+   
    public void testAllPerInstanceAspectsSame() 
    {
       POJOWithPerInstanceAspects pojo = new POJOWithPerInstanceAspects();
@@ -259,6 +281,8 @@
       assertNotNull(PerJoinpointAspect.after);
       assertNull(PerJoinpointAspect.throwing);
       assertNotNull(PerJoinpointAspect.finaly);
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
       PerJoinpointAspect pja = PerJoinpointAspect.before;
       
       PerJoinpointAspect.reset();
@@ -267,6 +291,8 @@
       assertNotNull(PerJoinpointAspect.after);
       assertNull(PerJoinpointAspect.throwing);
       assertNotNull(PerJoinpointAspect.finaly);
+      assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
+      assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
       assertEquals(pja, PerJoinpointAspect.before); //Works like PER_CLASS_JOINPOINT when no instance
    }
    
@@ -368,7 +394,7 @@
       assertNotNull(PerJoinpointAspect.finaly);    
       assertSame(PerJoinpointAspect.before, PerJoinpointAspect.after);
       assertSame(PerJoinpointAspect.finaly, PerJoinpointAspect.after);
-      assertNotSame(aspectA, PerJoinpointAspect.before);
+      assertSame(aspectA, PerJoinpointAspect.before);
    }
 
    public void testPerJoinpointFieldAspects()
@@ -923,6 +949,5 @@
    }
    
    
-   //PER_INSTANCE with contructors, static fields and methods should be ignored
-   //PER_JOINPOINT should be ignored for ctors, and act like PER_CLASS_JOINPOINT for static fields and methods  
+   //PER_JOINPOINT should act like PER_CLASS_JOINPOINT for static fields and methods  
 }

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/POJOWithPerInstanceAspects.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/POJOWithPerInstanceAspects.java	2007-06-20 14:17:23 UTC (rev 63583)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterthrowingscoped/POJOWithPerInstanceAspects.java	2007-06-20 15:04:19 UTC (rev 63584)
@@ -29,6 +29,7 @@
 public class POJOWithPerInstanceAspects
 {
    public int field;
+   public static int staticField;
    
    public void methodWithPerInstanceAspects(boolean error) throws ThrownByTestException
    {
@@ -42,4 +43,9 @@
    {
       return 10;
    }
+   
+   public static int staticMethod(int i)
+   {
+      return i;
+   }
 }




More information about the jboss-cvs-commits mailing list