[jboss-cvs] JBossAS SVN: r67174 - in projects/aop/trunk/aop/src/main/org/jboss/aop: instrument and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Nov 16 10:06:23 EST 2007
Author: kabir.khan at jboss.com
Date: 2007-11-16 10:06:22 -0500 (Fri, 16 Nov 2007)
New Revision: 67174
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/SuperClassesFirstWeavingStrategy.java
projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java
Log:
[JBAOP-485] Override Instrumentor.isBaseClass() in GeneratedAdvisorInstrumentor
See JIRA issue for the slightly complicated scenario this fixes
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/SuperClassesFirstWeavingStrategy.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/SuperClassesFirstWeavingStrategy.java 2007-11-16 14:59:22 UTC (rev 67173)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/SuperClassesFirstWeavingStrategy.java 2007-11-16 15:06:22 UTC (rev 67174)
@@ -50,8 +50,10 @@
public byte[] translate(AspectManager manager, String className, ClassLoader loader, byte[] classfileBuffer) throws Exception
{
+// System.out.println("-- Loading class " + className);
if (isReEntry())
{
+// System.out.println("XXXX REENTRY!!!!!!!!!!!!!");
return null;
}
setReEntry();
@@ -204,6 +206,7 @@
manager.attachMetaData(advisor, info.getClazz(), true);
manager.applyInterfaceIntroductions(advisor, info.getClazz());
transformed = instrumentor.transform(info.getClazz(), advisor);
+// System.out.println("-- woven " + info.getClazz().getName() + " " + transformed);
}
if (transformed)
{
@@ -213,6 +216,13 @@
}
return info.getClazz();
}
+
+ if (isLoadedClass)
+ {
+ pool.setClassLoadedButNotWoven(info.getClassName());
+// System.out.println("NOT WOVEN " + info.getClassName());
+ }
+
return null;
}
catch(Exception e)
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java 2007-11-16 14:59:22 UTC (rev 67173)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java 2007-11-16 15:06:22 UTC (rev 67174)
@@ -41,6 +41,7 @@
import org.jboss.aop.MethodByConInfo;
import org.jboss.aop.MethodByMethodInfo;
import org.jboss.aop.MethodInfo;
+import org.jboss.aop.WeavingStrategySupport;
import org.jboss.aop.classpool.AOPClassPool;
/**
@@ -573,16 +574,47 @@
" } " +
" return " + INSTANCE_ADVISOR +";" +
"}";
- CtMethod getInstanceAdvisor = CtNewMethod.make(
- forName("org.jboss.aop.InstanceAdvisor"),
- "_getInstanceAdvisor",
- new CtClass[0],
- new CtClass[0],
- body,
- clazz);
- clazz.addMethod(getInstanceAdvisor);
+ try
+ {
+ CtMethod getInstanceAdvisor = CtNewMethod.make(
+ forName("org.jboss.aop.InstanceAdvisor"),
+ "_getInstanceAdvisor",
+ new CtClass[0],
+ new CtClass[0],
+ body,
+ clazz);
+ clazz.addMethod(getInstanceAdvisor);
+ }
+ catch (Exception e)
+ {
+ // AutoGenerated
+ throw new RuntimeException(e);
+ }
}
+ @Override
+ protected boolean isBaseClass(CtClass clazz) throws NotFoundException
+ {
+ CtClass supa = clazz.getSuperclass();
+ if (supa == null || supa.getName().equals("java.lang.Object"))
+ {
+ return true;
+ }
+
+ //The superClass may
+ // 1) already have been loaded at some stage where there were no binidings,
+ // 2) later some bindings were added which would affect the superclass
+ // 3) a new child class is loaded and since the SuperClassesWeavingStrategy will attempt to
+ // weave not modified superclasses, the CtClass will contain the right baseclass stuff, although
+ // the already loaded class does not.
+ if (classPool.isClassLoadedButNotWoven(supa.getName()))
+ {
+ return true;
+ }
+
+ return !isAdvised(supa);
+ }
+
public static String updatedAdvicesName(String infoName)
{
return infoName + "_updated";
More information about the jboss-cvs-commits
mailing list