[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