[jboss-cvs] JBossAS SVN: r70822 - projects/aop/trunk/aop/src/main/org/jboss/aop.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Mar 13 11:02:46 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-03-13 11:02:46 -0400 (Thu, 13 Mar 2008)
New Revision: 70822

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/ClassContainer.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/LoadInterceptedClassesStrategy.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/WeavingStrategySupport.java
Log:


Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/ClassContainer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/ClassContainer.java	2008-03-13 14:00:33 UTC (rev 70821)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/ClassContainer.java	2008-03-13 15:02:46 UTC (rev 70822)
@@ -28,7 +28,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 
 import org.jboss.aop.advice.AdviceBinding;
@@ -64,7 +63,7 @@
       rebuildInterceptors();
    }
 
-   public void setClass(Class clazz)
+   public void setClass(Class<?> clazz)
    {
       this.clazz = clazz;
    }
@@ -81,7 +80,7 @@
 
    protected Field[] advisedFields;
 
-   private void populateFieldTable(ArrayList<Field> fields, final Class superclass)
+   private void populateFieldTable(ArrayList<Field> fields, final Class<?> superclass)
    {
       if (superclass == null) return;
       if (superclass.equals(Object.class)) return;
@@ -189,7 +188,7 @@
 
       for (int i = 0; i < classMetaDataBindings.size(); i++)
       {
-         ClassMetaDataBinding data = (ClassMetaDataBinding) classMetaDataBindings.get(i);
+         ClassMetaDataBinding data = classMetaDataBindings.get(i);
          bindClassMetaData(data);
       }
    }
@@ -249,15 +248,13 @@
       initializeMethodChain();
       initializeConstructorChain();
 
-      LinkedHashMap bindings = manager.getBindings();
+      LinkedHashMap<String, AdviceBinding> bindings = manager.getBindings();
       synchronized (bindings)
       {
          if (bindings.size() > 0)
          {
-            Iterator it = bindings.values().iterator();
-            while (it.hasNext())
+            for (AdviceBinding binding : bindings.values())
             {
-               AdviceBinding binding = (AdviceBinding) it.next();
                if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("iterate binding " + binding.getName());
                resolveMethodPointcut(binding);
                resolveConstructorPointcut(binding);
@@ -276,15 +273,13 @@
       resetChain(this.methodInfos);
       resetChain(this.constructorInfos);
 
-      LinkedHashMap bindings = manager.getBindings();
+      LinkedHashMap<String, AdviceBinding> bindings = manager.getBindings();
       synchronized (bindings)
       {
          if (bindings.size() > 0)
          {
-            Iterator it = bindings.values().iterator();
-            while (it.hasNext())
+            for (AdviceBinding binding : bindings.values())
             {
-               AdviceBinding binding = (AdviceBinding) it.next();
                if (AspectManager.verbose && logger.isDebugEnabled()) logger.debug("iterate binding " + binding.getName());
                resolveMethodPointcut(binding);
                resolveConstructorPointcut(binding);

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java	2008-03-13 14:00:33 UTC (rev 70821)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java	2008-03-13 15:02:46 UTC (rev 70822)
@@ -79,12 +79,14 @@
    ArrayList<MethodInfo> overriddenMethods = new ArrayList<MethodInfo>(); 
 
    //TODO These are only needed for the class advisor really
-   //All joinpoint generators apart from field reads and constructions go in here
-   private volatile ConcurrentHashMap joinPointGenerators = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
+   //All joinpoint generators apart from field reads, constructions and MethodCalledByXXX go in here
+   private volatile ConcurrentHashMap<Joinpoint, JoinPointGenerator> joinPointGenerators = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
    //Needs its own map to avoid crashing with the field write generators
-   private volatile ConcurrentHashMap fieldReadJoinPoinGenerators = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
+   private volatile ConcurrentHashMap<Joinpoint, FieldJoinPointGenerator> fieldReadJoinPoinGenerators = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
    //Needs its own map to avoid crashing with the constructor generators
-   private volatile ConcurrentHashMap constructionJoinPointGenerators = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
+   private volatile ConcurrentHashMap<Joinpoint, ConstructorJoinPointGenerator> constructionJoinPointGenerators = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
+   //An extra level of indirection is needed for MethodCalledByCon and MethodCalledByMethod as compared to the main joinPointGenerators map
+   private volatile ConcurrentHashMap<Joinpoint, ConcurrentHashMap<Class<?>, JoinPointGenerator>> methodCalledByXXXJoinPointGenerators = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
    
    ConcurrentHashMap<Joinpoint, Interceptor[]> oldInfos = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
    ConcurrentHashMap<Joinpoint, Interceptor[]> oldFieldReadInfos = UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP;
@@ -120,19 +122,20 @@
       methodInfos = null;
       advisorStrategy = null;
       
-      Map subscribedSubDomains = getManager().getSubscribedSubDomains();
+      Map<Domain, Object> subscribedSubDomains = getManager().getSubscribedSubDomains();
       synchronized (subscribedSubDomains)
       {
-         for (Iterator it = subscribedSubDomains.keySet().iterator() ; it.hasNext() ; )
+         for (Iterator<Domain> it = subscribedSubDomains.keySet().iterator() ; it.hasNext() ; )
          {
-            GeneratedAdvisorDomain manager = (GeneratedAdvisorDomain)it.next();
-            Map advisors = manager.getAdvisors();
+            //TODO Not really sure what was attempted here
+            //GeneratedAdvisorDomain manager = (GeneratedAdvisorDomain)it.next();
+            //Map advisors = manager.getAdvisors();
             it.remove();
          }
       }
    }
 
-   protected void initialise(Class clazz, AspectManager manager)
+   protected void initialise(Class<?> clazz, AspectManager manager)
    {
       advisorStrategy.initialise(clazz, manager);
    }
@@ -260,9 +263,8 @@
    {
       if (overriddenMethods != null && overriddenMethods.size() > 0)
       {
-         for (Iterator it = overriddenMethods.iterator() ; it.hasNext() ; )
+         for(MethodInfo info : overriddenMethods)
          {
-            MethodInfo info = (MethodInfo)it.next();
             Method method = info.getMethod();
             PointcutMethodMatch match = binding.getPointcut().matchesExecution(this, method);
             
@@ -545,10 +547,12 @@
          synchronized(this.adviceBindings)
          {
             this.adviceBindings.addAll(classAdvisor.adviceBindings);
-            for (Iterator it = this.adviceBindings.iterator() ; it.hasNext() ; )
+            if (adviceBindings.size() > 0)
             {
-               AdviceBinding binding = (AdviceBinding)it.next();
-               binding.addAdvisor(this);
+               for (AdviceBinding binding : this.adviceBindings)
+               {
+                  binding.addAdvisor(this);
+               }
             }
          }
       }
@@ -619,10 +623,8 @@
       //Handle the overridden methods
       if (overriddenMethods != null && overriddenMethods.size() > 0)
       {
-         for (Iterator it = overriddenMethods.iterator() ; it.hasNext() ; )
+         for (MethodInfo info : overriddenMethods)
          {
-            MethodInfo info = (MethodInfo)it.next();
-
             MethodJoinPointGenerator generator = getJoinPointGenerator(info);
             finalizeChainAndRebindJoinPoint(oldInfos, info, generator, OldInfoMaps.INFOS);
          }
@@ -664,7 +666,7 @@
       //We are an instance advisor with no own data influencing the chains, copy these from the parent advisor
       for (int i = 0; i < newFieldInfos.length; i++)
       {
-         FieldInfo myInfo = (FieldInfo) newFieldInfos[i];
+         FieldInfo myInfo = newFieldInfos[i];
          myInfo.cloneChains(classFieldInfos[i]);
 
          if (updateOldInfo(oldFieldInfos, myInfo, oldInfoMapInstance))
@@ -680,7 +682,7 @@
       //We are either the class advisor or an instanceadvisor with own data so we need to do all the work
       for (int i = 0; i < newFieldInfos.length; i++)
       {
-         FieldInfo info = (FieldInfo)newFieldInfos[i];
+         FieldInfo info = newFieldInfos[i];
          FieldJoinPointGenerator generator = getJoinPointGenerator(info);
          finalizeChainAndRebindJoinPoint(oldFieldInfos, info, generator, oldInfoMapInstance);
       }
@@ -710,17 +712,6 @@
    @Override
    protected void finalizeMethodCalledByConInterceptorChain(MethodByConInfo info)
    {
-      //An extra level of indirection since we distinguish between callers of method depending on
-      //where the called method is defined (sub/super interfaces)
-      ConcurrentHashMap map = (ConcurrentHashMap)joinPointGenerators.get(info.getJoinpoint());
-      if (map == null)
-      {
-         map = new ConcurrentHashMap();
-         initJoinPointGeneratorsMap();
-         joinPointGenerators.put(info.getJoinpoint(), map);
-         map = (ConcurrentHashMap)joinPointGenerators.get(info.getJoinpoint());
-      }
-
       MethodByConJoinPointGenerator generator = getJoinPointGenerator(info);
       finalizeChainAndRebindJoinPoint(oldInfos, info, generator, OldInfoMaps.INFOS);
    }
@@ -815,7 +806,6 @@
       ArrayList<Interceptor> curr = info.getInterceptorChain();
       if (binding.getCFlow() != null)
       {
-         //TODO Handle CFlow
          InterceptorFactory[] factories = binding.getInterceptorFactories();
          for (int i = 0 ; i < factories.length ; i++)
          {
@@ -838,7 +828,7 @@
       GeneratedAdvisorInterceptor[] factories = null;
       if (list.size() > 0)
       {
-         factories = applyPrecedence((GeneratedAdvisorInterceptor[]) list.toArray(new GeneratedAdvisorInterceptor[list.size()]));
+         factories = applyPrecedence(list.toArray(new GeneratedAdvisorInterceptor[list.size()]));
       }
       info.setInterceptors(factories);
 
@@ -851,7 +841,7 @@
    @Override
    public String toString()
    {
-      Class clazz = this.getClass();
+      Class<?> clazz = this.getClass();
       StringBuffer sb = new StringBuffer("CLASS: " + clazz.getName());
 
       Field[] fields = clazz.getFields();
@@ -881,7 +871,7 @@
     * Generated ClassAdvisors and InstanceAdvisors will be different instances,
     * so keep track of what per_class_joinpoint aspects have been added where
     */
-   ConcurrentHashMap<AspectDefinition,Map<Joinpoint, Object>> perClassJoinpointAspectDefinitions =
+   ConcurrentHashMap<AspectDefinition, Map<Joinpoint, Object>> perClassJoinpointAspectDefinitions =
          new ConcurrentHashMap<AspectDefinition, Map<Joinpoint, Object>>();
 
 
@@ -968,13 +958,13 @@
    }
 
    @Override
-   public Set getPerInstanceAspectDefinitions()
+   public Set<AspectDefinition> getPerInstanceAspectDefinitions()
    {
       return advisorStrategy.getPerInstanceAspectDefinitions();
    }
 
    @Override
-   public Map getPerInstanceJoinpointAspectDefinitions()
+   public Map<AspectDefinition, Set<Joinpoint>> getPerInstanceJoinpointAspectDefinitions()
    {
       return advisorStrategy.getPerInstanceJoinpointAspectDefinitions();
    }
@@ -1104,7 +1094,7 @@
          {
             if (joinPointGenerators == UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP)
             {
-               joinPointGenerators = new ConcurrentHashMap();
+               joinPointGenerators = new ConcurrentHashMap<Joinpoint, JoinPointGenerator>();
             }
          }
       }
@@ -1118,7 +1108,7 @@
          {
             if (fieldReadJoinPoinGenerators == UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP)
             {
-               fieldReadJoinPoinGenerators = new ConcurrentHashMap();
+               fieldReadJoinPoinGenerators = new ConcurrentHashMap<Joinpoint, FieldJoinPointGenerator>();
             }
          }
       }
@@ -1132,12 +1122,26 @@
          {
             if (constructionJoinPointGenerators == UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP)
             {
-               constructionJoinPointGenerators = new ConcurrentHashMap();
+               constructionJoinPointGenerators = new ConcurrentHashMap<Joinpoint, ConstructorJoinPointGenerator>();
             }
          }
       }
    }
    
+   protected void initMethodCalledByConJoinPointGeneratorsMap()
+   {
+      if (methodCalledByXXXJoinPointGenerators == UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP)
+      {
+         synchronized(lazyCollectionLock)
+         {
+            if (methodCalledByXXXJoinPointGenerators == UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP)
+            {
+               methodCalledByXXXJoinPointGenerators = new ConcurrentHashMap<Joinpoint, ConcurrentHashMap<Class<?>, JoinPointGenerator>>();
+            }
+         }
+      }
+   }
+   
    protected ConcurrentHashMap<Joinpoint, Interceptor[]> initOldInfosMap()
    {
       if (oldInfos == UnmodifiableEmptyCollections.EMPTY_CONCURRENT_HASHMAP)
@@ -1188,7 +1192,7 @@
     */
    private interface AdvisorStrategy
    {
-      void initialise(Class clazz, AspectManager manager);
+      void initialise(Class<?> clazz, AspectManager manager);
       void checkVersion();
       void createInterceptorChains() throws Exception;
       MethodJoinPointGenerator getJoinPointGenerator(MethodInfo info);
@@ -1205,8 +1209,8 @@
       void createMethodTables() throws Exception;
       void createFieldTable() throws Exception;
       void createConstructorTables() throws Exception;
-      Set getPerInstanceAspectDefinitions();
-      Map getPerInstanceJoinpointAspectDefinitions();
+      Set<AspectDefinition> getPerInstanceAspectDefinitions();
+      Map<AspectDefinition, Set<Joinpoint>> getPerInstanceJoinpointAspectDefinitions();
       void rebuildInterceptors();
       void resolveConstructorPointcut(AdviceBinding binding);
       void resolveConstructionPointcut(AdviceBinding binding);
@@ -1220,7 +1224,7 @@
    {
       GeneratedClassAdvisor parent;
 
-      public void initialise(Class clazz, AspectManager manager)
+      public void initialise(Class<?> clazz, AspectManager manager)
       {
          methodInfos = new MethodInterceptors(GeneratedClassAdvisor.this);
          initialiseMethods();
@@ -1291,12 +1295,12 @@
       {
          if (info.isRead())
          {
-            FieldJoinPointGenerator generator = (FieldJoinPointGenerator)fieldReadJoinPoinGenerators.get(info.getJoinpoint());
+            FieldJoinPointGenerator generator = fieldReadJoinPoinGenerators.get(info.getJoinpoint());
             if (generator == null)
             {
                generator = new FieldJoinPointGenerator(GeneratedClassAdvisor.this, info);
                initFieldReadJoinPointGeneratorsMap();
-               FieldJoinPointGenerator existing = (FieldJoinPointGenerator)fieldReadJoinPoinGenerators.putIfAbsent(info.getJoinpoint(), generator);
+               FieldJoinPointGenerator existing = fieldReadJoinPoinGenerators.putIfAbsent(info.getJoinpoint(), generator);
                if (existing != null)
                {
                   generator = existing;
@@ -1324,12 +1328,12 @@
       public ConstructorJoinPointGenerator getJoinPointGenerator(ConstructorInfo info)
       {
          //We are the class advisor
-         ConstructorJoinPointGenerator generator = (ConstructorJoinPointGenerator)constructionJoinPointGenerators.get(info.getJoinpoint());
+         ConstructorJoinPointGenerator generator = constructionJoinPointGenerators.get(info.getJoinpoint());
          if (generator == null)
          {
             generator = new ConstructorJoinPointGenerator(GeneratedClassAdvisor.this, info);
             initConstructionJoinPointGeneratorsMap();
-            ConstructorJoinPointGenerator existing = (ConstructorJoinPointGenerator)constructionJoinPointGenerators.putIfAbsent(info.getJoinpoint(), generator);
+            ConstructorJoinPointGenerator existing = constructionJoinPointGenerators.putIfAbsent(info.getJoinpoint(), generator);
             if (existing != null)
             {
                generator = existing;
@@ -1358,12 +1362,12 @@
       {
          //An extra level of indirection since we distinguish between callers of method depending on
          //where the called method is defined (sub/super interfaces)
-         ConcurrentHashMap map = (ConcurrentHashMap)joinPointGenerators.get(info.getJoinpoint());
+         ConcurrentHashMap<Class<?>, JoinPointGenerator> map = methodCalledByXXXJoinPointGenerators.get(info.getJoinpoint());
          if (map == null)
          {
-            map = new ConcurrentHashMap();
-            initJoinPointGeneratorsMap();
-            ConcurrentHashMap existing = (ConcurrentHashMap)joinPointGenerators.putIfAbsent(info.getJoinpoint(), map);
+            map = new ConcurrentHashMap<Class<?>, JoinPointGenerator>();
+            initMethodCalledByConJoinPointGeneratorsMap();
+            ConcurrentHashMap<Class<?>, JoinPointGenerator> existing = methodCalledByXXXJoinPointGenerators.putIfAbsent(info.getJoinpoint(), map);
             if (existing != null)
             {
                map = existing;
@@ -1420,12 +1424,12 @@
       {
          //An extra level of indirection since we distinguish between callers of method depending on
          //where the called method is defined (sub/super interfaces)
-         ConcurrentHashMap map = (ConcurrentHashMap)joinPointGenerators.get(info.getJoinpoint());
+         ConcurrentHashMap<Class<?>, JoinPointGenerator> map = methodCalledByXXXJoinPointGenerators.get(info.getJoinpoint());
          if (map == null)
          {
-            map = new ConcurrentHashMap();
-            initJoinPointGeneratorsMap();
-            ConcurrentHashMap exisiting = (ConcurrentHashMap)joinPointGenerators.putIfAbsent(info.getJoinpoint(), map);
+            map = new ConcurrentHashMap<Class<?>, JoinPointGenerator>();
+            initMethodCalledByConJoinPointGeneratorsMap();
+            ConcurrentHashMap<Class<?>, JoinPointGenerator> exisiting = methodCalledByXXXJoinPointGenerators.putIfAbsent(info.getJoinpoint(), map);
             if (exisiting != null)
             {
                map = exisiting;
@@ -1452,7 +1456,7 @@
 
       public Object getPerClassJoinpointAspect(AspectDefinition def, Joinpoint joinpoint)
       {
-         Map joinpoints = (Map) perClassJoinpointAspectDefinitions.get(def);
+         Map<Joinpoint, Object> joinpoints = perClassJoinpointAspectDefinitions.get(def);
          if (joinpoints != null)
          {
             return joinpoints.get(joinpoint);
@@ -1480,12 +1484,12 @@
          GeneratedClassAdvisor.super.createConstructorTables();
       }
       
-      public Set getPerInstanceAspectDefinitions()
+      public Set<AspectDefinition> getPerInstanceAspectDefinitions()
       {
          return GeneratedClassAdvisor.super.getPerInstanceAspectDefinitions();
       }
 
-      public Map getPerInstanceJoinpointAspectDefinitions()
+      public Map<AspectDefinition, Set<Joinpoint>> getPerInstanceJoinpointAspectDefinitions()
       {
          return GeneratedClassAdvisor.super.getPerInstanceJoinpointAspectDefinitions();
       }
@@ -1512,7 +1516,7 @@
          {
             ConstructorInfo info = newConstructorInfos[i];
             ConstructorJoinPointGenerator generator = getJoinPointGenerator(info);
-            Class clazz = info.getClazz();
+            Class<?> clazz = info.getClazz();
             if (clazz != null)
             finalizeChainAndRebindJoinPoint(oldInfos, info, generator, OldInfoMaps.INFOS);
          }
@@ -1552,7 +1556,7 @@
          GeneratedClassAdvisor.this.version = parent.version;         
       }
       
-      public void initialise(Class clazz, AspectManager manager)
+      public void initialise(Class<?> clazz, AspectManager manager)
       {
          initialiseInfosForInstance();
          
@@ -1684,12 +1688,12 @@
          conCalledByConInterceptors = new HashMap[constructors.length];
       }
 
-      public Set getPerInstanceAspectDefinitions()
+      public Set<AspectDefinition> getPerInstanceAspectDefinitions()
       {
          return parent.getPerInstanceAspectDefinitions();
       }
 
-      public Map getPerInstanceJoinpointAspectDefinitions()
+      public Map<AspectDefinition, Set<Joinpoint>> getPerInstanceJoinpointAspectDefinitions()
       {
          return parent.getPerInstanceJoinpointAspectDefinitions();
       }

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/LoadInterceptedClassesStrategy.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/LoadInterceptedClassesStrategy.java	2008-03-13 14:00:33 UTC (rev 70821)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/LoadInterceptedClassesStrategy.java	2008-03-13 15:02:46 UTC (rev 70822)
@@ -60,7 +60,7 @@
     * in this strategy, no observer is required.
     * @see org.jboss.aop.DynamicAOPStrategy#getInterceptorChainObserver(Class)
     */
-   public InterceptorChainObserver getInterceptorChainObserver(Class clazz)
+   public InterceptorChainObserver getInterceptorChainObserver(Class<?> clazz)
    {
       return null;
    }

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/WeavingStrategySupport.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/WeavingStrategySupport.java	2008-03-13 14:00:33 UTC (rev 70821)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/WeavingStrategySupport.java	2008-03-13 15:02:46 UTC (rev 70822)
@@ -29,9 +29,9 @@
 public abstract class WeavingStrategySupport implements WeavingStrategy
 {
    
-   private static ThreadLocal REENTRY = new ThreadLocal()
+   private static ThreadLocal<Boolean> REENTRY = new ThreadLocal<Boolean>()
    {
-      protected Object initialValue()
+      protected Boolean initialValue()
       {
          return Boolean.FALSE;
       }
@@ -44,7 +44,7 @@
     */
    protected static boolean isReEntry()
    {
-      return ((Boolean) REENTRY.get()).booleanValue();
+      return REENTRY.get().booleanValue();
    }
 
    /**




More information about the jboss-cvs-commits mailing list