[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