[jboss-cvs] JBossAS SVN: r59823 - branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/instrument.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jan 19 08:57:41 EST 2007


Author: kabir.khan at jboss.com
Date: 2007-01-19 08:57:41 -0500 (Fri, 19 Jan 2007)
New Revision: 59823

Modified:
   branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/instrument/Instrumentor.java
   branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/instrument/MethodExecutionTransformer.java
Log:
Minor optimization, no need to first iterate over methods/ctors when classifying them and then while weaving

Modified: branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/instrument/Instrumentor.java
===================================================================
--- branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/instrument/Instrumentor.java	2007-01-19 12:59:21 UTC (rev 59822)
+++ branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/instrument/Instrumentor.java	2007-01-19 13:57:41 UTC (rev 59823)
@@ -593,15 +593,28 @@
          for (ReferenceClassIterator it = new ReferenceClassIterator(clazz.getRefClasses()) ; it.hasNext() ; )
          {
             ref = it.next();
-            if (!manager.convertReference(ref)
-                || manager.isNonAdvisableClassName(ref)
-                || ref.startsWith("java.")
-                || ref.startsWith("javax.")
-                || ref.startsWith("["))
+            System.out.println("----> convert? " + ref + " " + manager.convertReference(ref));
+            if (manager.isNonAdvisableClassName(ref)
+                  || ref.startsWith("java.")
+                  || ref.startsWith("javax.")
+                  || ref.startsWith("["))
             {
                continue;
             }
             
+            final boolean convertReferences = manager.convertReference(ref); 
+            if (!convertReferences)
+            {
+               //See comment in JBAOP-346 for an explanation, but basically the *direct* superclass may not be woven, but fields from
+               //the *direct* superclasses parents may be woven.
+               CtClass superClazz = clazz.getSuperclass();
+               if (superClazz == null || !superClazz.getName().equals(ref))
+               {
+                  //The referenced class is not our super class
+                  continue;
+               }
+            }
+            
             // Only need a temporary advisor for resolving metadata
             CtClass ctRef = null;
             try
@@ -626,6 +639,7 @@
             it.addSuperClass(ctRef);
             
             ClassAdvisor advisor = manager.getTempClassAdvisor(ctRef);
+            System.out.println("------> REFCLASS " + ctRef.getName());
             if (!manager.shouldSkipFieldAccess(ref) && !ref.equals(clazz.getName()))
             {
                List fields = getAdvisableFields(ctRef);
@@ -639,7 +653,7 @@
                   manager.skipFieldAccess(ref);
                }
             }
-            if (!manager.shouldSkipConstruction(ref))
+            if (convertReferences && !manager.shouldSkipConstruction(ref))
             {
                if (constructorExecutionTransformer.replaceConstructorAccess(advisor, ctRef))
                {
@@ -696,7 +710,7 @@
          if (AspectManager.verbose) System.out.println("[trying to transform] " + clazz.getName());
 
          DeclareChecker.checkDeclares(manager, clazz, advisor);
-
+         System.out.println("===================> " + clazz.getName());
          boolean converted = instrumentAnnotationIntroductions(clazz, advisor);
          converted = instrumentAnnotationOverrides(clazz, advisor) || converted;
          boolean constructorAccessConverted = false;
@@ -1131,4 +1145,9 @@
          }
       }
    }
+   
+   AspectManager getManager()
+   {
+      return manager;
+   }
 }
\ No newline at end of file

Modified: branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/instrument/MethodExecutionTransformer.java
===================================================================
--- branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/instrument/MethodExecutionTransformer.java	2007-01-19 12:59:21 UTC (rev 59822)
+++ branches/Branch_AOP_1_5/aop/src/main/org/jboss/aop/instrument/MethodExecutionTransformer.java	2007-01-19 13:57:41 UTC (rev 59823)
@@ -114,37 +114,19 @@
       return TransformerCommon.infoFromWeakReference(METHOD_INFO_CLASS_NAME, localName, methodInfoName);
    }
 
-   /**
-    * Classifies the method execution joinpoints.
-    *
-    * @param clazz   the clazz whose methods will be classified.
-    * @param advisor the advisor associated to <code>clazz</code>.
-    * @return a classification array.
-    */
-   protected JoinpointClassification[] classifyMethods(CtClass clazz, ClassAdvisor advisor) throws NotFoundException
-   {
-      CtMethod[] methods = clazz.getDeclaredMethods();
-      JoinpointClassification[] classification = new JoinpointClassification[methods.length];
-      for (int i = 0; i < methods.length; i++)
-      {
-         classification[i] = classifier.classifyMethodExecution(methods[i], advisor);
-      }
-      return classification;
-   }
-
    public void instrument(CtClass clazz, ClassAdvisor advisor)throws NotFoundException, CannotCompileException
    {
-      JoinpointClassification[] classification = classifyMethods(clazz, advisor);
       CtMethod[] methods = clazz.getDeclaredMethods();
       for (int i = 0; i < methods.length; i++)
       {
-         if (classification[i] == JoinpointClassification.NOT_INSTRUMENTED)
+         JoinpointClassification classification = classifier.classifyMethodExecution(methods[i], advisor);
+         if (classification == JoinpointClassification.NOT_INSTRUMENTED)
          {
             continue;
          }
          instrumentor.setupBasics(clazz);
          MethodTransformation trans = new MethodTransformation(instrumentor, clazz, methods[i]);
-         boolean wrap = (classification[i].equals(JoinpointClassification.WRAPPED));
+         boolean wrap = (classification.equals(JoinpointClassification.WRAPPED));
          transformMethod(trans, wrap);
 
          int modifier = trans.getWMethod().getModifiers();




More information about the jboss-cvs-commits mailing list