]> source.dussan.org Git - aspectj.git/commitdiff
205907 - world remembers registered handlers
authoraclement <aclement>
Fri, 14 Mar 2008 18:53:37 +0000 (18:53 +0000)
committeraclement <aclement>
Fri, 14 Mar 2008 18:53:37 +0000 (18:53 +0000)
weaver/src/org/aspectj/weaver/World.java

index bb0cd0b482e7f08b289f39998745dc3605b22c0b..99b7c89e5939d33e2c2236563a420ed905fd7963 100644 (file)
@@ -20,10 +20,12 @@ import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 import java.util.WeakHashMap;
 
 import org.aspectj.asm.IHierarchy;
@@ -39,6 +41,7 @@ import org.aspectj.weaver.patterns.DeclarePrecedence;
 import org.aspectj.weaver.patterns.PerClause;
 import org.aspectj.weaver.patterns.Pointcut;
 import org.aspectj.weaver.reflect.ReflectionBasedReferenceTypeDelegate;
+import org.aspectj.weaver.tools.PointcutDesignatorHandler;
 import org.aspectj.weaver.tools.Trace;
 import org.aspectj.weaver.tools.TraceFactory;
 
@@ -58,6 +61,9 @@ public abstract class World implements Dump.INode {
        /** The heart of the world, a map from type signatures to resolved types */
     protected TypeMap typeMap = new TypeMap(this); // Signature to ResolvedType
 
+    /** New pointcut designators this world supports */
+    private Set pointcutDesignators;
+
     // see pr145963
     /** Should we create the hierarchy for binary classes and aspects*/
     public static boolean createInjarHierarchy = true;
@@ -1277,4 +1283,20 @@ public abstract class World implements Dump.INode {
                        return typeMap.getAllTypes();
                }
 
+        /**
+         * Register a new pointcut designator handler with the world - this can be used by any pointcut parsers attached
+         * to the world.
+         * 
+         * @param designatorHandler handler for the new pointcut
+         */
+        public void registerPointcutHandler(PointcutDesignatorHandler designatorHandler) {
+            if (pointcutDesignators == null) pointcutDesignators = new HashSet();
+            pointcutDesignators.add(designatorHandler);
+        }
+        
+        public Set getRegisteredPointcutHandlers() {
+            if (pointcutDesignators == null) return Collections.EMPTY_SET;
+            return pointcutDesignators;
+        }
+        
 }
\ No newline at end of file