[jboss-cvs] JBossAS SVN: r76232 - in projects/aop/branches/joinpoint_graph/aop/src: main/org/jboss/aop/instrument and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jul 25 10:35:24 EDT 2008


Author: flavia.rainone at jboss.com
Date: 2008-07-25 10:35:24 -0400 (Fri, 25 Jul 2008)
New Revision: 76232

Modified:
   projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/HotSwapStrategy.java
   projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/JoinPointManager.java
   projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/FieldAccessTransformer.java
   projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/Instrumentor.java
   projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/JoinpointStatusUpdate.java
   projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/MethodExecutionTransformer.java
   projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/util/CtConstructorComparator.java
   projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/util/CtFieldComparator.java
   projects/aop/branches/joinpoint_graph/aop/src/test/org/jboss/test/aop/jdk15/dynamic/prepareAll/HotSwapEnabledTester.java
Log:
[JBAOP-617]All tests pass, except for the gc on prepareAll.

Modified: projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/HotSwapStrategy.java
===================================================================
--- projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/HotSwapStrategy.java	2008-07-25 13:03:44 UTC (rev 76231)
+++ projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/HotSwapStrategy.java	2008-07-25 14:35:24 UTC (rev 76232)
@@ -29,6 +29,8 @@
 import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.WeakHashMap;
 
 import javassist.ClassPool;
@@ -246,7 +248,7 @@
       private Interceptor[][] fieldReadInterceptors;
       private Interceptor[][] fieldWriteInterceptors;
       private Interceptor[][] constructorInterceptors;
-      private MethodInterceptors methodInterceptors;
+      private Map<MethodInfo, Interceptor[]> methodInterceptors;
       private int[] constructorIndexMap;
       
       /**
@@ -311,7 +313,14 @@
          this.fieldReadInterceptors = fieldReadInterceptors;
          this.fieldWriteInterceptors = fieldWriteInterceptors;
          this.constructorInterceptors = constructorInterceptors;
-         this.methodInterceptors = methodInterceptors;
+         this.methodInterceptors = new HashMap<MethodInfo, Interceptor[]>();
+         long[] methodKeys = methodInterceptors.keys();
+         for (int i = 0; i < methodKeys.length; i++)
+         {
+            long key = methodKeys[i];
+            MethodInfo methodInfo = methodInterceptors.getMethodInfo(key);
+            this.methodInterceptors.put(methodInfo, methodInfo.getInterceptors());
+         }
          this.fields = fieldReadInterceptors.length;
          this.constructors = constructorInterceptors.length;
          this.methods = methodInterceptors.size();
@@ -328,17 +337,18 @@
       {
          if (instanceInterceptors == 0)
          {
-            long[] methodKeys = methodInterceptors.keys();
+            long[] methodKeys = newMethodInterceptors.keys();
             for (int i = 0; i < methodKeys.length; i++)
             {
                long key = methodKeys[i];
-               MethodInfo oldMethodInfo = methodInterceptors.getMethodInfo(key);
                MethodInfo newMethodInfo = newMethodInterceptors.getMethodInfo(key);
-               if (oldMethodInfo.getInterceptorChain().isEmpty() && !newMethodInfo.getInterceptorChain().isEmpty())
+               Interceptor[] oldInterceptorChain = this.methodInterceptors.get(newMethodInfo);
+               if ((oldInterceptorChain == null || oldInterceptorChain.length == 0)
+                     && !newMethodInfo.getInterceptorChain().isEmpty())
                {
                   newlyAdvised.methodExecutions.add(newMethodInfo);  
                }
-               else if (!oldMethodInfo.getInterceptorChain().isEmpty() && newMethodInfo.getInterceptorChain().isEmpty())
+               else if ((oldInterceptorChain != null && oldInterceptorChain.length > 0) && newMethodInfo.getInterceptorChain().isEmpty())
                {
                   newlyUnadvised.methodExecutions.add(newMethodInfo);
                }
@@ -351,7 +361,13 @@
          this.fieldReadInterceptors = newFieldReadInterceptors;
          this.fieldWriteInterceptors = newFieldWriteInterceptors;
          this.constructorInterceptors = newConstructorInterceptors;
-         this.methodInterceptors = newMethodInterceptors;
+         long[] methodKeys = newMethodInterceptors.keys();
+         for (int i = 0; i < methodKeys.length; i++)
+         {
+            long key = methodKeys[i];
+            MethodInfo methodInfo = newMethodInterceptors.getMethodInfo(key);
+            this.methodInterceptors.put(methodInfo, methodInfo.getInterceptors());
+         }
       }
       
       /**
@@ -515,14 +531,11 @@
       {
          if (this.instanceInterceptors == 0)
          {
-            long[] methodKeys = this.methodInterceptors.keys();
-            for (int i = 0; i < methodKeys.length; i++)
+            for (Map.Entry<MethodInfo, Interceptor[]> entry: methodInterceptors.entrySet())
             {
-               long key = methodKeys[i];
-               MethodInfo methodInfo = this.methodInterceptors.getMethodInfo(key);
-               if (methodInfo.getInterceptorChain().isEmpty())
+               if (entry.getValue() == null || entry.getValue().length == 0)
                {
-                  joinpoints.methodExecutions.add(methodInfo);  
+                  joinpoints.methodExecutions.add(entry.getKey());
                }
             }
             findUnadvisedJoinpoints(this.fieldReadInterceptors, joinpoints.fieldReads);

Modified: projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/JoinPointManager.java
===================================================================
--- projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/JoinPointManager.java	2008-07-25 13:03:44 UTC (rev 76231)
+++ projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/JoinPointManager.java	2008-07-25 14:35:24 UTC (rev 76232)
@@ -41,8 +41,7 @@
 abstract class JoinPointManager
 {
    protected AspectManager domain;
-   protected DynamicAOPStrategy dynamicWeavingStrategy;
-   
+      
    /**
     * Constructor.
     * 
@@ -51,7 +50,6 @@
    protected JoinPointManager(AspectManager domain)
    {
       this.domain = domain;
-      this.dynamicWeavingStrategy = domain.getDynamicAOPStrategy();
    }
    
    /**
@@ -63,7 +61,7 @@
    public synchronized void bindingAdded(AdviceBinding binding)
    {
       this.internalBindingAdded(binding);
-      dynamicWeavingStrategy.interceptorChainsUpdated();
+      domain.getDynamicAOPStrategy().interceptorChainsUpdated();
    }
    
    /**
@@ -76,7 +74,7 @@
    public synchronized void bindingUpdated(AdviceBinding newBinding, AdviceBinding oldBinding)
    {
       this.internalBindingUpdated(newBinding, oldBinding);
-      dynamicWeavingStrategy.interceptorChainsUpdated();
+      domain.getDynamicAOPStrategy().interceptorChainsUpdated();
    }
    
    /**
@@ -88,7 +86,7 @@
    public synchronized void bindingRemoved(AdviceBinding binding)
    {
       this.internalBindingRemoved(binding);
-      this.dynamicWeavingStrategy.interceptorChainsUpdated();
+      domain.getDynamicAOPStrategy().interceptorChainsUpdated();
    }
    
    /**
@@ -100,7 +98,7 @@
    public synchronized void bindingsRemoved(Collection<AdviceBinding> bindings)
    {
       this.internalBindingsRemoved(bindings);
-      this.dynamicWeavingStrategy.interceptorChainsUpdated();
+      domain.getDynamicAOPStrategy().interceptorChainsUpdated();
    }
    
    /**

Modified: projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/FieldAccessTransformer.java
===================================================================
--- projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/FieldAccessTransformer.java	2008-07-25 13:03:44 UTC (rev 76231)
+++ projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/FieldAccessTransformer.java	2008-07-25 14:35:24 UTC (rev 76232)
@@ -238,11 +238,11 @@
     * @param fieldsSet a collection of <code>java.lang.Integer</code> indentifying
     * the field writes to be wrapped.
     */
-   public void wrap(CtClass clazz, Collection fieldsGet, Collection fieldsSet) throws CannotCompileException, NotFoundException
+   public void wrap(CtClass clazz, Collection<Integer> fieldsGet, Collection<Integer> fieldsSet) throws CannotCompileException, NotFoundException
    {
-      List advisableFields = Instrumentor.getAdvisableFields(clazz);
+      List<CtField> advisableFields = Instrumentor.getAdvisableFields(clazz);
       CtField[] fields = new CtField[advisableFields.size()];
-      fields = (CtField[] ) advisableFields.toArray(fields);
+      fields = (CtField[]) advisableFields.toArray(fields);
       for (Iterator iterator = fieldsGet.iterator(); iterator.hasNext(); )
       {
          int fieldIndex = ((Integer) iterator.next()).intValue();

Modified: projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/Instrumentor.java
===================================================================
--- projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/Instrumentor.java	2008-07-25 13:03:44 UTC (rev 76231)
+++ projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/Instrumentor.java	2008-07-25 14:35:24 UTC (rev 76232)
@@ -824,9 +824,9 @@
    }
 
 
-   public List getConstructors(CtClass clazz)
+   public List<CtConstructor> getConstructors(CtClass clazz)
    {
-      List list = new ArrayList();
+      List<CtConstructor> list = new ArrayList<CtConstructor>();
 
       CtConstructor[] constructors = clazz.getDeclaredConstructors();
 
@@ -835,16 +835,15 @@
          list.add(constructors[i]);
       }
       Collections.sort(list, CtConstructorComparator.INSTANCE);
-
       return list;
    }
 
    /**
     * Gets sorted collection of advisable methods.
     */
-   public static List getAdvisableFields(CtClass clazz) throws NotFoundException
+   public static List<CtField> getAdvisableFields(CtClass clazz) throws NotFoundException
    {
-      List list = new ArrayList();
+      List<CtField> list = new ArrayList<CtField>();
       CtField[] fields = clazz.getDeclaredFields();
       for (int i = 0; i < fields.length; i++)
       {
@@ -947,7 +946,7 @@
       //creates a converter
       this.converter = new CodeConverter();
       // list of instrumented classes
-      Collection classes = new HashSet();
+      Collection<CtClass> classes = new HashSet<CtClass>();
       try {
          // transform classes whose joinpont status have changed
          for (Iterator iterator = joinpointUpdates.iterator(); iterator.hasNext(); )
@@ -972,7 +971,7 @@
          }
          // instrument classes that access the joinpoints whose status have changed, in
          // order to make this classes access the joinpoint wrapper instead
-         Collection conversionsRegistered = new HashSet();
+         //Collection conversionsRegistered = new HashSet();
          synchronized(this.processedClasses)
          {
             for (Iterator iterator2 = processedClasses.iterator(); iterator2.hasNext(); ) {

Modified: projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/JoinpointStatusUpdate.java
===================================================================
--- projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/JoinpointStatusUpdate.java	2008-07-25 13:03:44 UTC (rev 76231)
+++ projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/JoinpointStatusUpdate.java	2008-07-25 14:35:24 UTC (rev 76232)
@@ -24,10 +24,10 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
+import javassist.CtClass;
+
 import org.jboss.aop.MethodInfo;
 
-import javassist.CtClass;
-
 /**
  * This class contains the status update of
  * all joinpoints associated to a class.
@@ -83,7 +83,7 @@
       
       /**
        * The method execution joinpoints.
-       * A collection of <code>org.jboss.aop.MethodInfo</code>.
+       * A collection of <code>org.jboss.aop.Integer</code>.
        */
       public Collection<MethodInfo> methodExecutions;
       

Modified: projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/MethodExecutionTransformer.java
===================================================================
--- projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/MethodExecutionTransformer.java	2008-07-25 13:03:44 UTC (rev 76231)
+++ projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/instrument/MethodExecutionTransformer.java	2008-07-25 14:35:24 UTC (rev 76232)
@@ -153,15 +153,16 @@
    /**
     * Wraps the method executions contained in <code>methodInfos</code>.
     *
-    * @param clazz              the class being instrumented.
-    * @param constructorIndexes a collection of <code>org.jboss.aop.MethodInfo</code> indentifying
-    *                           the methods to be wrapped.
+    * @param clazz       the class being instrumented.
+    * @param methodInfos a collection of <code>org.jboss.aop.MethodInfo</code>
+    *                    indentifying the methods to be wrapped.
     */
-   public void wrap(CtClass clazz, Collection methodInfos) throws Exception
+   public void wrap(CtClass clazz, Collection<org.jboss.aop.MethodInfo> methodInfos) throws Exception
    {
-      for (Iterator iterator = methodInfos.iterator(); iterator.hasNext();)
+      
+      for (Iterator<org.jboss.aop.MethodInfo> iterator = methodInfos.iterator(); iterator.hasNext();)
       {
-         org.jboss.aop.MethodInfo methodInfo = (org.jboss.aop.MethodInfo) iterator.next();
+         org.jboss.aop.MethodInfo methodInfo = iterator.next();
          Method method = methodInfo.getMethod();
          AOPClassPool classPool = (AOPClassPool) clazz.getClassPool();
          Class[] parameterTypes = method.getParameterTypes();

Modified: projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/util/CtConstructorComparator.java
===================================================================
--- projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/util/CtConstructorComparator.java	2008-07-25 13:03:44 UTC (rev 76231)
+++ projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/util/CtConstructorComparator.java	2008-07-25 14:35:24 UTC (rev 76232)
@@ -32,13 +32,14 @@
  * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
  * @version $Revision$
  */
-public class CtConstructorComparator implements java.util.Comparator {
+public class CtConstructorComparator implements java.util.Comparator<CtConstructor> {
 
     private CtConstructorComparator() {}
 
     public static final java.util.Comparator INSTANCE = new CtConstructorComparator();
         
-    private int compare(CtConstructor m1, CtConstructor m2) {
+    public int compare(CtConstructor m1, CtConstructor m2)
+    {
         try {
             CtClass[] args1 = m1.getParameterTypes();
             CtClass[] args2 = m2.getParameterTypes();
@@ -60,9 +61,4 @@
         // unreachable.
         throw new Error();
     }
-
-    public int compare(Object o1, Object o2) {
-        return compare((CtConstructor) o1, (CtConstructor) o2);
-    }
-
 }

Modified: projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/util/CtFieldComparator.java
===================================================================
--- projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/util/CtFieldComparator.java	2008-07-25 13:03:44 UTC (rev 76231)
+++ projects/aop/branches/joinpoint_graph/aop/src/main/org/jboss/aop/util/CtFieldComparator.java	2008-07-25 14:35:24 UTC (rev 76232)
@@ -30,18 +30,13 @@
  * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
  * @version $Revision$
  */
-public class CtFieldComparator implements java.util.Comparator {
+public class CtFieldComparator implements java.util.Comparator<CtField> {
 
     private CtFieldComparator() {}
 
     public static final java.util.Comparator INSTANCE = new CtFieldComparator();
         
-    private int compare(CtField m1, CtField m2) {
+    public int compare(CtField m1, CtField m2) {
        return m1.getName().compareTo(m2.getName());
     }
-
-    public int compare(Object o1, Object o2) {
-        return compare((CtField) o1, (CtField) o2);
-    }
-
-}
+}
\ No newline at end of file

Modified: projects/aop/branches/joinpoint_graph/aop/src/test/org/jboss/test/aop/jdk15/dynamic/prepareAll/HotSwapEnabledTester.java
===================================================================
--- projects/aop/branches/joinpoint_graph/aop/src/test/org/jboss/test/aop/jdk15/dynamic/prepareAll/HotSwapEnabledTester.java	2008-07-25 13:03:44 UTC (rev 76231)
+++ projects/aop/branches/joinpoint_graph/aop/src/test/org/jboss/test/aop/jdk15/dynamic/prepareAll/HotSwapEnabledTester.java	2008-07-25 14:35:24 UTC (rev 76232)
@@ -187,7 +187,7 @@
     * interceptions were performed.
     * @throws Throwable 
     * @see ScenarioLoader#interceptPerInstanceGC()
-    */
+    *
    public void testPerInstanceGcInterception() throws Throwable
    {
       // run scenario




More information about the jboss-cvs-commits mailing list