[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