[Jboss-cvs] JBossAS SVN: r56933 - in trunk/aop/src: main/org/jboss/aop main/org/jboss/aop/instrument resources/test/extender test/org/jboss/test/aop/extender

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Sep 18 08:55:39 EDT 2006


Author: kabir.khan at jboss.com
Date: 2006-09-18 08:55:25 -0400 (Mon, 18 Sep 2006)
New Revision: 56933

Modified:
   trunk/aop/src/main/org/jboss/aop/CallerConstructorInfo.java
   trunk/aop/src/main/org/jboss/aop/CallerMethodInfo.java
   trunk/aop/src/main/org/jboss/aop/ClassAdvisor.java
   trunk/aop/src/main/org/jboss/aop/ConByConInfo.java
   trunk/aop/src/main/org/jboss/aop/ConByMethodInfo.java
   trunk/aop/src/main/org/jboss/aop/ConstructionInfo.java
   trunk/aop/src/main/org/jboss/aop/ConstructorInfo.java
   trunk/aop/src/main/org/jboss/aop/FieldInfo.java
   trunk/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java
   trunk/aop/src/main/org/jboss/aop/JoinPointInfo.java
   trunk/aop/src/main/org/jboss/aop/MethodByConInfo.java
   trunk/aop/src/main/org/jboss/aop/MethodByMethodInfo.java
   trunk/aop/src/main/org/jboss/aop/MethodInfo.java
   trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java
   trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorMethodExecutionTransformer.java
   trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java
   trunk/aop/src/resources/test/extender/jboss-aop.xml
   trunk/aop/src/test/org/jboss/test/aop/extender/ChildBase.java
   trunk/aop/src/test/org/jboss/test/aop/extender/ExtenderTestCase.java
   trunk/aop/src/test/org/jboss/test/aop/extender/InfantBase.java
   trunk/aop/src/test/org/jboss/test/aop/extender/SuperCallAspect.java
Log:
[JBAOP-285] With generated advisors make calls to overridden methods in superclass get intercepted

Modified: trunk/aop/src/main/org/jboss/aop/CallerConstructorInfo.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/CallerConstructorInfo.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/CallerConstructorInfo.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -41,9 +41,9 @@
    private final long calledConHash;
    private final Class calledClass;
    
-   public CallerConstructorInfo(Advisor advisor, Class calledClass, Constructor called, long calledConHash, Method wrappingMethod, Interceptor[] in)
+   public CallerConstructorInfo(Advisor advisor, Class calledClass, Constructor called, long calledConHash, Method wrappingMethod, Interceptor[] in, Class clazz)
    {
-      super(advisor);
+      super(advisor, clazz);
       this.calledClass = calledClass;
       super.setInterceptors(in);
       this.constructor = called;

Modified: trunk/aop/src/main/org/jboss/aop/CallerMethodInfo.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/CallerMethodInfo.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/CallerMethodInfo.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -39,9 +39,9 @@
    private final Method method;
    private final long calledMethodHash;
 
-   public CallerMethodInfo(Advisor advisor, Class calledClass, Method m, long calledMethodHash, Interceptor[] in)
+   public CallerMethodInfo(Advisor advisor, Class calledClass, Method m, long calledMethodHash, Interceptor[] in, Class clazz)
    {
-      super(advisor);
+      super(advisor, clazz);
       this.calledClass = calledClass;
       super.setInterceptors(in);
       this.method = m;

Modified: trunk/aop/src/main/org/jboss/aop/ClassAdvisor.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/ClassAdvisor.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/ClassAdvisor.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -24,7 +24,6 @@
 import gnu.trove.TLongObjectHashMap;
 
 import java.lang.ref.WeakReference;
-import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;

Modified: trunk/aop/src/main/org/jboss/aop/ConByConInfo.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/ConByConInfo.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/ConByConInfo.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -40,7 +40,7 @@
    
    public ConByConInfo(Advisor advisor, Class calledClass, int callingIndex, Constructor called, long calledConHash, Method wrappingMethod, Interceptor[] in)
    {
-      super(advisor, calledClass, called, calledConHash, wrappingMethod, in);
+      super(advisor, calledClass, called, calledConHash, wrappingMethod, in, advisor.getClazz());
       this.callingIndex = callingIndex;
       this.calling = advisor.constructors[callingIndex];
    }

Modified: trunk/aop/src/main/org/jboss/aop/ConByMethodInfo.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/ConByMethodInfo.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/ConByMethodInfo.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -48,7 +48,7 @@
    public ConByMethodInfo(Advisor advisor, Class calledClass, long callingMethodHash, Constructor c, long calledConHash, Method wrappingMethod, Interceptor[] in)
    {
       // FIXME ConByMethodJoinPont constructor
-      super(advisor, calledClass, c, calledConHash, wrappingMethod, in);
+      super(advisor, calledClass, c, calledConHash, wrappingMethod, in, advisor.getClazz());
       try
       {
          this.callingMethodHash = callingMethodHash;

Modified: trunk/aop/src/main/org/jboss/aop/ConstructionInfo.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/ConstructionInfo.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/ConstructionInfo.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -45,7 +45,7 @@
    
    public ConstructionInfo(Class clazz, int index, long constructorHash, Advisor advisor)
    {
-      super(advisor);
+      super(advisor, clazz);
       try
       {
          this.index = index;

Modified: trunk/aop/src/main/org/jboss/aop/ConstructorInfo.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/ConstructorInfo.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/ConstructorInfo.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -46,7 +46,7 @@
    
    public ConstructorInfo(Class clazz, int index, long wrapperHash, long constructorHash, Advisor advisor)
    {
-      super(advisor);
+      super(advisor, clazz);
       try
       {
          this.index = index;

Modified: trunk/aop/src/main/org/jboss/aop/FieldInfo.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/FieldInfo.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/FieldInfo.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -53,7 +53,7 @@
    
    public FieldInfo(Class clazz, int index, String fieldName, long wrapperHash, Advisor advisor, boolean read)
    {
-      super(advisor);
+      super(advisor, clazz);
 
       try
       {

Modified: trunk/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/GeneratedClassAdvisor.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -43,6 +43,7 @@
 import org.jboss.aop.instrument.MethodJoinPointGenerator;
 import org.jboss.aop.joinpoint.Joinpoint;
 import org.jboss.aop.joinpoint.MethodJoinpoint;
+import org.jboss.aop.pointcut.PointcutMethodMatch;
 
 import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
 
@@ -68,6 +69,8 @@
    ArrayList constructionInfos = new ArrayList();
    ArrayList fieldReadInfos = new ArrayList();
    ArrayList fieldWriteInfos = new ArrayList();
+   /** Super class methods that have been overrridden */
+   ArrayList overriddenMethods = new ArrayList(); 
 
    ConcurrentReaderHashMap constructorJoinPoinGenerators = new ConcurrentReaderHashMap();
    ConcurrentReaderHashMap constructionJoinPoinGenerators = new ConcurrentReaderHashMap();
@@ -79,6 +82,8 @@
    ConcurrentReaderHashMap conByConJoinPoinGenerators = new ConcurrentReaderHashMap();
    ConcurrentReaderHashMap conByMethodJoinPoinGenerators = new ConcurrentReaderHashMap();
 
+   boolean initialisedSuperClasses; 
+
    protected GeneratedClassAdvisor(String classname)
    {
       //Generated advisors will not pass in an aspectmanager
@@ -102,12 +107,48 @@
             this.perClassJoinpointAspectDefinitions = ((GeneratedClassAdvisor)existing).perClassJoinpointAspectDefinitions;
          }
       }
-
+      
       manager.initialiseClassAdvisor(clazz, this);
    }
+   
+   protected void handleOverriddenMethods(AdviceBinding binding)
+   {
+      if (overriddenMethods != null && overriddenMethods.size() > 0)
+      {
+         for (Iterator it = overriddenMethods.iterator() ; it.hasNext() ; )
+         {
+            MethodInfo info = (MethodInfo)it.next();
+            Method method = info.getAdvisedMethod();
+            PointcutMethodMatch match = binding.getPointcut().matchesExecution(this, method);
+            
+            if (match != null && match.isMatch())
+            {
+               adviceBindings.add(binding);
+               if (AspectManager.verbose)
+               {
+                  System.err.println("method matched binding " + binding.getPointcut().getExpr() + " " + method.toString());     
+               }
+               binding.addAdvisor(this);
+               pointcutResolved(info, binding, new MethodJoinpoint(method));
+            }
+         }
+      }      
+   }
 
+   protected void resolveMethodPointcut(MethodInterceptors newMethodInterceptors, AdviceBinding binding)
+   {
+      super.resolveMethodPointcut(newMethodInterceptors, binding);
+      handleOverriddenMethods(binding);
+   }
+
+   
    protected void addMethodInfo(MethodInfo mi)
    {
+      MethodInfo old = methodInfos.getMethodInfo(mi.getHash());
+      if (old != null)
+      {
+         overriddenMethods.add(old);
+      }
       methodInfos.put(mi.getHash(), mi);
       //If we do dynamic invokes the method will need to be accessible via reflection if private/protected
       SecurityActions.setAccessible(mi.getAdvisedMethod());
@@ -266,6 +307,20 @@
          finalizeChainAndRebindJoinPoint(info, generator);
       }
       methodInterceptors = newMethodInfos;
+      
+      //Handle the overridden methods
+      if (overriddenMethods != null && overriddenMethods.size() > 0)
+      {
+         for (Iterator it = overriddenMethods.iterator() ; it.hasNext() ; )
+         {
+            MethodInfo info = (MethodInfo)it.next();
+
+            MethodJoinPointGenerator generator = getJoinPointGenerator(info);
+            finalizeChainAndRebindJoinPoint(info, generator);
+         }
+      }      
+
+      
    }
 
    protected void finalizeFieldReadChain(ArrayList newFieldInfos)

Modified: trunk/aop/src/main/org/jboss/aop/JoinPointInfo.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/JoinPointInfo.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/JoinPointInfo.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -23,6 +23,7 @@
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
+import java.util.Arrays;
 
 import org.jboss.aop.advice.Interceptor;
 import org.jboss.aop.joinpoint.Joinpoint;
@@ -36,15 +37,18 @@
    private WeakReference advisor;
    
    protected volatile Joinpoint joinpoint;
+   
+   protected WeakReference clazz;
 
    protected JoinPointInfo()
    {
-      
+      this.clazz = new WeakReference(null);
    }
    
-   protected JoinPointInfo(Advisor advisor)
+   protected JoinPointInfo(Advisor advisor, Class clazz)
    {
       setAdvisor(advisor);
+      this.clazz = new WeakReference(clazz); 
    }
    
    /*
@@ -76,6 +80,11 @@
       return (Advisor)advisor.get();
    }
 
+   public Class getClazz()
+   {
+      return (Class)clazz.get(); 
+   }
+   
    public void setAdvisor(Advisor advisor) 
    {
       this.advisor = new WeakReference(advisor);

Modified: trunk/aop/src/main/org/jboss/aop/MethodByConInfo.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/MethodByConInfo.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/MethodByConInfo.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -42,7 +42,7 @@
    public MethodByConInfo(Advisor advisor, Class calledClass, int callingIndex, Method m, long calledMethodHash, Interceptor[] in)
    {
       // FIXME MethodByConInfo constructor
-      super(advisor, calledClass, m, calledMethodHash, in);
+      super(advisor, calledClass, m, calledMethodHash, in, advisor.getClazz());
       this.callingIndex = callingIndex;
       calling = advisor.constructors[callingIndex];
    }

Modified: trunk/aop/src/main/org/jboss/aop/MethodByMethodInfo.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/MethodByMethodInfo.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/MethodByMethodInfo.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -40,7 +40,7 @@
    
    public MethodByMethodInfo(Advisor advisor, Class calledClass, Method m, long callingMethodHash, long calledMethodHash, Interceptor[] in)
    {
-      super(advisor, calledClass, m, calledMethodHash, in);
+      super(advisor, calledClass, m, calledMethodHash, in, advisor.getClazz());
       try
       {
          this.callingMethodHash = callingMethodHash;

Modified: trunk/aop/src/main/org/jboss/aop/MethodInfo.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/MethodInfo.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/MethodInfo.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -26,6 +26,7 @@
 import org.jboss.aop.util.MethodHashing;
 
 import java.lang.reflect.Method;
+import java.util.Arrays;
 
 /**
  *  This class is here to eliminate a hash lookup in invokeMethod
@@ -38,16 +39,15 @@
    
    public MethodInfo()
    {
-      
    }
    
    public MethodInfo(Class clazz, long hash, long unadvisedHash, Advisor advisor)
    {
-      super(advisor);
+      super(advisor, clazz);
 
       try
       {
-         this.hash = hash;
+         this.hash = hash; 
          advisedMethod = MethodHashing.findMethodByHash(clazz, hash);
          unadvisedMethod = MethodHashing.findMethodByHash(clazz, unadvisedHash);
          this.setAdvisor(advisor);

Modified: trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorInstrumentor.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -73,12 +73,14 @@
    private static final String INITIALISE_METHODS = "initialiseMethods";
    public static final String GET_CLASS_ADVISOR = "_getClassAdvisor";
 
-   private static final String ADVISED_CLASS = "this.getClass().getDeclaringClass()";
+   private static final String DECLARING_CLASS = "this.getClass().getDeclaringClass()";
+   private static final String CONTAINER_CLASS = "this.getClass().getDeclaringClass()";
 
 
    private static final CtClass[] EMPTY_EXCEPTIONS = new CtClass[0];
    private static final CtClass[] EMPTY_SIG = new CtClass[0];
 
+   CtClass clazz;
    CtClass genadvisor;
    CtClass genInstanceAdvisor;
 
@@ -107,6 +109,7 @@
    {
       try
       {
+         this.clazz = clazz;
          super.transform(clazz, advisor);
 
          if (genadvisor != null)
@@ -381,14 +384,14 @@
    {
       String initBody =
          "{" +
-         "   " + DOMAIN + "= new org.jboss.aop.GeneratedAdvisorDomain($1, " + ADVISED_CLASS + ", false); " +
+         "   " + DOMAIN + "= new org.jboss.aop.GeneratedAdvisorDomain($1, " + DECLARING_CLASS + ", false); " +
          "   ((org.jboss.aop.Domain)" + DOMAIN + ").setInheritsBindings(true); " +
          "   " + INITIALISE_METHODS + "();" +
          "   " + INITIALISE_CONSTRUCTORS + "();" +
          "   " + INITIALISE_CONSTRUCTIONS + "();" +
          "   " + INITIALISE_FIELD_READS + "();" +
          "   " + INITIALISE_FIELD_WRITES + "();" +
-         "   super.initialise(" + ADVISED_CLASS + ", " + DOMAIN + ");" +
+         "   super.initialise(" + DECLARING_CLASS + ", " + DOMAIN + ");" +
          "   " + INITIALISE_CALLERS + "();" +
          "}";
 
@@ -703,7 +706,7 @@
    {
       String code =
          infoName + " = new " + MethodExecutionTransformer.METHOD_INFO_CLASS_NAME + "(" +
-               ADVISED_CLASS + ", " +
+               "java.lang.Class.forName(\"" + clazz.getName() + "\")," +
                hash + "L, " +
                unadvisedHash + "L, this);" +
          GeneratedClassAdvisor.ADD_METHOD_INFO + "(" + infoName + ");";
@@ -715,7 +718,7 @@
    {
       String code =
          infoName + " = new " + FieldAccessTransformer.FIELD_INFO_CLASS_NAME + "(" +
-            ADVISED_CLASS + ", " +
+            "java.lang.Class.forName(\"" + clazz.getName() + "\")," +
             index + ", " +
             "\"" + fieldName + "\", " +
             wrapperHash + "L, this, true);" +
@@ -728,7 +731,7 @@
    {
       String code =
          infoName + " = new " + FieldAccessTransformer.FIELD_INFO_CLASS_NAME + "(" +
-            ADVISED_CLASS + ", " +
+            "java.lang.Class.forName(\"" + clazz.getName() + "\")," +
             index + ", " +
             "\"" + fieldName + "\", " +
             wrapperHash + "L, this, false);" +
@@ -741,7 +744,7 @@
    {
       String code =
          infoName + " = new " + ConstructorExecutionTransformer.CONSTRUCTOR_INFO_CLASS_NAME + "(" +
-            ADVISED_CLASS + ", " +
+            "java.lang.Class.forName(\"" + clazz.getName() + "\")," +
             index + ", " +
             wrapperHash + "L, " +
             constructorHash + "L, this);" +
@@ -754,7 +757,7 @@
    {
       String code =
          infoName + " = new " + ConstructionTransformer.CONSTRUCTION_INFO_CLASS_NAME + "(" +
-            ADVISED_CLASS + ", " +
+            "java.lang.Class.forName(\"" + clazz.getName() + "\")," +
             index + ", " +
             constructorHash + "L, this);" +
          GeneratedClassAdvisor.ADD_CONSTRUCTION_INFO + "(" + infoName + ");";

Modified: trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorMethodExecutionTransformer.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorMethodExecutionTransformer.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/instrument/GeneratedAdvisorMethodExecutionTransformer.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -266,7 +266,7 @@
 
       CtClass[] params = addTargetToParamsForNonStaticMethod(trans.getClazz(), trans.getWMethod());
 
-      String code = createAdvisorMethodBody(trans);
+      String code = createAdvisorMethodBody(trans, genadvisor/*kill*/);
       try
       {
          CtMethod advisorMethod = CtNewMethod.make(
@@ -287,7 +287,7 @@
       }
    }
 
-   private String createAdvisorMethodBody(MethodTransformation trans)throws NotFoundException
+   private String createAdvisorMethodBody(MethodTransformation trans, CtClass ga/*kill*/)throws NotFoundException
    {
       if (Modifier.isStatic(trans.getWMethod().getModifiers()))
       {
@@ -295,7 +295,7 @@
       }
       else
       {
-         return createNonStaticAdvisorMethodBody(trans);
+         return createNonStaticAdvisorMethodBody(trans, ga);
       }
    }
 
@@ -322,7 +322,7 @@
       return code;
    }
 
-   private String createNonStaticAdvisorMethodBody(MethodTransformation trans)throws NotFoundException
+   private String createNonStaticAdvisorMethodBody(MethodTransformation trans, CtClass ga/*kill*/)throws NotFoundException
    {
       String infoName = getJoinPointFieldName(trans);
       String generatorName = getJoinPointGeneratorFieldName(trans);

Modified: trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java
===================================================================
--- trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -108,7 +108,7 @@
 
       initialiseJoinPointNames();
    
-      findAdvisedField(advisorClass);
+      findAdvisedField(advisorClass, info);
    }
    
    public void rebindJoinpoint(JoinPointInfo newInfo)
@@ -303,8 +303,17 @@
       }
    }
    
-   private void findAdvisedField(Class advisorSuperClazz)
+   private void findAdvisedField(Class advisorSuperClazz, JoinPointInfo info)
    {
+      if (info.getClazz() == null)
+      {
+         return;
+      }
+      
+      while (advisorSuperClazz != null && advisorSuperClazz.getDeclaringClass() != info.getClazz())
+      {
+         advisorSuperClazz = advisorSuperClazz.getSuperclass();
+      }
       try
       {
          try
@@ -330,7 +339,7 @@
             //GeneratedClassAdvisor is the base class for all generated advisors
             if (!advisorSuperClazz.getName().equals(GENERATED_CLASS_ADVISOR))
             {
-               findAdvisedField(advisorSuperClazz.getSuperclass());
+               findAdvisedField(advisorSuperClazz.getSuperclass(), info);
             }
          }
       }

Modified: trunk/aop/src/resources/test/extender/jboss-aop.xml
===================================================================
--- trunk/aop/src/resources/test/extender/jboss-aop.xml	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/resources/test/extender/jboss-aop.xml	2006-09-18 12:55:25 UTC (rev 56933)
@@ -28,4 +28,7 @@
    <bind pointcut="execution(* $instanceof{org.jboss.test.aop.extender.Base}->superCall())">
    	<advice aspect="org.jboss.test.aop.extender.SuperCallAspect" name="invoke"/>
    </bind>
+   <bind pointcut="execution(* org.jboss.test.aop.extender.Base->superCall())">
+   	<advice aspect="org.jboss.test.aop.extender.SuperCallAspect" name="invoke"/>
+   </bind>
 </aop>

Modified: trunk/aop/src/test/org/jboss/test/aop/extender/ChildBase.java
===================================================================
--- trunk/aop/src/test/org/jboss/test/aop/extender/ChildBase.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/test/org/jboss/test/aop/extender/ChildBase.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -37,10 +37,4 @@
    {
       return getBase()+1;
    }
-   
-
-   public void superCall()
-   {
-      super.superCall();
-   }
 }

Modified: trunk/aop/src/test/org/jboss/test/aop/extender/ExtenderTestCase.java
===================================================================
--- trunk/aop/src/test/org/jboss/test/aop/extender/ExtenderTestCase.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/test/org/jboss/test/aop/extender/ExtenderTestCase.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -21,10 +21,6 @@
 */ 
 package org.jboss.test.aop.extender;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
 import org.jboss.test.aop.AOPTestWithSetup;
 
 /**
@@ -78,8 +74,13 @@
    public void testSuperCall() throws Exception
    {
       SuperCallAspect.interceptions = 0;
-      InfantBase infant = new InfantBase();
-      infant.superCall();
-      assertEquals(4, SuperCallAspect.interceptions);
+      SubBase sub = new SubBase();
+      sub.superCall();
+      assertEquals(3, SuperCallAspect.interceptions);
+      assertEquals(3, SuperCallAspect.methodClasses.size());
+      
+      assertEquals(SubBase.class, SuperCallAspect.methodClasses.get(0));
+      assertEquals(Base.class, SuperCallAspect.methodClasses.get(1));
+      assertEquals(Base.class, SuperCallAspect.methodClasses.get(2));
    }
 }

Modified: trunk/aop/src/test/org/jboss/test/aop/extender/InfantBase.java
===================================================================
--- trunk/aop/src/test/org/jboss/test/aop/extender/InfantBase.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/test/org/jboss/test/aop/extender/InfantBase.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -32,10 +32,5 @@
    public void infantize(int i)
    {
       setBase(i-1);
-   }
-   
-   public void superCall()
-   {
-      super.superCall();
-   }
+   }   
 }

Modified: trunk/aop/src/test/org/jboss/test/aop/extender/SuperCallAspect.java
===================================================================
--- trunk/aop/src/test/org/jboss/test/aop/extender/SuperCallAspect.java	2006-09-18 06:08:11 UTC (rev 56932)
+++ trunk/aop/src/test/org/jboss/test/aop/extender/SuperCallAspect.java	2006-09-18 12:55:25 UTC (rev 56933)
@@ -21,7 +21,11 @@
 */ 
 package org.jboss.test.aop.extender;
 
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+
 import org.jboss.aop.joinpoint.Invocation;
+import org.jboss.aop.joinpoint.MethodInvocation;
 
 /**
  * 
@@ -31,10 +35,18 @@
 public class SuperCallAspect
 {
    public static int interceptions = 0;
+   public static ArrayList methodClasses = new ArrayList();
    
    public Object invoke(Invocation invocation) throws Throwable
    {
       interceptions++;
+      if (invocation instanceof MethodInvocation)
+      {
+         Method method = ((MethodInvocation)invocation).getActualMethod();
+         System.out.println("invoking " + method);
+         Class clazz = method.getDeclaringClass();
+         methodClasses.add(clazz);
+      }
       return invocation.invokeNext();
    }
 }




More information about the jboss-cvs-commits mailing list