[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