[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