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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Oct 16 05:05:44 EDT 2007


Author: stalep
Date: 2007-10-16 05:05:43 -0400 (Tue, 16 Oct 2007)
New Revision: 66170

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/OptimizedFieldAccessTransformer.java
Log:
[JBAOP-265] arrays should now work with classicinstrumentor

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/OptimizedFieldAccessTransformer.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/OptimizedFieldAccessTransformer.java	2007-10-16 09:04:36 UTC (rev 66169)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/OptimizedFieldAccessTransformer.java	2007-10-16 09:05:43 UTC (rev 66170)
@@ -97,7 +97,7 @@
       
       // executeWrapping
       replaceFieldAccessInternally(clazz, field, wrappedGet, wrappedSet, fieldIndex);
-      buildWrappers(clazz, field, wrappedGet, wrappedSet, fieldIndex);
+      buildWrappers(clazz, field, shouldReplaceArrayAccess, wrappedGet, wrappedSet, fieldIndex);
    }
 
    /**
@@ -116,7 +116,8 @@
       {
          return getReadWrapperBody(clazz, field, index);
       }
-      return getWriteWrapperBody(clazz, field, index);
+      //TODO: set replaceArrayAccess=false as default, must be verified.
+      return getWriteWrapperBody(clazz, field, false, index);
    }
 
    /**
@@ -202,7 +203,7 @@
     * @param index the <code>field</code> index.
     * @return the optimized wrapper body.
     */
-   private String getWriteWrapperBody(CtClass clazz, CtField field, int index)
+   private String getWriteWrapperBody(CtClass clazz, CtField field, boolean shouldReplaceArrayAccess, int index)
            throws NotFoundException, CannotCompileException
    {
       String wrappedName = field.getName();
@@ -224,8 +225,11 @@
       String code;
       if (!isStatic)
       {
+         String targetString = "((" + clazz.getName() + ")$1)";
+         String fieldString = targetString + "." + field.getName();
          code =
          "{ "
+         + "   " + getArrayWriteRegistration(shouldReplaceArrayAccess, targetString, field, fieldString, "$2")
          + "   " + fieldInfoFromWeakReference("info", infoName)
          + "    org.jboss.aop.ClassInstanceAdvisor instAdv = (org.jboss.aop.ClassInstanceAdvisor)((org.jboss.aop.InstanceAdvised)$1)._getInstanceAdvisor();"
          + "    org.jboss.aop.advice.Interceptor[] interceptors = info.getInterceptors();"
@@ -249,8 +253,11 @@
       }
       else
       {
+         String targetString = "java.lang.Class.forName(\"" + clazz.getName() + "\")";
+         String fieldString = clazz.getName() +  "." + field.getName();
          code =
          "{ "
+         + "    " + getArrayWriteRegistration(shouldReplaceArrayAccess, targetString, field, fieldString, "$2")
          + "    org.jboss.aop.advice.Interceptor[] interceptors = " + Instrumentor.HELPER_FIELD_NAME + ".getFieldWriteInfos()[" + index + "].getInterceptors(); "
          + "    if (interceptors != (org.jboss.aop.advice.Interceptor[])null) "
          + "    { "
@@ -269,7 +276,7 @@
    }
    
    
-   private void buildWrappers(CtClass clazz, CtField field, boolean doGet, boolean doSet, int index) throws NotFoundException, CannotCompileException
+   private void buildWrappers(CtClass clazz, CtField field, boolean shouldReplaceArrayAccess, boolean doGet, boolean doSet, int index) throws NotFoundException, CannotCompileException
    {
       if (doGet)
       {
@@ -279,7 +286,7 @@
       }
       if (doSet)
       {
-         String code = getWriteWrapperBody(clazz, field, index);
+         String code = getWriteWrapperBody(clazz, field, shouldReplaceArrayAccess, index);
          CtMethod method = clazz.getDeclaredMethod(fieldWrite(field.getName()));
          method.setBody(code);
       }




More information about the jboss-cvs-commits mailing list