[jboss-cvs] JBossAS SVN: r78965 - in projects/aop/trunk/aop/src: main/org/jboss/aop/util and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Sep 30 13:40:08 EDT 2008
Author: kabir.khan at jboss.com
Date: 2008-09-30 13:40:08 -0400 (Tue, 30 Sep 2008)
New Revision: 78965
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/advice/ClassifiedBindingAndPointcutCollection.java
projects/aop/trunk/aop/src/main/org/jboss/aop/util/BindingClassifier.java
projects/aop/trunk/aop/src/test/org/jboss/test/aop/pointcut/PointcutTestCase.java
Log:
[JBAOP-603] Fix bug. Pointcuts and PointcutInfos were not classified on addition, and not removed from the classified collections on removal
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/ClassifiedBindingAndPointcutCollection.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/ClassifiedBindingAndPointcutCollection.java 2008-09-30 15:53:15 UTC (rev 78964)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/ClassifiedBindingAndPointcutCollection.java 2008-09-30 17:40:08 UTC (rev 78965)
@@ -531,8 +531,29 @@
*/
public void removePointcut(String name)
{
- pointcuts.remove(name);
- pointcutInfos.remove(name);
+ Pointcut pc = pointcuts.remove(name);
+ if (pc != null)
+ {
+ this.fieldReadPointcuts.remove(pc);
+ this.fieldWritePointcuts.remove(pc);
+ this.constructionPointcuts.remove(pc);
+ this.constructorExecutionPointcuts.remove(pc);
+ this.methodExecutionPointcuts.remove(pc);
+ this.constructorCallPointcuts.remove(pc);
+ this.methodCallPointcuts.remove(pc);
+ }
+
+ PointcutInfo info = pointcutInfos.remove(name);
+ if (info != null)
+ {
+ this.fieldReadPointcutInfos.remove(info);
+ this.fieldWritePointcutInfos.remove(info);
+ this.constructionPointcutInfos.remove(info);
+ this.constructorExecutionPointcutInfos.remove(info);
+ this.methodExecutionPointcutInfos.remove(info);
+ this.constructorCallPointcutInfos.remove(info);
+ this.methodCallPointcutInfos.remove(info);
+ }
}
/**
@@ -723,107 +744,128 @@
private void addFieldReadPointcut(Pointcut pointcut, PointcutInfo info)
{
- if (fieldReadPointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ if (BindingClassifier.isGet(pointcut))
{
- fieldReadPointcuts = new CopyOnWriteArrayList<Pointcut>();
+ if (fieldReadPointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ fieldReadPointcuts = new CopyOnWriteArrayList<Pointcut>();
+ }
+ fieldReadPointcuts.add(pointcut);
+
+ if (fieldReadPointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ fieldReadPointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
+ }
+ fieldReadPointcutInfos.add(info);
}
- fieldReadPointcuts.add(pointcut);
-
- if (fieldReadPointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
- {
- fieldReadPointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
- }
- fieldReadPointcutInfos.add(info);
}
private void addFieldWritePointcut(Pointcut pointcut, PointcutInfo info)
{
- if (fieldWritePointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ if (BindingClassifier.isSet(pointcut))
{
- fieldWritePointcuts = new CopyOnWriteArrayList<Pointcut>();
+ if (fieldWritePointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ fieldWritePointcuts = new CopyOnWriteArrayList<Pointcut>();
+ }
+ fieldWritePointcuts.add(pointcut);
+
+ if (fieldWritePointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ fieldWritePointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
+ }
+ fieldWritePointcutInfos.add(info);
}
- fieldWritePointcuts.add(pointcut);
-
- if (fieldWritePointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
- {
- fieldWritePointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
- }
- fieldWritePointcutInfos.add(info);
}
private void addConstructionPointcut(Pointcut pointcut, PointcutInfo info)
{
- if (constructionPointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ if (BindingClassifier.isConstruction(pointcut))
{
- constructionPointcuts = new CopyOnWriteArrayList<Pointcut>();
+ if (constructionPointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ constructionPointcuts = new CopyOnWriteArrayList<Pointcut>();
+ }
+ constructionPointcuts.add(pointcut);
+
+ if (constructionPointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ constructionPointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
+ }
+ constructionPointcutInfos.add(info);
}
- constructionPointcuts.add(pointcut);
-
- if (constructionPointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
- {
- constructionPointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
- }
- constructionPointcutInfos.add(info);
}
private void addConstructorExecutionPointcut(Pointcut pointcut, PointcutInfo info)
{
- if (constructorExecutionPointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ if (BindingClassifier.isConstructorExecution(pointcut))
{
- constructorExecutionPointcuts = new CopyOnWriteArrayList<Pointcut>();
+ if (constructorExecutionPointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ constructorExecutionPointcuts = new CopyOnWriteArrayList<Pointcut>();
+ }
+ constructorExecutionPointcuts.add(pointcut);
+
+ if (constructorExecutionPointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ constructorExecutionPointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
+ }
+ constructorExecutionPointcutInfos.add(info);
}
- constructorExecutionPointcuts.add(pointcut);
-
- if (constructorExecutionPointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
- {
- constructorExecutionPointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
- }
- constructorExecutionPointcutInfos.add(info);
}
private void addMethodExecutionPointcut(Pointcut pointcut, PointcutInfo info)
{
- if (methodExecutionPointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ if (BindingClassifier.isMethodExecution(pointcut))
{
- methodExecutionPointcuts = new CopyOnWriteArrayList<Pointcut>();
+ if (methodExecutionPointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ methodExecutionPointcuts = new CopyOnWriteArrayList<Pointcut>();
+ }
+ methodExecutionPointcuts.add(pointcut);
+
+ if (methodExecutionPointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ methodExecutionPointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
+ }
+ methodExecutionPointcutInfos.add(info);
}
- methodExecutionPointcuts.add(pointcut);
-
- if (methodExecutionPointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
- {
- methodExecutionPointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
- }
- methodExecutionPointcutInfos.add(info);
}
private void addConstructorCallPointcut(Pointcut pointcut, PointcutInfo info)
{
- if (constructorCallPointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ if (BindingClassifier.isConstructorCall(pointcut))
{
- constructorCallPointcuts = new CopyOnWriteArrayList<Pointcut>();
+ if (constructorCallPointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ constructorCallPointcuts = new CopyOnWriteArrayList<Pointcut>();
+ }
+ constructorCallPointcuts.add(pointcut);
+
+ if (constructorCallPointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ constructorCallPointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
+ }
+ constructorCallPointcutInfos.add(info);
}
- constructorCallPointcuts.add(pointcut);
-
- if (constructorCallPointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
- {
- constructorCallPointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
- }
- constructorCallPointcutInfos.add(info);
}
private void addMethodCallPointcut(Pointcut pointcut, PointcutInfo info)
{
- if (methodCallPointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ if (BindingClassifier.isMethodCall(pointcut))
{
- methodCallPointcuts = new CopyOnWriteArrayList<Pointcut>();
+ if (methodCallPointcuts == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ methodCallPointcuts = new CopyOnWriteArrayList<Pointcut>();
+ }
+ methodCallPointcuts.add(pointcut);
+
+ if (methodCallPointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
+ {
+ methodCallPointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
+ }
+ methodCallPointcutInfos.add(info);
}
- methodCallPointcuts.add(pointcut);
-
- if (methodCallPointcutInfos == UnmodifiableEmptyCollections.EMPTY_ARRAYLIST)
- {
- methodCallPointcutInfos = new CopyOnWriteArrayList<PointcutInfo>();
- }
- methodCallPointcutInfos.add(info);
}
private void updatePointcutStats(Pointcut pointcut, AspectManager manager)
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/util/BindingClassifier.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/util/BindingClassifier.java 2008-09-30 15:53:15 UTC (rev 78964)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/util/BindingClassifier.java 2008-09-30 17:40:08 UTC (rev 78965)
@@ -35,17 +35,27 @@
{
public static boolean isExecution(AdviceBinding binding)
{
- PointcutStats stats = getPointcutStats(binding);
+ return isExecution(binding.getPointcut());
+ }
+
+ public static boolean isExecution(Pointcut pc)
+ {
+ PointcutStats stats = getPointcutStats(pc);
if (stats != null)
{
return stats.isExecution();
}
return true;
}
-
+
public static boolean isMethodExecution(AdviceBinding binding)
{
- PointcutStats stats = getPointcutStats(binding);
+ return isMethodExecution(binding.getPointcut());
+ }
+
+ public static boolean isMethodExecution(Pointcut pc)
+ {
+ PointcutStats stats = getPointcutStats(pc);
if (stats != null)
{
return stats.isMethodExecution();
@@ -55,7 +65,12 @@
public static boolean isConstructorExecution(AdviceBinding binding)
{
- PointcutStats stats = getPointcutStats(binding);
+ return isConstructorExecution(binding.getPointcut());
+ }
+
+ public static boolean isConstructorExecution(Pointcut pc)
+ {
+ PointcutStats stats = getPointcutStats(pc);
if (stats != null)
{
return stats.isConstructorExecution();
@@ -65,7 +80,12 @@
public static boolean isConstruction(AdviceBinding binding)
{
- PointcutStats stats = getPointcutStats(binding);
+ return isConstruction(binding.getPointcut());
+ }
+
+ public static boolean isConstruction(Pointcut pc)
+ {
+ PointcutStats stats = getPointcutStats(pc);
if (stats != null)
{
return stats.isConstruction();
@@ -75,7 +95,12 @@
public static boolean isCall(AdviceBinding binding)
{
- PointcutStats stats = getPointcutStats(binding);
+ return isCall(binding.getPointcut());
+ }
+
+ public static boolean isCall(Pointcut pc)
+ {
+ PointcutStats stats = getPointcutStats(pc);
if (stats != null)
{
return stats.isCall();
@@ -85,7 +110,12 @@
public static boolean isMethodCall(AdviceBinding binding)
{
- PointcutStats stats = getPointcutStats(binding);
+ return isMethodCall(binding.getPointcut());
+ }
+
+ public static boolean isMethodCall(Pointcut pc)
+ {
+ PointcutStats stats = getPointcutStats(pc);
if (stats != null)
{
return stats.isMethodCall();
@@ -95,7 +125,12 @@
public static boolean isConstructorCall(AdviceBinding binding)
{
- PointcutStats stats = getPointcutStats(binding);
+ return isConstructorCall(binding.getPointcut());
+ }
+
+ public static boolean isConstructorCall(Pointcut pc)
+ {
+ PointcutStats stats = getPointcutStats(pc);
if (stats != null)
{
return stats.isConstructorCall();
@@ -105,7 +140,12 @@
public static boolean isWithin(AdviceBinding binding)
{
- PointcutStats stats = getPointcutStats(binding);
+ return isWithin(binding.getPointcut());
+ }
+
+ public static boolean isWithin(Pointcut pc)
+ {
+ PointcutStats stats = getPointcutStats(pc);
if (stats != null)
{
return stats.isWithin();
@@ -115,7 +155,12 @@
public static boolean isGet(AdviceBinding binding)
{
- PointcutStats stats = getPointcutStats(binding);
+ return isGet(binding.getPointcut());
+ }
+
+ public static boolean isGet(Pointcut pc)
+ {
+ PointcutStats stats = getPointcutStats(pc);
if (stats != null)
{
return stats.isGet();
@@ -125,7 +170,12 @@
public static boolean isSet(AdviceBinding binding)
{
- PointcutStats stats = getPointcutStats(binding);
+ return isSet(binding.getPointcut());
+ }
+
+ public static boolean isSet(Pointcut pc)
+ {
+ PointcutStats stats = getPointcutStats(pc);
if (stats != null)
{
return stats.isSet();
@@ -135,7 +185,12 @@
public static boolean isWithincode(AdviceBinding binding)
{
- PointcutStats stats = getPointcutStats(binding);
+ return isWithincode(binding.getPointcut());
+ }
+
+ public static boolean isWithincode(Pointcut pc)
+ {
+ PointcutStats stats = getPointcutStats(pc);
if (stats != null)
{
return stats.isWithincode();
@@ -143,9 +198,8 @@
return true;
}
- private static PointcutStats getPointcutStats(AdviceBinding binding)
+ private static PointcutStats getPointcutStats(Pointcut pointcut)
{
- Pointcut pointcut = binding.getPointcut();
if (pointcut instanceof PointcutExpression)
{
PointcutExpression expr = (PointcutExpression)pointcut;
Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/pointcut/PointcutTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/pointcut/PointcutTestCase.java 2008-09-30 15:53:15 UTC (rev 78964)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/pointcut/PointcutTestCase.java 2008-09-30 17:40:08 UTC (rev 78965)
@@ -27,11 +27,13 @@
import java.util.Iterator;
import org.jboss.aop.AspectManager;
+import org.jboss.aop.advice.AdviceBinding;
import org.jboss.aop.pointcut.PointcutExpression;
import org.jboss.aop.pointcut.PointcutStats;
import org.jboss.aop.pointcut.ast.ASTStart;
import org.jboss.aop.pointcut.ast.PointcutExpressionParser;
import org.jboss.aop.pointcut.ast.PointcutExpressionParserVisitor;
+import org.jboss.aop.util.BindingClassifier;
import org.jboss.test.aop.AOPTestWithSetup;
import junit.framework.Test;
@@ -428,14 +430,41 @@
PointcutExpression pointcut = new PointcutExpression("TEST", expression);
manager.addPointcut(pointcut);
PointcutStats stats = pointcut.getStats();
+ AdviceBinding binding = new AdviceBinding(expression, null);
+ manager.addBinding(binding);
+
assertEquals(methodExecution, stats.isMethodExecution());
+ assertEquals(methodExecution, BindingClassifier.isMethodExecution(binding));
+ assertEquals(methodExecution, BindingClassifier.isMethodExecution(pointcut));
+
+
assertEquals(constructorExecution, stats.isConstructorExecution());
+ assertEquals(constructorExecution, BindingClassifier.isConstructorExecution(binding));
+ assertEquals(constructorExecution, BindingClassifier.isConstructorExecution(pointcut));
+
assertEquals(get, stats.isGet());
+ assertEquals(get, BindingClassifier.isGet(binding));
+ assertEquals(get, BindingClassifier.isGet(pointcut));
+
assertEquals(set, stats.isSet());
+ assertEquals(set, BindingClassifier.isSet(binding));
+ assertEquals(set, BindingClassifier.isSet(pointcut));
+
assertEquals(construction, stats.isConstruction());
+ assertEquals(construction, BindingClassifier.isConstruction(binding));
+ assertEquals(construction, BindingClassifier.isConstruction(pointcut));
+
assertEquals(methodCall, stats.isMethodCall());
+ assertEquals(methodCall, BindingClassifier.isMethodCall(binding));
+ assertEquals(methodCall, BindingClassifier.isMethodCall(pointcut));
+
assertEquals(constructorCall, stats.isConstructorCall());
+ assertEquals(constructorCall, BindingClassifier.isConstructorCall(binding));
+ assertEquals(constructorCall, BindingClassifier.isConstructorCall(pointcut));
+
assertEquals(withincode, stats.isWithincode());
+ assertEquals(withincode, BindingClassifier.isWithincode(binding));
+ assertEquals(withincode, BindingClassifier.isWithincode(pointcut));
if (methodExecution || constructorExecution)
{
More information about the jboss-cvs-commits
mailing list