[jboss-cvs] JBossAS SVN: r64552 - in projects/aop/trunk/aop/src: main/org/jboss/aop/advice and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Aug 13 00:23:23 EDT 2007


Author: flavia.rainone at jboss.com
Date: 2007-08-13 00:23:22 -0400 (Mon, 13 Aug 2007)
New Revision: 64552

Added:
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/InvalidAdviceException.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/NoMatchingAdviceException.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafter/InvalidPOJO.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsInvalidPOJO.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointInvalidPOJO.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnInvalidPOJO.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerInvalidPOJO.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownInvalidPOJO.java
Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/AspectXmlLoader.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/JoinPointInfo.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceMethodProperties.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceType.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/GeneratedAdvisorInterceptor.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AdviceInfo.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AdviceMethodFactory.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AnnotatedParameterAdviceInfo.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/ParameterAnnotationRule.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/ParameterAnnotationRuleException.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByMethodJoinPointGenerator.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionJoinPointGenerator.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorJoinPointGenerator.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldJoinPointGenerator.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByMethodJoinPointGenerator.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodJoinPointGenerator.java
   projects/aop/trunk/aop/src/resources/test/beforeafter/jboss-aop.xml
   projects/aop/trunk/aop/src/resources/test/beforeafterArgs/jboss-aop.xml
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafter/BeforeAfterThrowingTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafter/POJO.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/InvalidAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedAdviceTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedAroundCallAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedBeforeCallAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedFinallyAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownAspect.java
Log:
[JBAOP-387] Added the whole exception scheme and splitten invalid advices from valid ones.

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/AspectXmlLoader.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/AspectXmlLoader.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/AspectXmlLoader.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -394,7 +394,7 @@
                      message.append("\'\n\t\t\t\t\t   should be one of: \n\t\t\t\t\t\t'interceptor\', \n\t\t\t\t\t\t'interceptor-ref\', \n\t\t\t\t\t\t'advice\', \n\t\t\t\t\t\t'");
                      for (AdviceType adviceType : AdviceType.values())
                      {
-                        message.append(adviceType.getDescription());
+                        message.append(adviceType.getName());
                         message.append("\', \n\t\t\t\t\t\t'");
                      }
                      message.append("stack-ref\'.\n");

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/JoinPointInfo.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/JoinPointInfo.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/JoinPointInfo.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -126,11 +126,6 @@
       return interceptorChain;
    }
 
-   public void setInterceptorChain(ArrayList interceptorChain) {
-      adviceString = null;
-      this.interceptorChain = interceptorChain;
-   }
-
    public Interceptor[] getInterceptors() {
       return interceptors;
    }

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceMethodProperties.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceMethodProperties.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceMethodProperties.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -27,6 +27,8 @@
 import javassist.CtClass;
 import javassist.NotFoundException;
 
+import org.jboss.aop.joinpoint.JoinPointBean;
+
 /** Contains the properties of an advice method that we want to find.
  * Once found it is populated with the arguments
  * 
@@ -48,9 +50,13 @@
    
    public static enum OptionalParameters {TARGET, TARGET_CALLER}
    
+   // joinpoint this properties is associated with
+   private JoinPointBean joinPoint;
+   
    //find properties
    private Class aspectClass;
    private String adviceName;
+   private Class thrownType;
    private Class joinPointBeanType;
    private Class invocationType;
    private Type target;
@@ -68,10 +74,11 @@
    private int[] args;
    
    private boolean overloadedMethod;
-
+   // TODO remove
    public AdviceMethodProperties(
-         Class aspectClass, 
-         String adviceName, 
+         JoinPointBean joinPoint,
+         Class aspectClass,
+         String adviceName,
          Class joinPointBeanType,
          Class invocationType,
          Type joinpointReturnType,
@@ -81,6 +88,26 @@
          Type target,
          boolean targetAvailable)
    {
+      this(joinPoint, aspectClass, adviceName, null, joinPointBeanType, invocationType,
+            joinpointReturnType, joinpointParameters, joinpointParameterClassTypes,
+            joinpointExceptions, target, targetAvailable);
+   }
+   
+   public AdviceMethodProperties(
+         JoinPointBean joinPoint,
+         Class aspectClass,
+         String adviceName,
+         Class thrownType,
+         Class joinPointBeanType,
+         Class invocationType,
+         Type joinpointReturnType,
+         Type[] joinpointParameters,
+         Class[] joinpointParameterClassTypes,
+         Type[] joinpointExceptions,
+         Type target,
+         boolean targetAvailable)
+   {
+      this.joinPoint = joinPoint;
       this.aspectClass = aspectClass;
       this.adviceName = adviceName;
       this.joinPointBeanType = joinPointBeanType;
@@ -93,10 +120,33 @@
       this.targetAvailable = targetAvailable;
       this.optionalParameters = OptionalParameters.TARGET;
    }
+   // TODO remove
+   public AdviceMethodProperties(
+         JoinPointBean joinPoint,
+         Class aspectClass,
+         String adviceName,
+         Class joinPointBeanType,
+         Class invocationType,
+         Type joinpointReturnType,
+         Type[] joinpointParameters,
+         Class<?>[] joinpointParameterClassTypes,
+         Type[] joinpointExceptions,
+         Type target,
+         boolean targetAvailable,
+         Type caller,
+         boolean callerAvailable)
+   {
+      this (joinPoint, aspectClass, adviceName, null, joinPointBeanType, invocationType,
+            joinpointReturnType, joinpointParameters,
+            joinpointParameterClassTypes, joinpointExceptions, target,
+            targetAvailable, caller, callerAvailable);
+   }
    
    public AdviceMethodProperties(
+         JoinPointBean joinPoint,
          Class aspectClass,
          String adviceName,
+         Class thrownType,
          Class joinPointBeanType,
          Class invocationType,
          Type joinpointReturnType,
@@ -108,9 +158,9 @@
          Type caller,
          boolean callerAvailable)
    {
-      this (aspectClass, adviceName, joinPointBeanType, invocationType, joinpointReturnType,
-      joinpointParameters, joinpointParameterClassTypes, joinpointExceptions, target,
-      targetAvailable);
+      this (joinPoint, aspectClass, adviceName, thrownType, joinPointBeanType, invocationType,
+            joinpointReturnType, joinpointParameters,
+            joinpointParameterClassTypes, joinpointExceptions, target, targetAvailable);
       this.caller = caller;
       this.callerAvailable = callerAvailable;
       this.optionalParameters = OptionalParameters.TARGET_CALLER;
@@ -122,6 +172,11 @@
       this.args = args;
    }
 
+   public JoinPointBean getJoinPoint()
+   {
+      return this.joinPoint;
+   }
+   
    public String getAdviceName()
    {
       return adviceName;
@@ -133,6 +188,10 @@
       return aspectClass;
    }
 
+   public Class getThrownType()
+   {
+      return this.thrownType;
+   }
 
    public Class getJoinPointBeanType()
    {

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceType.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceType.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/AdviceType.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -33,39 +33,43 @@
  */
 public enum AdviceType
 {
-   BEFORE("before", AdviceMethodFactory.BEFORE, true),
-   AROUND("around", AdviceMethodFactory.AROUND, false),
-   AFTER("after", AdviceMethodFactory.AFTER, false),
-   THROWING("throwing", AdviceMethodFactory.THROWING, false),
-   FINALLY("finally", AdviceMethodFactory.FINALLY, false);
+   BEFORE("before", AdviceMethodFactory.BEFORE, true, "before"),
+   AROUND("around", AdviceMethodFactory.AROUND, false, "around"),
+   AFTER("after", AdviceMethodFactory.AFTER, false, "after"),
+   THROWING("throwing", AdviceMethodFactory.THROWING, false, "after-throwing"),
+   FINALLY("finally", AdviceMethodFactory.FINALLY, false, "finally");
    
+   private String name;
    private String description;
    private String accessor;
    private AdviceMethodFactory factory;
    private boolean generatedOnly;
    
-   AdviceType(String description, AdviceMethodFactory factory, boolean generatedOnly)
+   AdviceType(String name, AdviceMethodFactory factory, boolean generatedOnly,
+         String description)
    {
-      this.description = description;
-      this.accessor = "get" + Character.toUpperCase(description.charAt(0))
-         + description.substring(1);
+      this.name = name;
+      this.accessor = "get" + Character.toUpperCase(name.charAt(0))
+         + name.substring(1);
       this.factory = factory;
+      this.factory.setAdviceType(this);
       this.generatedOnly = generatedOnly;
+      this.description = description;
    }
    
    /**
-    * Returns a lower case description of this type.
+    * Returns a lower case name of this type.
     */
-   public final String getDescription()
+   public final String getName()
    {
-      return this.description;
+      return this.name;
    }
    
    /**
     * Returns an accessor string for this type.
     * 
     * This accessor is built by concatenating <code>"get"</code> with the
-    * the {@link #getDescription() description} starting with an upper case.
+    * the {@link #getName() description} starting with an upper case.
     * 
     * @return an accessor string for this type.
     */
@@ -96,4 +100,14 @@
    {
       return this.generatedOnly;
    }
+   
+   /**
+    * Returns the verbose description of this type (for use on output).
+    * 
+    * @return the lower-case verbose description of this type
+    */
+   public String toString()
+   {
+      return this.description;
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/GeneratedAdvisorInterceptor.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/GeneratedAdvisorInterceptor.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/GeneratedAdvisorInterceptor.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -508,7 +508,7 @@
       GeneratedOnlyInterceptor(String name, InterceptorFactory factory)
       {
          this.name = name;
-         logger.warn(factory.getType().getDescription() +
+         logger.warn(factory.getType().getName() +
                " interceptor:s'" + name +
                "' is ignored for dynamic invocation. Adding null GeneratedOnlyInterceptor in its place");
       }

Added: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/InvalidAdviceException.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/InvalidAdviceException.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/InvalidAdviceException.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -0,0 +1,36 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.aop.advice;
+
+/**
+ * @author  <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ *
+ */
+public class InvalidAdviceException extends RuntimeException
+{
+   private static final long serialVersionUID = -7761721818447236098L;
+
+   public InvalidAdviceException(String message)
+   {
+      super(message);
+   }
+}

Added: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/NoMatchingAdviceException.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/NoMatchingAdviceException.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/NoMatchingAdviceException.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -0,0 +1,40 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.aop.advice;
+
+/**
+ * 
+ * @author  <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ */
+public class NoMatchingAdviceException extends RuntimeException
+{
+   private static final long serialVersionUID = 2170206416883695862L;
+
+   public NoMatchingAdviceException(AdviceMethodProperties adviceProperties,
+         AdviceType adviceType, String message)
+   {
+      super("No matching " + adviceType + " advice called '" +
+            adviceProperties.getAdviceName() + "' could be found in " +
+            adviceProperties.getAspectClass().getName() + " for joinpoint " +
+            adviceProperties.getJoinPoint() + message);
+   }
+}
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AdviceInfo.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AdviceInfo.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AdviceInfo.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -87,20 +87,20 @@
    }
    
    /**
-    * Validate this advice, indicating whether it can be the answer to the method query
-    * contained in <code>properties</code>.
+    * Matches this advice with the joinpoint to be intercepted, indicating whether it
+    * can be the answer to the method query contained in <code>properties</code>.
     * 
     * @param properties        contains information about the queried method
     * @param returnType        the expected return type
     * @return                  <code>true</code> only if this advice is valid
     */
-   public abstract boolean validate(AdviceMethodProperties properties,
+   public abstract boolean matches(AdviceMethodProperties properties,
          ReturnType returnType);
    
    /**
-    * Resets all information that has been set during validation.
+    * Resets all information that has been set during matching.
     */
-   public abstract void resetValidation();
+   public abstract void resetMatching();
 
    /**
     * Returns the distance in hierarchy between the annotated parameter identified by

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AdviceMethodFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AdviceMethodFactory.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AdviceMethodFactory.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -35,6 +35,9 @@
 
 import org.jboss.aop.AspectManager;
 import org.jboss.aop.advice.AdviceMethodProperties;
+import org.jboss.aop.advice.AdviceType;
+import org.jboss.aop.advice.InvalidAdviceException;
+import org.jboss.aop.advice.NoMatchingAdviceException;
 import org.jboss.aop.advice.annotation.assignability.DegreeAlgorithm;
 import org.jboss.aop.util.ReflectUtils;
 
@@ -105,15 +108,10 @@
                // returning Object
                if (method.getReturnType() != Object.class)
                {
-                  if (AspectManager.verbose)
-                  {
-                     adviceMatchingMessage.append("\n[warn] - method ");
-                     adviceMatchingMessage.append(method);
-                     adviceMatchingMessage.append(" does not match default around signature because it returns ");
-                     adviceMatchingMessage.append(method.getReturnType());
-                     adviceMatchingMessage.append(" intead of java.lang.Object");
-                  }
-                  return false;
+                  throw new InvalidAdviceException("Method '"
+                     + method
+                     + "' does not match default around signature because it returns "
+                     + method.getReturnType() + " instead of java.lang.Object");
                }
                // throws Throwable
                for (Class exceptionType: method.getExceptionTypes())
@@ -123,13 +121,8 @@
                      return true;
                   }
                }
-               if (AspectManager.verbose)
-               {
-                  adviceMatchingMessage.append("\n[warn] - method ");
-                  adviceMatchingMessage.append(method);
-                  adviceMatchingMessage.append(" does not match default around signature because it does not throw Throwable");
-               }
-               return false;
+               throw new InvalidAdviceException("Method '" + method +
+                  "' does not match default around signature because it does not throw java.lang.Throwable");
             }
             
             public AdviceInfo getAdviceInfo(Method method)
@@ -137,7 +130,7 @@
                // creates an advice info with the greatest rank of all advices
                return new AdviceInfo(method, 2000)
                {
-                  public boolean validate(AdviceMethodProperties properties,
+                  public boolean matches(AdviceMethodProperties properties,
                         ReturnType adviceReturn)
                   {
                      if(parameterTypes[0].isAssignableFrom(properties.getInvocationType()))
@@ -146,15 +139,13 @@
                      }
                      if (AspectManager.verbose)
                      {
-                        adviceMatchingMessage.append("\n[warn] - argument 0 of method ");
-                        adviceMatchingMessage.append(method);
-                        adviceMatchingMessage.append(" is not assignable from ");
-                        adviceMatchingMessage.append(properties.getInvocationType());
+                        appendNewMatchingMessage(method, "argument 0 is not assignable from ");
+                        appendMatchingMessage(properties.getInvocationType());
                      }
                      return false;
                   }
                   
-                  public void resetValidation() {}
+                  public void resetMatching() {}
 
                   public short getAssignabilityDegree(int typeIndex,
                         boolean isContextRule, AdviceMethodProperties properties)
@@ -185,21 +176,9 @@
       ParameterAnnotationRule.ARGS, ParameterAnnotationRule.ARG};
    static final int[][] TCA_INCOMPATIBILITY = new int[][]{{2, 3}};
    
-   /** Stores advice matching failure messages on verbose mode. */
-   static StringBuffer adviceMatchingMessage;
+   /** Stores advice matching failure messages. */
+   private static StringBuffer adviceMatchingMessage = new StringBuffer();
    
-   /**
-    * Method that returns log information about the last matching process executed.
-    * Should be called only if <code>Aspect.verbose</code> is <code>true</code>.
-    * 
-    * @return advice matching log information
-    */
-   public final static String getAdviceMatchingMessage()
-   {
-      String message = adviceMatchingMessage.toString();
-      return message;
-   }
-   
    private HashMap<String, WeakHashMap<ParameterAnnotationRule[],
       Collection<AdviceInfo>>> adviceInfoCache;
    
@@ -207,8 +186,23 @@
    private AdviceSignatureRule adviceSignatureRule;
    private ParameterAnnotationRule[] rules;
    private int[][] compulsory;
+   private AdviceType adviceType;
    
+   static <T>void appendNewMatchingMessage(Method method, T message)
+   {
+      adviceMatchingMessage.append("\n  On method '");
+      adviceMatchingMessage.append(method);
+      adviceMatchingMessage.append("'\n    ");
+      adviceMatchingMessage.append(message);
+   }
    
+   static <T>void appendMatchingMessage(T message)
+   {
+      
+      adviceMatchingMessage.append(message);
+   }
+   
+   
    /**
     * Creates an advice method factory.
     * 
@@ -234,18 +228,33 @@
    }
    
    /**
+    * Sets the type of advice this factory represents.
+    * 
+    * @param adviceType the type of the advice this factory is associated to
+    */
+   // weird code added because of mutual dependency between
+   // enums AdviceType and AdviceMethodFactory
+   // (AdviceMethodFactory needs AdviceType for outputing verbose messages)
+   public void setAdviceType(AdviceType adviceType)
+   {
+      if (this.adviceType != null)
+      {
+         throw new RuntimeException ("Unexpected call to setAdviceType method");
+      }
+      this.adviceType = adviceType;
+   }
+   
+   /**
     * Finds the more appropriate advice method.
     * 
     * @param properties contains information regarding the queried advice method
-    * @return           a properties fullfilled with the found method information. Can be
-    *                   <code>null</code> if no suitable method was found.
+    * @return           a properties fullfilled with the found method information.
+    * @throws NoMatchingAdviceException if no suitable method was found.
     */
    public final AdviceMethodProperties findAdviceMethod(AdviceMethodProperties properties)
+      throws NoMatchingAdviceException
    {
-      if (AspectManager.verbose)
-      {
-         adviceMatchingMessage = new StringBuffer();
-      }
+      adviceMatchingMessage.delete(0, adviceMatchingMessage.length());
       
       ParameterAnnotationRule[] contextRules = null;
       int[][] mutuallyExclusive = null;
@@ -270,7 +279,8 @@
       // no advice method following the rules was found
       if (cacheCollection == null || cacheCollection.isEmpty())
       {
-         return null;
+         throw new NoMatchingAdviceException(properties, adviceType,
+               adviceMatchingMessage.toString());
       }
       synchronized(cacheCollection)
       {
@@ -281,7 +291,8 @@
                contextRules);
          if (bestAdvice == null)
          {
-            return null;
+            throw new NoMatchingAdviceException(properties, adviceType,
+                  adviceMatchingMessage.toString());
          }
          // assign best Advice info to properties 
          bestAdvice.assignAdviceInfo(properties);
@@ -329,7 +340,7 @@
             Collection<AdviceInfo> advices = map.get(contextRules);
             for(AdviceInfo adviceInfo: advices)
             {
-               adviceInfo.resetValidation();
+               adviceInfo.resetMatching();
             }
             return advices;
          }
@@ -347,11 +358,9 @@
          {
             if (AspectManager.verbose)
             {
-               adviceMatchingMessage.append("\n[warn] - advice method ");
-               adviceMatchingMessage.append(properties.getAspectClass());
-               adviceMatchingMessage.append(".");
-               adviceMatchingMessage.append(properties.getAdviceName());
-               adviceMatchingMessage.append(" not found");
+               throw new NoMatchingAdviceException(properties, adviceType,
+                     ": no method named " + properties.getAdviceName() +
+                     " was found");
             }
             return null;
          }
@@ -366,17 +375,10 @@
             }
             else
             {
-               try
-               {
-                  // advice applies to annotated parameter rules
-                  rankedAdvices.add(new AnnotatedParameterAdviceInfo(properties,
-                        methods[i], rules, contextRules, mutuallyExclusive,
-                        compulsory));
-               }catch (ParameterAnnotationRuleException pare)
-               {
-                  // no need to print messages -> 
-                  // exception prints automatically on verbose mode
-               }
+               // advice applies to annotated parameter rules
+               rankedAdvices.add(new AnnotatedParameterAdviceInfo(properties,
+                     adviceType, methods[i], rules, contextRules, mutuallyExclusive,
+                     compulsory, returnType));
             }
          }
          // sort according to rank
@@ -402,7 +404,7 @@
       while (iterator.hasNext())
       {
          AdviceInfo advice = iterator.next();
-         if (advice.validate(properties, returnType))
+         if (advice.matches(properties, returnType))
          {
             bestAdvice = advice;
             break;
@@ -428,7 +430,7 @@
          AdviceInfo advice = iterator.next();
          if (advice.getRank() == bestAdvice.getRank())
          {
-            if (!advice.validate(properties, returnType))
+            if (!advice.matches(properties, returnType))
             {
                iterator.remove();
             }
@@ -566,4 +568,9 @@
       boolean applies(Method method);
       AdviceInfo getAdviceInfo(Method method);
    }
+   
+   interface MatchingRule
+   {
+      boolean matches(AdviceMethodProperties p);
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AnnotatedParameterAdviceInfo.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AnnotatedParameterAdviceInfo.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/AnnotatedParameterAdviceInfo.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -4,8 +4,9 @@
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 
-import org.jboss.aop.AspectManager;
 import org.jboss.aop.advice.AdviceMethodProperties;
+import org.jboss.aop.advice.AdviceType;
+import org.jboss.aop.advice.InvalidAdviceException;
 import org.jboss.aop.advice.annotation.AdviceMethodFactory.ReturnType;
 import org.jboss.aop.advice.annotation.assignability.AssignabilityAlgorithm;
 import org.jboss.aop.advice.annotation.assignability.VariableHierarchy;
@@ -22,14 +23,13 @@
    private ParameterAnnotationType paramTypes[];
    // the context dependent annotated parameter types
    private ParameterAnnotationType contextParamTypes[];
-   // muttually exclusive context parameter rules
-   private int[][] mutuallyExclusive;
-   // compusloriness rules: for each subarray, the first element is the precondition;
-   // the following elements are the annotations whose use is compulsory given
-   // that precondition is present among the annotated parameters
-   private int[][] compulsory;
+   // the type of advice this advice info represents
+   private AdviceType adviceType;
    // hierarchy of variable types
    private VariableHierarchy hierarchy;
+   // indicates whether this advice mthod was considered valid during the
+   // construction of this object
+   private boolean prevalidated;
    
    /**
     * Creates an annotated parameter advice info.
@@ -49,22 +49,76 @@
     *         comply with a parameter annotation rule.
     */
    public AnnotatedParameterAdviceInfo(AdviceMethodProperties properties,
-         Method method, ParameterAnnotationRule[] rules,
+         AdviceType adviceType, Method method, ParameterAnnotationRule[] rules,
          ParameterAnnotationRule[] contextRules, int[][] mutuallyExclusive,
-         int[][] compulsory)
-      throws ParameterAnnotationRuleException
+         int[][] compulsory, ReturnType returnType)
+      throws ParameterAnnotationRuleException, InvalidAdviceException
    {
       super(method, 0);
       this.paramTypes = createParameterAnnotationTypes(rules);
       this.contextParamTypes = createParameterAnnotationTypes(contextRules);
-      this.mutuallyExclusive = mutuallyExclusive;
-      this.compulsory = compulsory;
+      this.adviceType = adviceType;
       this.hierarchy = new VariableHierarchy();
       this.applyRules(properties);
+      
+      if (returnType == ReturnType.VOID && method.getReturnType()!= void.class)
+      {
+         throw new InvalidAdviceException("The " + adviceType +
+               " advice method '" + method + "' return type must be void");
+      }
+      
+      for (int i = 0; i < mutuallyExclusive.length; i++)
+      {
+         int[] exclusiveParamTypes = mutuallyExclusive[i];
+         int found = -1;
+         for (int j = 0; j < exclusiveParamTypes.length; j++)
+         {
+            if (contextParamTypes[exclusiveParamTypes[j]].isSet())
+            {
+               if (found != -1)
+               {
+                  throw new InvalidAdviceException(
+                        "Mutually exclusive parameter annotations '"
+                        + contextParamTypes[exclusiveParamTypes[found]].rule
+                        + "' and '" + contextParamTypes[exclusiveParamTypes[j]].rule
+                        + "' found on " + adviceType + " advice method '" + method +
+                        "'");
+               }
+               found = j;
+            }
+         }
+      }
+      
+      if (compulsory != null)
+      {
+        for (int i = 0; i < compulsory.length; i++)
+        {
+           ParameterAnnotationType precondition = paramTypes[compulsory[i][0]];
+           if (precondition.isSet())
+           {
+              for (int j = 1; j < compulsory[i].length; j++)
+              {
+                 if (!paramTypes[compulsory[i][j]].isSet())
+                 {
+                    throw new InvalidAdviceException(
+                          "Compulsory " + paramTypes[compulsory[i][j]].rule
+                          + "-annotated parameter not found on " + adviceType + 
+                          " advice method '" + method +
+                          "' (this parameter is compulsory in the presence of a " + 
+                          precondition.rule + "-annotated parameter)");
+                 }
+              }
+           }
+        }
+      }
    }
       
-   public boolean validate(AdviceMethodProperties properties, ReturnType returnType)
+   public boolean matches(AdviceMethodProperties properties, ReturnType returnType)
    {
+      if (!prevalidated)
+      {
+         return false;
+      }
       for (ParameterAnnotationType paramType: paramTypes)
       {
          if (!paramType.validate(properties))
@@ -81,97 +135,112 @@
          }
       }
       
-      switch (returnType)
+      if (method.getReturnType() == void.class && returnType == ReturnType.NOT_VOID
+            && properties.getJoinpointReturnType() != void.class)
       {
-         case ANY:
-            if (method.getReturnType() == void.class)
-            {
-               break;
-            }
-         case NOT_VOID:
-            if (properties.getJoinpointReturnType() != void.class &&
-                  method.getReturnType() != Object.class &&
-                  !AssignabilityAlgorithm.FROM_VARIABLE.isAssignable(
-                        properties.getJoinpointReturnType(),
-                        method.getGenericReturnType(), hierarchy))
-            {
-               if (AspectManager.verbose)
-               {
-                  AdviceMethodFactory.adviceMatchingMessage.append("\n[warn] - return value of ");
-                  AdviceMethodFactory.adviceMatchingMessage.append(method);
-                  AdviceMethodFactory.adviceMatchingMessage.append(" can not be assigned to type ");
-                  AdviceMethodFactory.adviceMatchingMessage.append(properties.getJoinpointReturnType());
-               }
-               return false;
-            }
-            break;
-         case VOID:
-            if (method.getReturnType()!= void.class)
-            {
-               if (AspectManager.verbose)
-               {
-                  AdviceMethodFactory.adviceMatchingMessage.append("\n[warn] - '");
-                  AdviceMethodFactory.adviceMatchingMessage.append(method);
-                  AdviceMethodFactory.adviceMatchingMessage.append("' must return void");
-               }
-               return false;
-            }
+         AdviceMethodFactory.appendNewMatchingMessage(method,
+            "return value cannot be void (it must match the joinpoint return type)");
+         return false;
       }
-      
-      for (int i = 0; i < mutuallyExclusive.length; i++)
+      else if(method.getReturnType() != void.class &&
+            method.getReturnType() != Object.class &&
+            !AssignabilityAlgorithm.FROM_VARIABLE.isAssignable(
+                  properties.getJoinpointReturnType(),
+                  method.getGenericReturnType(), hierarchy))
       {
-         int[] exclusiveParamTypes = mutuallyExclusive[i];
-         int found = -1;
-         for (int j = 0; j < exclusiveParamTypes.length; j++)
-         {
-            if (contextParamTypes[exclusiveParamTypes[j]].isSet())
-            {
-               if (found != -1)
-               {
-                  if (AspectManager.verbose)
-                  {
-                     AdviceMethodFactory.adviceMatchingMessage.append("\n[warn] - the use of parameter annotations ");
-                     AdviceMethodFactory.adviceMatchingMessage.append(contextParamTypes[exclusiveParamTypes[found]].rule.getAnnotation());
-                     AdviceMethodFactory.adviceMatchingMessage.append(" and ");
-                     AdviceMethodFactory.adviceMatchingMessage.append(contextParamTypes[exclusiveParamTypes[j]].rule.getAnnotation());
-                     AdviceMethodFactory.adviceMatchingMessage.append(" is mutually exclusive");
-                  }
-                  return false;
-               }
-               found = j;
-            }
-         }
+         AdviceMethodFactory.appendNewMatchingMessage(method,
+               "return value cannot be assigned to type '");
+         AdviceMethodFactory.appendMatchingMessage(properties.getJoinpointReturnType());
+         AdviceMethodFactory.appendMatchingMessage("'");
+         return false;
       }
+
       
-      if (compulsory != null)
-      {
-    	  for (int i = 0; i < compulsory.length; i++)
-    	  {
-    		  ParameterAnnotationType precondition = paramTypes[compulsory[i][0]];
-    		  if (precondition.isSet())
-    		  {
-    			  for (int j = 1; j < compulsory[i].length; j++)
-    			  {
-    				  if (!paramTypes[compulsory[i][j]].isSet())
-    				  {
-    					  if (AspectManager.verbose)
-    	                  {
-    	                     AdviceMethodFactory.adviceMatchingMessage.append("\n[warn] - if parameter annotation ");
-    	                     AdviceMethodFactory.adviceMatchingMessage.append(precondition.rule.getAnnotation());
-    	                     AdviceMethodFactory.adviceMatchingMessage.append(" is used, the use of parameter annotation ");
-    	                     AdviceMethodFactory.adviceMatchingMessage.append(paramTypes[compulsory[i][j]].rule.getAnnotation());
-                             AdviceMethodFactory.adviceMatchingMessage.append(" is compulsory");
-    	                  }
-    	                  return false;
-    				  }
-    			  }
-    		  }
-    	  }
-      }
+   
+      
+//      switch (returnType)
+//      {
+//         case ANY:
+//            if (method.getReturnType() == void.class)
+//            {
+//               break;
+//            }
+//         case NOT_VOID:
+//            if (properties.getJoinpointReturnType() != void.class &&
+//                  method.getReturnType() != Object.class &&
+//                  !AssignabilityAlgorithm.FROM_VARIABLE.isAssignable(
+//                        properties.getJoinpointReturnType(),
+//                        method.getGenericReturnType(), hierarchy))
+//            {
+//               AdviceMethodFactory.appendNewMatchingMessage(method,
+//                     "return value cannot be assigned to type '");
+//               AdviceMethodFactory.appendMatchingMessage(properties.getJoinpointReturnType());
+//               AdviceMethodFactory.appendMatchingMessage("'");
+//               return false;
+//            }
+//            break;
+//         case VOID:
+//            if (method.getReturnType()!= void.class)
+//            {
+//               throw new InvalidAdviceException("The " + adviceType +
+//                     " advice method '" + method + "' return type must be void");
+//            }
+//      }
+//      
+//      for (int i = 0; i < mutuallyExclusive.length; i++)
+//      {
+//         int[] exclusiveParamTypes = mutuallyExclusive[i];
+//         int found = -1;
+//         for (int j = 0; j < exclusiveParamTypes.length; j++)
+//         {
+//            if (contextParamTypes[exclusiveParamTypes[j]].isSet())
+//            {
+//               if (found != -1)
+//               {
+//                  throw new InvalidAdviceException(
+//                        "Mutually exclusive parameter annotations '"
+//                        + contextParamTypes[exclusiveParamTypes[found]].rule
+//                        + "' and '" + contextParamTypes[exclusiveParamTypes[j]].rule
+//                        + "' found on " + adviceType + " advice method '" + method +
+//                        "'");
+//               }
+//               found = j;
+//            }
+//         }
+//      }
+//      
+//      if (compulsory != null)
+//      {
+//    	  for (int i = 0; i < compulsory.length; i++)
+//    	  {
+//    		  ParameterAnnotationType precondition = paramTypes[compulsory[i][0]];
+//    		  if (precondition.isSet())
+//    		  {
+//    			  for (int j = 1; j < compulsory[i].length; j++)
+//    			  {
+//    				  if (!paramTypes[compulsory[i][j]].isSet())
+//    				  {
+//                    AdviceMethodFactory.appendNewMatchingMessage(method, "compulsory");
+//                    AdviceMethodFactory.appendMatchingMessage(paramTypes[compulsory[i][j]].rule);
+//                    AdviceMethodFactory.appendMatchingMessage("-annotated parameter not found (this parameter is compulsory in the presence of a ");
+//                    AdviceMethodFactory.appendMatchingMessage(precondition.rule);
+//                    AdviceMethodFactory.appendMatchingMessage("-annotated parameter)");
+//                    return false;
+////    					  throw new InvalidAdviceException(
+////                          "Compulsory " + paramTypes[compulsory[i][j]].rule
+////                          + "-annotated parameter not found on " + adviceType + 
+////                          " advice method '" + method +
+////                          "' (this parameter is compulsory in the presence of a " + 
+////                          precondition.rule + "-annotated parameter)");
+//    				  }
+//    			  }
+//    		  }
+//    	  }
+//      }
       return true;
    }
 
-   public void resetValidation()
+   public void resetMatching()
    {
       for (int i = 0;  i < paramTypes.length; i++)
       {
@@ -259,38 +328,35 @@
             {
                typeFound = findAnnotationType(annotation, i);
             }
-            else
+            else if (findAnnotationType(annotation, i) != null)
             {
-               if (findAnnotationType(annotation, i) != null)
-               {
-                  if (AspectManager.verbose)
-                  {
-                     throw new ParameterAnnotationRuleException("\n[warn] -parameter " + i  +
-                           " of method " + method +  " contains more than one valid annotation");
-                  }
-                  else
-                  {
-                     throw new ParameterAnnotationRuleException(null);
-                  }
-               }
+               throw new ParameterAnnotationRuleException("Parameter " + i  +
+                     " of " + adviceType + " advice method '" + method + 
+                     "' contains more than one valid annotation");
             }
          }
          if (typeFound == null)
          {
-            if (AspectManager.verbose)
+            if (paramAnnotations[i].length == 0)
             {
-               if (paramAnnotations[i].length == 0)
-               {
-                  throw new ParameterAnnotationRuleException("\n[warn] -parameter "
-                        + i  + " of method " + method +  " is not annotated");
-               }
-               throw new ParameterAnnotationRuleException("\n[warn] -parameter "
-                     + i  + " of method " + method +  " is not annotated correctly" +
-                     "\n[warn]  Expecting one of: " + getDescription(paramTypes) +
-                     getDescription(contextParamTypes));
+               throw new ParameterAnnotationRuleException("Parameter "
+                     + i  + " of " + adviceType + " advice method '" + method +
+                     "' is not annotated\nFor interception of joinpoint " +
+                     properties.getJoinPoint() + " expecting one of annotations: " +
+                     getDescription(paramTypes) + getDescription(contextParamTypes));
             }
-            // no need to say the reason a rule's been broken
-            throw new ParameterAnnotationRuleException(null);
+            AdviceMethodFactory.appendNewMatchingMessage(method, "parameter ");
+            AdviceMethodFactory.appendMatchingMessage(i);
+            AdviceMethodFactory.appendMatchingMessage("' is not annotated correctly. Expecting one of: ");
+            AdviceMethodFactory.appendMatchingMessage(getDescription(paramTypes));
+            AdviceMethodFactory.appendMatchingMessage(getDescription(contextParamTypes));
+//            throw new ParameterAnnotationRuleException("Parameter " + i  + " of " +
+//                  adviceType + " advice method '" + method +
+//                  "' is not annotated correctly\nFor interception of joinpoint " +
+//                  properties.getJoinPoint() + " expecting one of: " +
+//                  getDescription(paramTypes) + getDescription(contextParamTypes));
+            this.prevalidated = false;
+            return;
          }
          // this happens when target or caller are nulls
          // in this case, this advice should have the smallest rank, since
@@ -301,6 +367,7 @@
       {
          rank = 0;
       }
+      this.prevalidated = true;
    }
    
    private String getDescription(ParameterAnnotationType[] types)
@@ -309,7 +376,7 @@
       for (int i = 1; i < types.length; i++)
       {
          buffer.append("\n          ");
-         buffer.append(types[i]);
+         buffer.append(types[i].rule);
       }
       return buffer.toString();
    }
@@ -396,22 +463,16 @@
       {
          if (rule.isMandatory() && !isSet())
          {
-            if (AspectManager.verbose)
-            {
-               AdviceMethodFactory.adviceMatchingMessage.append("\n[warn] - mandatory parameter annotation ");
-               AdviceMethodFactory.adviceMatchingMessage.append(rule.getAnnotation());
-               AdviceMethodFactory.adviceMatchingMessage.append(" not found on method ");
-               AdviceMethodFactory.adviceMatchingMessage.append(method);
-            }
+            AdviceMethodFactory.appendNewMatchingMessage(method, "mandatory ");
+            AdviceMethodFactory.appendMatchingMessage(rule);
+            AdviceMethodFactory.appendMatchingMessage("-annotated parameter  not found");
+//            throw new ParameterAnnotationRuleException(
+//                  "Mandatory " + rule + "-annotated parameter  not found on " +
+//                  adviceType + " advice method '" + method + "'");
             return false;
          }
          return internalValidate(properties);
       }
-
-      public String toString()
-      {
-         return rule.getAnnotation().toString();
-      }
       
       /**
        * Records that the parameter identified by <code>parameterIndex</code> is of
@@ -481,13 +542,10 @@
       {
          if (this.index != -1)
          {
-            if (AspectManager.verbose)
-            {
-               throw new ParameterAnnotationRuleException("\n[warn] - found more than "
-                     + "one occurence of " + rule.getAnnotation().getName() +
-                     " on parameters of advice" + method);  
-            }
-            throw new ParameterAnnotationRuleException(null);
+            throw new ParameterAnnotationRuleException(
+                  "Found more than one occurence of '"
+                  + rule + "' on parameters of " + adviceType + " advice method '" +
+                  method + "'");
          }
          this.index = parameterIndex;
          rank += rule.getRankGrade();
@@ -506,15 +564,9 @@
                method.getGenericParameterTypes()[index],
                (Type)rule.getAssignableFrom(properties), hierarchy))
          {
-            if (AspectManager.verbose)
-            {
-               AdviceMethodFactory.adviceMatchingMessage.append("\n[warn] - parameter annotated with ");
-               AdviceMethodFactory.adviceMatchingMessage.append(rule.getAnnotation());
-               AdviceMethodFactory.adviceMatchingMessage.append(" is not assignable from expected type ");
-               AdviceMethodFactory.adviceMatchingMessage.append(rule.getAssignableFrom(properties));   
-               AdviceMethodFactory.adviceMatchingMessage.append(" on  method ");
-               AdviceMethodFactory.adviceMatchingMessage.append(method);
-            }
+            AdviceMethodFactory.appendNewMatchingMessage(method, rule);
+            AdviceMethodFactory.appendMatchingMessage("-annotated parameter is not assignable from expected type ");
+            AdviceMethodFactory.appendMatchingMessage(((Class) rule.getAssignableFrom(properties)).getName());
             return false;
          }
          }
@@ -525,15 +577,10 @@
                   method.getParameterTypes()[index],
                   (Type)rule.getAssignableFrom(properties), hierarchy))
             {
-               if (AspectManager.verbose)
-               {
-                  AdviceMethodFactory.adviceMatchingMessage.append("\n[warn] - parameter annotated with ");
-                  AdviceMethodFactory.adviceMatchingMessage.append(rule.getAnnotation());
-                  AdviceMethodFactory.adviceMatchingMessage.append(" is not assignable from expected type ");
-                  AdviceMethodFactory.adviceMatchingMessage.append(rule.getAssignableFrom(properties));   
-                  AdviceMethodFactory.adviceMatchingMessage.append(" on  method ");
-                  AdviceMethodFactory.adviceMatchingMessage.append(method);
-               }
+               AdviceMethodFactory.appendNewMatchingMessage(method, rule);
+               AdviceMethodFactory.appendNewMatchingMessage(method, rule);
+               AdviceMethodFactory.appendMatchingMessage("-annotated parameter is not assignable from expected type ");
+               AdviceMethodFactory.appendMatchingMessage(((Class) rule.getAssignableFrom(properties)).getName());
                return false;
             }
          }
@@ -572,13 +619,13 @@
       private int[] originalIndexValues; // for resetting purposes
       private int indexesLength;
       
-      // maximum size is the total number of parameters
-      public MultipleParameterType(ParameterAnnotationRule rule, int totalParams)
+      // maximum size is the total number of arguments
+      public MultipleParameterType(ParameterAnnotationRule rule, int totalArgs)
       {
          super(rule);
-         this.indexes = new int[totalParams][2];
+         this.indexes = new int[totalArgs][2];
          this.indexesLength = 0;
-         this.originalIndexValues = new int[totalParams];
+         this.originalIndexValues = new int[totalArgs];
       }
       
       public final void setIndex(int index, Annotation annotation)
@@ -586,7 +633,9 @@
       {
          if (indexesLength == indexes.length)
          {
-            throw new ParameterAnnotationRuleException("Found more @Arg annotated parameters than the number of parameters available on joinpoint");
+            throw new RuntimeException(
+                  "Unexpected call to setIndex method during processing of '" +
+                  method + "'");
          }
          indexes[indexesLength][0] = index;
          originalIndexValues[indexesLength] = ((Arg) annotation).index();
@@ -613,6 +662,21 @@
          {
             adviceTypes = method.getParameterTypes();
          }
+         if (indexesLength > 0 && expectedTypes.length == 0)
+         {
+            AdviceMethodFactory.appendNewMatchingMessage(method, "joinpoint has no arguments; unexpected ");
+            AdviceMethodFactory.appendMatchingMessage(this.rule);
+            AdviceMethodFactory.appendMatchingMessage("-annotated parameter found");
+            return false;
+         }
+         if (indexesLength > expectedTypes.length)
+         {
+            AdviceMethodFactory.appendNewMatchingMessage(method, "found more ");
+            AdviceMethodFactory.appendMatchingMessage(this.rule);
+            AdviceMethodFactory.appendMatchingMessage("-annotated parameters than the number of arguments available on the joinpoint");
+            return false;
+         }
+         
          boolean[] taken = new boolean[expectedTypes.length];
          for (int i = 0; i < indexesLength; i++)
          {
@@ -622,23 +686,19 @@
                // negative index
                if (indexes[i][1] < 0)
                {
-                  if (AspectManager.verbose)
-                  {
-                     AdviceMethodFactory.adviceMatchingMessage.append("\n[warn] - Negative joinpoint parameter indexes are not allowed.");
-                  }
-                  return false;
+                  throw new ParameterAnnotationRuleException(
+                        "Negative joinpoint parameter index found at method '" +
+                        method + "'");
                }
                // wrong index
                if (indexes[i][1] >= expectedTypes.length)
                {
-                  if (AspectManager.verbose)
-                  {
-                     AdviceMethodFactory.adviceMatchingMessage.append("\n[warn] - There is no joinpoint parameter with index ");
-                     AdviceMethodFactory.adviceMatchingMessage.append(indexes[i][1]);
-                     AdviceMethodFactory.adviceMatchingMessage.append(", since there are ");
-                     AdviceMethodFactory.adviceMatchingMessage.append(expectedTypes.length == 0? "no": expectedTypes.length);
-                     AdviceMethodFactory.adviceMatchingMessage.append("joinpoint parameters available");
-                  }
+                  AdviceMethodFactory.appendNewMatchingMessage(method,
+                        "there is no joinpoint argument with index ");
+                  AdviceMethodFactory.appendMatchingMessage(indexes[i][1]);
+                  AdviceMethodFactory.appendMatchingMessage(", since there are ");
+                  AdviceMethodFactory.appendMatchingMessage(expectedTypes.length == 0? "no": expectedTypes.length);
+                  AdviceMethodFactory.appendMatchingMessage(" joinpoint arguments available");
                   return false;
                }
                // wrong type
@@ -646,29 +706,24 @@
                      adviceTypes[indexes[i][0]], expectedTypes[indexes[i][1]],
                      hierarchy))
                {
-                  if (AspectManager.verbose)
-                  {
-                     AdviceMethodFactory.adviceMatchingMessage.append("\n[warn] - Advice parameter ");
-                     AdviceMethodFactory.adviceMatchingMessage.append(indexes[i][0]);
-                     AdviceMethodFactory.adviceMatchingMessage.append(", of type ");
-                     AdviceMethodFactory.adviceMatchingMessage.append(adviceTypes[indexes[i][0]]);
-                     AdviceMethodFactory.adviceMatchingMessage.append(", cannot be assigned to the value of joinpoint parameter with index ");
-                     AdviceMethodFactory.adviceMatchingMessage.append(indexes[i][1]);
-                     AdviceMethodFactory.adviceMatchingMessage.append(", whose type is ");
-                     AdviceMethodFactory.adviceMatchingMessage.append(expectedTypes[indexes[i][1]]);
-                  }
+                  AdviceMethodFactory.appendNewMatchingMessage(method, "advice parameter ");
+                  AdviceMethodFactory.appendMatchingMessage(indexes[i][0]);
+                  AdviceMethodFactory.appendMatchingMessage(", of type '");
+                  AdviceMethodFactory.appendMatchingMessage(adviceTypes[indexes[i][0]]);
+                  AdviceMethodFactory.appendMatchingMessage("', cannot be assigned to the value of joinpoint argument with index ");
+                  AdviceMethodFactory.appendMatchingMessage(indexes[i][1] + ", whose type is '");
+                  AdviceMethodFactory.appendMatchingMessage(expectedTypes[indexes[i][1]]);
+                  AdviceMethodFactory.appendMatchingMessage("'");
                   return false;
                }
                // index set more than once
                if (taken[indexes[i][1]])
                {
-                  if (AspectManager.verbose)
-                  {
-                     AdviceMethodFactory.adviceMatchingMessage.append("\n[warn] - Joinpoint parameter index '");
-                     AdviceMethodFactory.adviceMatchingMessage.append(indexes[i][0]);
-                     AdviceMethodFactory.adviceMatchingMessage.append("' cannot be assigned to more than one '@Arg' advice parameter");
-                  }
-                  return false;
+                  throw new ParameterAnnotationRuleException(
+                        "Joinpoint parameter index '" + indexes[i][0] +
+                        "' cannot be assigned to more than one " +  rule +
+                        "-annotated advice parameter (on " + adviceType +
+                        " advice method '" + method + "')");
                }
                // mark index as set
                taken[indexes[i][1]] = true;
@@ -709,17 +764,16 @@
                }
                if (!found)
                {
-                  if (AspectManager.verbose)
+                  AdviceMethodFactory.appendNewMatchingMessage(method,
+                        "not found a match for argument ");
+                  AdviceMethodFactory.appendMatchingMessage(adviceTypes[indexes[i][0]]);
+                  AdviceMethodFactory.appendMatchingMessage("; expected one of types: ");
+                  for (int j = 0; j < expectedTypes.length; j++)
                   {
-                     AdviceMethodFactory.adviceMatchingMessage.append("\n[warn] - not found a match for argument ");
-                     AdviceMethodFactory.adviceMatchingMessage.append(adviceTypes[indexes[i][0]]);
-                     AdviceMethodFactory.adviceMatchingMessage.append(" of ");
-                     AdviceMethodFactory.adviceMatchingMessage.append(method);
-                     AdviceMethodFactory.adviceMatchingMessage.append("\n[warn]   expected one of types:");
-                     for (int j = 0; j < expectedTypes.length; j++)
+                     if (!taken[j])
                      {
-                        AdviceMethodFactory.adviceMatchingMessage.append(expectedTypes[j]);
-                        AdviceMethodFactory.adviceMatchingMessage.append(" ");
+                        AdviceMethodFactory.appendMatchingMessage(expectedTypes[j]);
+                        AdviceMethodFactory.appendMatchingMessage(" ");
                      }
                   }
                   return false;

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/ParameterAnnotationRule.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/ParameterAnnotationRule.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/ParameterAnnotationRule.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -232,4 +232,9 @@
    {
       return singleEnforced;
    }
+   
+   public String toString()
+   {
+      return "@" + annotation.getSimpleName();
+   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/ParameterAnnotationRuleException.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/ParameterAnnotationRuleException.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/advice/annotation/ParameterAnnotationRuleException.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -1,31 +1,24 @@
 package org.jboss.aop.advice.annotation;
 
-import org.jboss.aop.AspectManager;
+import org.jboss.aop.advice.InvalidAdviceException;
 
 /**
  * Exception thrown when an advice method does not comply with a parameter rule.  
  * 
  * @author Flavia Rainone
  */
-class ParameterAnnotationRuleException extends Exception
+class ParameterAnnotationRuleException extends InvalidAdviceException
 {
-   private static final long serialVersionUID = 1L;
-   
+   private static final long serialVersionUID = 9190978361997650638L;
+
    /**
     * Constructor.
     * <p>
-    * Adds <code>errorMessage</code> to {@link AdviceMethodFactory#adviceMatchingMessage}
-    * on verbose mode.
-    * 
     * @param message a message describing why the parameter annotation rule could
     *                not be applied to an advice method
     */
    public ParameterAnnotationRuleException(String message)
    {
       super(message);
-      if (AspectManager.verbose)
-      {
-         AdviceMethodFactory.adviceMatchingMessage.append(message);
-      }
    }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByConJoinPointGenerator.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -68,14 +68,14 @@
       }
    }
 
-   private WeakReference returnType;
+   private WeakReference<Class<?>> returnType;
 
    public ConByConJoinPointGenerator(GeneratedClassAdvisor advisor, JoinPointInfo info)
    {
       super(advisor, info, JoinPointParameters.CALLER_ARGS,
             ((ConByConInfo) info).getConstructor().getParameterTypes().length,
             false);
-      returnType = new WeakReference(((ConByConInfo)info).getCalledClass());
+      returnType = new WeakReference<Class<?>>(((ConByConInfo)info).getCalledClass());
    }
 
    protected void initialiseJoinPointNames(JoinPointInfo info)
@@ -116,7 +116,7 @@
 
    protected Class getReturnClassType()
    {
-      return (Class)returnType.get();
+      return returnType.get();
    }
 
    protected AdviceMethodProperties getAdviceMethodProperties(JoinPointBean joinPoint, AdviceSetup setup)
@@ -124,6 +124,7 @@
       ConstructorCallByConstructor call = (ConstructorCallByConstructor) joinPoint;
       Constructor ctor = call.getConstructor();
       AdviceMethodProperties properties = new AdviceMethodProperties(
+            joinPoint,
             setup.getAspectClass(),
             setup.getAdviceName(),
             JOINPOINT_TYPE,

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByMethodJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByMethodJoinPointGenerator.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConByMethodJoinPointGenerator.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -68,7 +68,7 @@
    }
    
    private boolean hasCallingObject;
-   private WeakReference returnType;
+   private WeakReference<Class<?>> returnType;
 
    public ConByMethodJoinPointGenerator(GeneratedClassAdvisor advisor, JoinPointInfo info)
    {
@@ -76,7 +76,7 @@
             ((ConByMethodInfo) info).getConstructor().getParameterTypes().length,
             false);
       hasCallingObject = !java.lang.reflect.Modifier.isStatic(((ConByMethodInfo)info).getCallingMethod().getModifiers());
-      returnType = new WeakReference(((ConByMethodInfo)info).getCalledClass());
+      returnType = new WeakReference<Class<?>>(((ConByMethodInfo)info).getCalledClass());
    }
    
    private static JoinPointParameters getParameters(ConByMethodInfo info)
@@ -125,7 +125,7 @@
 
    protected Class getReturnClassType()
    {
-      return (Class)returnType.get();
+      return returnType.get();
    }
 
    protected AdviceMethodProperties getAdviceMethodProperties(JoinPointBean joinPoint, AdviceSetup setup)
@@ -133,6 +133,7 @@
       ConstructorCallByMethod call = (ConstructorCallByMethod) joinPoint;
       Constructor ctor = call.getConstructor();
       AdviceMethodProperties properties = new AdviceMethodProperties(
+               joinPoint,
                setup.getAspectClass(),
                setup.getAdviceName(),
                JOINPOINT_TYPE,

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionJoinPointGenerator.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructionJoinPointGenerator.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -113,6 +113,7 @@
    {
       Constructor ctor = ((Construction)joinPoint).getConstructor();
       return new AdviceMethodProperties(
+            joinPoint,
             setup.getAspectClass(),
             setup.getAdviceName(),
             JOINPOINT_TYPE,

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorJoinPointGenerator.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/ConstructorJoinPointGenerator.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -68,14 +68,14 @@
       }
    }
 
-   WeakReference returnType;
+   WeakReference<Class<?>> returnType;
 
    public ConstructorJoinPointGenerator(GeneratedClassAdvisor advisor, JoinPointInfo info)
    {
       super(advisor, info, JoinPointParameters.ONLY_ARGS,
             ((ConstructorInfo) info).getConstructor().getParameterTypes().length,
             false);
-      returnType = new WeakReference(((ConstructorInfo)info).getConstructor().getDeclaringClass());
+      returnType = new WeakReference<Class<?>>(((ConstructorInfo)info).getConstructor().getDeclaringClass());
    }
 
 
@@ -109,13 +109,14 @@
 
    protected Class getReturnClassType()
    {
-      return (Class)returnType.get();
+      return returnType.get();
    }
 
    protected AdviceMethodProperties getAdviceMethodProperties(JoinPointBean joinPoint, AdviceSetup setup)
    {
       Constructor ctor = ((ConstructorExecution)joinPoint).getConstructor();
       return new AdviceMethodProperties(
+            joinPoint,
             setup.getAspectClass(),
             setup.getAdviceName(),
             JOINPOINT_TYPE,

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldJoinPointGenerator.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/FieldJoinPointGenerator.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -88,8 +88,8 @@
       if (((FieldInfo)info).isRead())
       {
          read = true;
-         returnClassType = new WeakReference(((FieldInfo)info).getField().getType());
-         returnType = new WeakReference(((FieldInfo)info).getField().getGenericType());
+         returnClassType = new WeakReference<Class<?>>(((FieldInfo)info).getField().getType());
+         returnType = new WeakReference<Type>(((FieldInfo)info).getField().getGenericType());
       }
       hasTargetObject = !Modifier.isStatic(((FieldInfo)info).getField().getModifiers());
    }
@@ -137,16 +137,17 @@
       FieldAccess fieldAccess = (FieldAccess)joinPoint;
       Field field = fieldAccess.getField();
       return new AdviceMethodProperties(
-               setup.getAspectClass(),
-               setup.getAdviceName(),
-               JOINPOINT_TYPE,
-               (fieldAccess.isRead()) ? READ_INVOCATION_TYPE : WRITE_INVOCATION_TYPE,
-               (fieldAccess.isRead()) ? field.getGenericType() : Void.TYPE,
-               (fieldAccess.isRead()) ? new Type[] {} : new Type[] {field.getGenericType()},
-               (fieldAccess.isRead()) ? new Class[] {} : new Class[] {field.getType()},
-               null,
-               field.getDeclaringClass(),
-               hasTargetObject());
+            joinPoint,
+            setup.getAspectClass(),
+            setup.getAdviceName(),
+            JOINPOINT_TYPE,
+            (fieldAccess.isRead()) ? READ_INVOCATION_TYPE : WRITE_INVOCATION_TYPE,
+            (fieldAccess.isRead()) ? field.getGenericType() : Void.TYPE,
+            (fieldAccess.isRead()) ? new Type[] {} : new Type[] {field.getGenericType()},
+            (fieldAccess.isRead()) ? new Class[] {} : new Class[] {field.getType()},
+             null,
+             field.getDeclaringClass(),
+             hasTargetObject());
    }
 
 //   protected CtClass[] getJoinpointParameters() throws NotFoundException

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/JoinPointGenerator.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -52,8 +52,9 @@
 import org.jboss.aop.advice.AdviceMethodProperties;
 import org.jboss.aop.advice.AdviceType;
 import org.jboss.aop.advice.GeneratedAdvisorInterceptor;
+import org.jboss.aop.advice.InvalidAdviceException;
+import org.jboss.aop.advice.NoMatchingAdviceException;
 import org.jboss.aop.advice.Scope;
-import org.jboss.aop.advice.annotation.AdviceMethodFactory;
 import org.jboss.aop.joinpoint.Invocation;
 import org.jboss.aop.joinpoint.JoinPointBean;
 import org.jboss.aop.pointcut.ast.ASTCFlowExpression;
@@ -290,10 +291,16 @@
          initialised = true;
          return obj;
       }
+      catch (NoMatchingAdviceException e)
+      {
+         throw e;
+      }
+      catch (InvalidAdviceException e)
+      {
+         throw e;
+      }
       catch (Throwable e)
       {
-         e.printStackTrace();
-         // AutoGenerated
          throw new RuntimeException("Error generating joinpoint class for joinpoint " + info, e);
       }
    }
@@ -1308,6 +1315,7 @@
       Class aspectClass;
       CtClass aspectCtClass;
       String adviceName;
+      Class thrownType;
       Scope scope;
       String registeredName;
       String cflowString;
@@ -1373,7 +1381,7 @@
       String getAspectFieldName()
       {
          StringBuffer name = new StringBuffer();
-         name.append(type.getDescription());
+         name.append(type.getName());
          name.append(index + 1);
          return name.toString();
       }
@@ -1499,39 +1507,30 @@
             
             
             properties = type.getFactory().findAdviceMethod(properties);
-            if (properties != null)
-            {
-               allSetups[i].setAdviceMethodProperties(properties);
-               aspects[index].add(allSetups[i]);
+            allSetups[i].setAdviceMethodProperties(properties);
+            aspects[index].add(allSetups[i]);
                
-               if (AdviceType.AROUND == type)
+            if (AdviceType.AROUND == type)
+            {
+               hasAroundAdvices = true;
+               if (!hasArgsAroundAdvices)
                {
-                  hasAroundAdvices = true;
-                  if (!hasArgsAroundAdvices)
+                  if (!hasInvocation(properties))
                   {
-                     if (!hasInvocation(properties))
-                     {
-                        hasArgsAroundAdvices = true;
-                     }
+                     hasArgsAroundAdvices = true;
                   }
-
                }
-               else if (allSetups[i].requiresInstanceAdvisor())
+
+            }
+            else if (allSetups[i].requiresInstanceAdvisor())
+            {
+               //We are not an around advice and we require an instance advisor
+               if (lightweightAdvicesRequiringInstanceAdvisor == null)
                {
-                  //We are not an around advice and we require an instance advisor
-                  if (lightweightAdvicesRequiringInstanceAdvisor == null)
-                  {
-                     lightweightAdvicesRequiringInstanceAdvisor = new ArrayList<AdviceSetup>();
-                  }
-                  lightweightAdvicesRequiringInstanceAdvisor.add(allSetups[i]);
+                  lightweightAdvicesRequiringInstanceAdvisor = new ArrayList<AdviceSetup>();
                }
+               lightweightAdvicesRequiringInstanceAdvisor.add(allSetups[i]);
             }
-            else if (AspectManager.verbose)
-            {
-               logger.warn("No matching advice called '" + allSetups[i].getAdviceName() + 
-                     "' could be found in " + allSetups[i].getAspectClass().getName() +
-                     " for joinpoint " + info + ":" + AdviceMethodFactory.getAdviceMatchingMessage());
-            }
          }
          
          this.setups = new AdviceSetup[length][];

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByConJoinPointGenerator.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -64,7 +64,7 @@
    }
 
    boolean hasTargetObject;
-   WeakReference returnType;
+   WeakReference<Class<?>> returnType;
    
    public MethodByConJoinPointGenerator(GeneratedClassAdvisor advisor, JoinPointInfo info)
    {
@@ -72,7 +72,7 @@
             ((MethodByConInfo) info).getMethod().getParameterTypes().length, false);
       if (!((MethodByConInfo)info).getMethod().getReturnType().equals(Void.TYPE))
       {
-         returnType = new WeakReference(((MethodByConInfo)info).getMethod().getReturnType());         
+         returnType = new WeakReference<Class<?>>(((MethodByConInfo)info).getMethod().getReturnType());         
       }
       hasTargetObject = !java.lang.reflect.Modifier.isStatic(((MethodByConInfo)info).getMethod().getModifiers());
    }
@@ -127,25 +127,26 @@
       {
          return null;
       }
-      return (Class)returnType.get();
+      return returnType.get();
    }
 
    protected AdviceMethodProperties getAdviceMethodProperties(JoinPointBean joinPoint, AdviceSetup setup)
    {
       Method method = ((MethodCallByConstructor)joinPoint).getMethod();
       return new AdviceMethodProperties(
-               setup.getAspectClass(),
-               setup.getAdviceName(),
-               JOINPOINT_TYPE,
-               INVOCATION_TYPE,
-               method.getGenericReturnType(),
-               method.getGenericParameterTypes(),
-               method.getParameterTypes(),
-               method.getGenericExceptionTypes(),
-               method.getDeclaringClass(),
-               hasTargetObject(),
-               ((MethodCallByConstructor) joinPoint).getCallingClass(),
-               hasCallingObject());
+            joinPoint,
+            setup.getAspectClass(),
+            setup.getAdviceName(),
+            JOINPOINT_TYPE,
+            INVOCATION_TYPE,
+            method.getGenericReturnType(),
+            method.getGenericParameterTypes(),
+            method.getParameterTypes(),
+            method.getGenericExceptionTypes(),
+            method.getDeclaringClass(),
+            hasTargetObject(),
+            ((MethodCallByConstructor) joinPoint).getCallingClass(),
+            hasCallingObject());
    }
 
    protected boolean isCaller()

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByMethodJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByMethodJoinPointGenerator.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodByMethodJoinPointGenerator.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -62,7 +62,7 @@
       }
    }
 
-   WeakReference returnType;
+   WeakReference<Class<?>> returnType;
    boolean hasCallingObject;
    boolean hasTargetObject;
    
@@ -73,7 +73,7 @@
 
       if (!((MethodByMethodInfo)info).getMethod().getReturnType().equals(Void.TYPE))
       {
-         returnType = new WeakReference(((MethodByMethodInfo)info).getMethod().getReturnType());         
+         returnType = new WeakReference<Class<?>>(((MethodByMethodInfo)info).getMethod().getReturnType());         
       }
       hasCallingObject = !java.lang.reflect.Modifier.isStatic(((MethodByMethodInfo)info).getCallingMethod().getModifiers());
       hasTargetObject = !java.lang.reflect.Modifier.isStatic(((MethodByMethodInfo)info).getMethod().getModifiers());
@@ -136,25 +136,26 @@
       {
          return null;
       }
-      return (Class)returnType.get();
+      return returnType.get();
    }
 
    protected AdviceMethodProperties getAdviceMethodProperties(JoinPointBean joinPoint, AdviceSetup setup)
    {
       Method method = ((MethodCallByMethod)joinPoint).getMethod();
       return new AdviceMethodProperties(
-               setup.getAspectClass(),
-               setup.getAdviceName(),
-               JOINPOINT_TYPE,
-               INVOCATION_TYPE,
-               method.getGenericReturnType(),
-               method.getGenericParameterTypes(),
-               method.getParameterTypes(),
-               method.getGenericExceptionTypes(),
-               method.getDeclaringClass(),
-               hasTargetObject(),
-               ((MethodCallByMethod) joinPoint).getCallingClass(),
-               hasCallingObject());
+            joinPoint,
+            setup.getAspectClass(),
+            setup.getAdviceName(),
+            JOINPOINT_TYPE,
+            INVOCATION_TYPE,
+            method.getGenericReturnType(),
+            method.getGenericParameterTypes(),
+            method.getParameterTypes(),
+            method.getGenericExceptionTypes(),
+            method.getDeclaringClass(),
+            hasTargetObject(),
+            ((MethodCallByMethod) joinPoint).getCallingClass(),
+            hasCallingObject());
    }
 
    protected boolean isCaller()

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodJoinPointGenerator.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodJoinPointGenerator.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/instrument/MethodJoinPointGenerator.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -66,7 +66,7 @@
       }
    }
    
-   WeakReference returnType;
+   WeakReference<Class<?>> returnType;
    boolean hasTargetObject;
 
    public MethodJoinPointGenerator(GeneratedClassAdvisor advisor, MethodInfo info)
@@ -75,7 +75,7 @@
             info.getMethod().getParameterTypes().length, false);
       if (!info.getUnadvisedMethod().getReturnType().equals(Void.TYPE))
       {
-         returnType = new WeakReference(info.getUnadvisedMethod().getReturnType());
+         returnType = new WeakReference<Class<?>>(info.getUnadvisedMethod().getReturnType());
       }
       hasTargetObject = !Modifier.isStatic(info.getMethod().getModifiers());
    }
@@ -122,23 +122,24 @@
       {
          return null;
       }
-      return (Class)returnType.get();
+      return returnType.get();
    }
 
    protected AdviceMethodProperties getAdviceMethodProperties(JoinPointBean joinPoint, AdviceSetup setup)
    {
       Method method = ((MethodExecution)joinPoint).getMethod();
       return new AdviceMethodProperties(
-               setup.getAspectClass(), 
-               setup.getAdviceName(), 
-               JOINPOINT_TYPE, 
-               INVOCATION_TYPE, 
-               method.getGenericReturnType(), 
-               method.getGenericParameterTypes(),
-               method.getParameterTypes(),
-               method.getGenericExceptionTypes(),
-               method.getDeclaringClass(),
-               hasTargetObject());
+            joinPoint,
+            setup.getAspectClass(), 
+            setup.getAdviceName(), 
+            JOINPOINT_TYPE, 
+            INVOCATION_TYPE, 
+            method.getGenericReturnType(), 
+            method.getGenericParameterTypes(),
+            method.getParameterTypes(),
+            method.getGenericExceptionTypes(),
+            method.getDeclaringClass(),
+            hasTargetObject());
    }
    
 

Modified: projects/aop/trunk/aop/src/resources/test/beforeafter/jboss-aop.xml
===================================================================
--- projects/aop/trunk/aop/src/resources/test/beforeafter/jboss-aop.xml	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/resources/test/beforeafter/jboss-aop.xml	2007-08-13 04:23:22 UTC (rev 64552)
@@ -24,13 +24,65 @@
       <before name="before" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
       <after name="after" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
       <throwing name="throwing" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
-      <throwing name="throwingzzz" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
    </stack>
 
-   <bind pointcut="execution(org.jboss.test.aop.beforeafter.POJO->new(..)) OR execution(* org.jboss.test.aop.beforeafter.POJO->method*(..)) OR field(!static * org.jboss.test.aop.beforeafter.POJO->*)">
+   <bind pointcut="(execution(org.jboss.test.aop.beforeafter.POJO->new(boolean, int, long, java.lang.String)) AND ! execution(org.jboss.test.aop.beforeafter.POJO->new())) OR (execution(* org.jboss.test.aop.beforeafter.POJO->method*(..)) AND !execution(* *->method*(boolean)) AND !execution(int *->*(..)) AND !execution(* *->*(*SubValue,int))) OR (get(!static * org.jboss.test.aop.beforeafter.POJO->*) AND !get(int *->*) AND !field(*Value *->*))">
       <stack-ref name="argsStack"/>
    </bind>
    
+   <bind pointcut="set(!static * org.jboss.test.aop.beforeafter.POJO->*) AND !field(*Value *->*)">
+      <before name="before" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+      <throwing name="throwing" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(int org.jboss.test.aop.beforeafter.POJO->method*(..)) OR execution(* org.jboss.test.aop.beforeafter.POJO->method*(*SubValue, int))">
+      <throwing name="throwing" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+   
+   <bind pointcut="get(int org.jboss.test.aop.beforeafter.POJO->*) OR field(*Value org.jboss.test.aop.beforeafter.POJO->*) OR execution(* org.jboss.test.aop.beforeafter.POJO->method*(*SubValue, int))">
+      <before name="before" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+
+   <bind pointcut="get(!static *Value org.jboss.test.aop.beforeafter.POJO->*)">
+      <after name="after" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(org.jboss.test.aop.beforeafter.InvalidPOJO->new())">
+      <before name="before" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(org.jboss.test.aop.beforeafter.InvalidPOJO->new(short))">
+      <after name="after" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(org.jboss.test.aop.beforeafter.InvalidPOJO->new(long))">
+      <throwing name="throwing" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(void org.jboss.test.aop.beforeafter.InvalidPOJO->methodBefore(..))">
+      <before name="before" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(void org.jboss.test.aop.beforeafter.InvalidPOJO->methodAfter(..))">
+      <after name="after" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+
+   <bind pointcut="all(org.jboss.test.aop.beforeafter.InvalidAdviceNamePOJO)">
+      <throwing name="throwingzzz" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+   
+   <bind pointcut="field(int org.jboss.test.aop.beforeafter.InvalidPOJO->i)">
+      <after name="after" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+   
+   <bind pointcut="field(!static *SuperValue org.jboss.test.aop.beforeafter.InvalidPOJO->*)">
+      <throwing name="throwing" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+
+   <bind pointcut="set(!static *Value org.jboss.test.aop.beforeafter.InvalidPOJO->*)">
+      <after name="after" aspect="org.jboss.test.aop.beforeafter.ArgsAspect"/>
+   </bind>
+
    <bind pointcut="execution(org.jboss.test.aop.beforeafter.POJO->new($instanceof{org.jboss.test.aop.beforeafter.SuperValue}, int)) OR execution(* org.jboss.test.aop.beforeafter.POJO->method($instanceof{org.jboss.test.aop.beforeafter.SuperValue}, int))">
       <before name="before" aspect="org.jboss.test.aop.beforeafter.GeneralAspect"/>
       <after name="after" aspect="org.jboss.test.aop.beforeafter.GeneralAspect"/>

Modified: projects/aop/trunk/aop/src/resources/test/beforeafterArgs/jboss-aop.xml
===================================================================
--- projects/aop/trunk/aop/src/resources/test/beforeafterArgs/jboss-aop.xml	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/resources/test/beforeafterArgs/jboss-aop.xml	2007-08-13 04:23:22 UTC (rev 64552)
@@ -12,107 +12,134 @@
 		<before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
 		<before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
 		<before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <around name="around4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <around name="around5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->bunch1(..))">
       <around name="around1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <around name="around4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <around name="around5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
    
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch2(..))">
       <before name="before1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-		<before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
 		<before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
 		<before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <around name="around6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->bunch2(..))">
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
 
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch3(..))">
       <before name="before1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-		<before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
 		<before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
 		<before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->bunch3(..))">
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
 		<after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
 
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch4(..))">
       <before name="before1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-		<before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
 		<before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
 		<before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <around name="around6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->bunch4(..))">
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+   </bind>
 
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch5(..))">
       <before name="before1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-		<before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
 		<before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
 		<before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
    
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->bunch5(..))">
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+   </bind>
+   
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch6(..))">
       <around name="around6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->bunch6(..))">
       <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
    
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch7(..))">
       <around name="around6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
    
-   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch8(..))">
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->bunch7(..))">
       <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch8(..))">
       <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
    
-   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch9(..))">
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->bunch8(..))">
       <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+   </bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->bunch9(..))">
       <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
-      <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
       <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
    </bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->bunch9(..))">
+      <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+      <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspect"/>
+   </bind>
 
  	<aspect class="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces" scope="PER_VM"/>
    
@@ -120,26 +147,29 @@
       <before name="before1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
-      <before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
-      <before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <around name="around1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
-      <around name="around4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
-      <around name="around5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
-      <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
-      <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <throwing name="throwing1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
-      <throwing name="throwing4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
-      <throwing name="throwing5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
+   </bind>
+   
+   <bind pointcut="execution(void org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->*(org.jboss.test.aop.beforeafterArgs.Interface))">
+      <before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
+      <before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
+      <around name="around4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
+      <around name="around5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
+      <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
+      <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
+      <throwing name="throwing4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
+      <throwing name="throwing5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
       <finally name="finally5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInterfaces"/>
    </bind>
@@ -148,14 +178,17 @@
    
    <bind pointcut="execution(void org.jboss.test.aop.beforeafterArgs.ArgsPOJO->*(java.lang.String,java.util.Collection))">
       <before name="before1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
+      <around name="around1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
+      <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
+      <throwing name="throwing1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
+   </bind>
+   
+   <bind pointcut="execution(void org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->*(java.lang.String,java.util.Collection))">
       <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
-      <around name="around1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
       <around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
-      <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
-      <throwing name="throwing1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
       <throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
-      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
       <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectInvertedArgs"/>
    </bind>
    
@@ -167,38 +200,41 @@
       <before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <before name="before6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
-      <before name="before7" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
-      <before name="before8" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <around name="around1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <around name="around4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
-      <around name="around5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <around name="around6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
-      <around name="around7" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
-      <around name="around8" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
-      <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
-      <after name="after7" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
-      <after name="after8" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <throwing name="throwing1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
-      <throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <throwing name="throwing4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <throwing name="throwing5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <throwing name="throwing6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
-      <throwing name="throwing7" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
-      <throwing name="throwing8" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
+      <finally name="finally6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
+   </bind>
+   
+   <bind pointcut="execution(void org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->*(java.util.List))">
+      <before name="before7" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
+      <before name="before8" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
+      <around name="around5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
+      <around name="around7" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
+      <around name="around8" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
+      <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
+      <after name="after7" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
+      <after name="after8" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
+      <throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
+      <throwing name="throwing7" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
+      <throwing name="throwing8" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <finally name="finally5" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
-      <finally name="finally6" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <finally name="finally7" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
       <finally name="finally8" aspect="org.jboss.test.aop.beforeafterArgs.ArgAspectGenerics"/>
    </bind>
@@ -210,40 +246,52 @@
 		<before name="before1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
       <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 		<before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+   </bind>
+   
+   <bind pointcut="field(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->field1)">
 		<before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 		<before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
    </bind>
    
    <bind pointcut="set(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->field2)">
       <before name="before6" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
-      <before name="XXX6" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
       <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
-      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
       <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
    </bind>
+   
+   <bind pointcut="set(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->field2)">
+      <before name="XXX6" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+   </bind>
 
 	<bind pointcut="field(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->field3)">
     	<around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 		<after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
-        <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 		<after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
-		<after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+   </bind>
+   
+   <bind pointcut="field(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->field3)">
+    	<after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 		<after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
    </bind>
 
 	<bind pointcut="field(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->field4)">
 		<before name="before1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
-        <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 		<before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
-		<before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
-		<before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
     	<around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 		<after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
-        <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 		<after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+   </bind>
+   
+   <bind pointcut="field(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->field4)">
+		<before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+		<before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 		<after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 		<after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
-      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
       <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
    </bind>
 
@@ -258,9 +306,12 @@
 	   <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
  	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
       <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
-      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 	</bind>
    
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->method2(..))">
+	   <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	</bind>
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method3(..))">
 	   <before name="before7" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 	   <around name="around1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
@@ -272,16 +323,22 @@
 	   <around name="around1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 	   <after name="after7" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
       <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
-      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 	</bind>
 
-	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method5(..))">
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->method4(..))">
+	   <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	</bind>
+	
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method5(..))">
 	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 	</bind>
 	
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsPOJO->method6(..))">
 	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
       <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	</bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->method6(..))">
       <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 	</bind>
    
@@ -298,6 +355,9 @@
       <after name="after8" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 	   <throwing name="throwing" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
       <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
+	</bind>
+   
+   <bind pointcut="call(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->method6(..)) AND withincode(* org.jboss.test.aop.beforeafterArgs.ArgsInvalidPOJO->method8(..))">
       <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ArgsAspect"/>
 	</bind>
    
@@ -306,40 +366,108 @@
 
    <stack name="CallerAdvices">
       <before name="before1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <throwing name="throwing1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+	</stack>
+	
+   <bind pointcut="call(org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->new(int,..))">
+		<stack-ref name="CallerAdvices"/>
       <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+   </bind>
+   
+   <bind pointcut="call(org.jboss.test.aop.beforeafterArgs.TargetCallerInvalidPOJO2->new(int,..))">
       <before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
-      <around name="around1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+   </bind>
+   
+   <bind pointcut="call(void org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->*()) AND !call(* *->method*_())">
+		<stack-ref name="CallerAdvices"/>
+      <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <around name="around4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
-      <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
-      <throwing name="throwing1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
-      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
       <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
-	</stack>
-	
-   <bind pointcut="call(org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->new(int,..))">
-		<stack-ref name="CallerAdvices"/>
    </bind>
    
-   <bind pointcut="call(void org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->*())">
-		<stack-ref name="CallerAdvices"/>
+   <bind pointcut="call(void org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->method*_())">
+      <stack-ref name="CallerAdvices"/>
+      <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
    </bind>
    
+   <bind pointcut="call(void org.jboss.test.aop.beforeafterArgs.TargetCallerInvalidPOJO2->method*_())">
+      <before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+   </bind>
+   
    <bind pointcut="execution(public void org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO->method1())">
-      <stack-ref name="CallerAdvices"/>      
+      <stack-ref name="CallerAdvices"/>
    </bind>
    
+   <bind pointcut="execution(public void org.jboss.test.aop.beforeafterArgs.TargetCallerInvalidPOJO->method1())">
+      <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+   </bind>
+   
    <bind pointcut="execution(public void org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO->method3())">
-      <stack-ref name="CallerAdvices"/>      
+      <stack-ref name="CallerAdvices"/>
    </bind>
+   
+   <bind pointcut="execution(public void org.jboss.test.aop.beforeafterArgs.TargetCallerInvalidPOJO->method3())">
+      <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <around name="around4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+      <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.CallerAspect"/>
+   </bind>
 
    <!-- @JoinPoint test -->
 	<aspect class="org.jboss.test.aop.beforeafterArgs.JoinPointAspect" scope="PER_VM"/>
@@ -347,27 +475,39 @@
 	<bind pointcut="field(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->number)">
 		<before name="before1" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
 		<after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+   </bind>
+
+   <bind pointcut="field(* org.jboss.test.aop.beforeafterArgs.JoinPointInvalidPOJO->number)">
       <before name="before9" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
-
+   
 	<bind pointcut="set(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->text)">
 		<before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+   </bind>
+
+   <bind pointcut="set(* org.jboss.test.aop.beforeafterArgs.JoinPointInvalidPOJO->text)">
 		<after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
-      <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
       <after name="after8" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
-
+   
 	<bind pointcut="get(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->text)">
-		<before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
 		<after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
 	
+   <bind pointcut="get(* org.jboss.test.aop.beforeafterArgs.JoinPointInvalidPOJO->text)">
+		<before name="before5" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+   </bind>
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->method1(..))">
     	<before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
 		<after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
-      <finally name="finally9" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
 
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointInvalidPOJO->method1(..))">
+=      <finally name="finally9" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+   </bind>
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->method2(..))">
     	<before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
 		<after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
@@ -377,10 +517,13 @@
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->method3(..))">
      	<before name="before4" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
 		<after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
-   	<throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
       <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
 
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointInvalidPOJO->method3(..))">
+   	<throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+   </bind>
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->method4(..))">
    	<throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
       <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
@@ -388,9 +531,12 @@
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->method5(..))">
    	<throwing name="throwing4" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+   </bind>
+
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointInvalidPOJO->method5(..))">
       <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
-
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.JoinPointPOJO->method6(..))">
    	<throwing name="throwing5" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
@@ -407,6 +553,9 @@
       <after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
       <throwing name="throwing7" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
       <finally name="finally6" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+   </bind>
+   
+   <bind pointcut="call(org.jboss.test.aop.beforeafterArgs.JoinPointInvalidPOJO->new(boolean)) AND withincode(public void org.jboss.test.aop.beforeafterArgs.JoinPointInvalidPOJO->*(..))">
       <throwing name="throwing9" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
       <throwing name="throwing10" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
@@ -416,6 +565,9 @@
       <after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
       <throwing name="throwing8" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
       <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
+   </bind>
+   
+   <bind pointcut="call(* org.jboss.test.aop.beforeafterArgs.JoinPointInvalidPOJO->*Method(boolean)) AND withincode(org.jboss.test.aop.beforeafterArgs.JoinPointInvalidPOJO->new(..))">
       <throwing name="throwing9" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
       <throwing name="throwing10" aspect="org.jboss.test.aop.beforeafterArgs.JoinPointAspect"/>
    </bind>
@@ -445,25 +597,32 @@
 	<aspect class="org.jboss.test.aop.beforeafterArgs.ReturnAspect" scope="PER_VM"/>
 	
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method1(..))">
-		<before name="before" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
-		<around name="around1" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
       <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 	
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnInvalidPOJO->method1(..))">
+		<before name="before" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+	</bind>
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method2(..))">
-		<around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
-      <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnInvalidPOJO->method2(..))">
+		<around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+	</bind>
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method3(..))">
-		<before name="before" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
       <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
       <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnInvalidPOJO->method3(..))">
+		<before name="before" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+	</bind>
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method4(..))">
 		<around name="around4" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after4" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
@@ -473,15 +632,21 @@
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method5(..))">
 		<around name="around5" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after5" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+	</bind>
+
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnInvalidPOJO->method5(..))">
       <finally name="finally5" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
-
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method6(..))">
-		<around name="around6" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after6" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
       <finally name="finally6" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
 
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnInvalidPOJO->method6(..))">
+		<around name="around6" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+	</bind>
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method7(..))">
 		<around name="around7" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after7" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
@@ -489,24 +654,33 @@
 	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method8(..))">
-		<before name="before" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<around name="around8" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after8" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
       <finally name="finally8" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnInvalidPOJO->method8(..))">
+		<before name="before" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method9(..))">
+	</bind>
+
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnInvalidPOJO->method9(..))">
 		<around name="around9" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<after name="after9" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
       <finally name="finally9" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
-	</bind>
-
+  	</bind>
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method10(..))">
-		<before name="before" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 		<around name="around10" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
-		<after name="after10" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
       <finally name="finally10" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
 	</bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnInvalidPOJO->method10(..))">
+		<before name="before" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+		<after name="after10" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
+	</bind>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ReturnPOJO->method11(..))">
 		<around name="around11" aspect="org.jboss.test.aop.beforeafterArgs.ReturnAspect"/>
@@ -532,87 +706,158 @@
    <stack name="TargetAdvices">
       <before name="before1" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
       <before name="before2" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
-      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
       <around name="around1" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
       <around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
-      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
       <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
       <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
       <throwing name="throwing1" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
       <throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
-      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
       <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
       <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
-      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
 	</stack>
 	
    <bind pointcut="execution(org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO->new(int,..))">
 		<stack-ref name="TargetAdvices"/>
    </bind>
 
+   <bind pointcut="execution(org.jboss.test.aop.beforeafterArgs.TargetCallerInvalidPOJO->new(int,..))">
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+   </bind>
+   
    <bind pointcut="field(int org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO->*)">
 		<stack-ref name="TargetAdvices"/>
    </bind>
 	
+   <bind pointcut="field(int org.jboss.test.aop.beforeafterArgs.TargetCallerInvalidPOJO->*)">
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+   </bind>
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO->method1(..))">
 		<stack-ref name="TargetAdvices"/>
    </bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.TargetCallerInvalidPOJO->method1(..))">
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+   </bind>
 
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO->method2(..))">
 		<stack-ref name="TargetAdvices"/>
    </bind>
 
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.TargetCallerInvalidPOJO->method2(..))">
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+   </bind>
+   
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO->method3(..))">
 		<stack-ref name="TargetAdvices"/>
    </bind>
    
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.TargetCallerInvalidPOJO->method3(..))">
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+   </bind>
+   
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO->method4(..))">
 		<stack-ref name="TargetAdvices"/>
    </bind>
    
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.TargetCallerInvalidPOJO->method4(..))">
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+   </bind>
+   
    <bind pointcut="call(org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->new(int,..))">
 		<stack-ref name="TargetAdvices"/>
    </bind>
    
-   <bind pointcut="call(void org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->*())">
+   <bind pointcut="call(org.jboss.test.aop.beforeafterArgs.TargetCallerInvalidPOJO2->new(int,..))">
 		<stack-ref name="TargetAdvices"/>
    </bind>
+   
+   <bind pointcut="call(void org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->*()) AND !call(* *->method*_())">
+		<stack-ref name="TargetAdvices"/>
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+   </bind>
+   
+   <bind pointcut="call(void org.jboss.test.aop.beforeafterArgs.TargetCallerPOJO2->method*_())">
+		<stack-ref name="TargetAdvices"/>
+   </bind>
 
+   <bind pointcut="call(void org.jboss.test.aop.beforeafterArgs.TargetCallerInvalidPOJO2->method*_())">
+      <before name="before3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+      <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.TargetAspect"/>
+   </bind>
+   
    <!-- @Thrown test -->
 	<aspect class="org.jboss.test.aop.beforeafterArgs.ThrownAspect" scope="PER_VM"/>
 
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method1(..))">
-		<throwing name="throwing1" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
       <finally name="finally1" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
 
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownInvalidPOJO->method1(..))">
+		<throwing name="throwing1" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
+	</bind>
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method2(..))">
 		<throwing name="throwing2" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
       <finally name="finally2" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
 	
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method3(..))">
+	</bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownInvalidPOJO->method3(..))">
 		<throwing name="throwing3" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
       <finally name="finally3" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
 	
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method4(..))">
-		<throwing name="throwing4" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
       <finally name="finally4" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
 	
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownInvalidPOJO->method4(..))">
+		<throwing name="throwing4" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
+	</bind>
+   
 	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method5(..))">
-		<throwing name="throwing5" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
       <finally name="finally5" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
+   
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownInvalidPOJO->method5(..))">
+		<throwing name="throwing5" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
+	</bind>
 	
    <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method6(..))">
 		<throwing name="throwing6" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
       <finally name="finally6" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
    
-	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method7(..))">
-		<throwing name="throwing7" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
+   <bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownPOJO->method7(..))">
+	</bind>
+   
+	<bind pointcut="execution(* org.jboss.test.aop.beforeafterArgs.ThrownInvalidPOJO->method7(..))">
 		<throwing name="throwing8" aspect="org.jboss.test.aop.beforeafterArgs.ThrownAspect"/>
 	</bind>
 
@@ -856,7 +1101,6 @@
       <finally name="finally69" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedFinallyAspect"/>
       <finally name="finally70" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedFinallyAspect"/>
       <finally name="finally71" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedFinallyAspect"/>
-      <finally name="finally72" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedFinallyAspect"/>
    </bind>
    
   	<aspect class="org.jboss.test.aop.beforeafterArgs.OverloadedBeforeCallAspect" scope="PER_VM"/>
@@ -909,7 +1153,6 @@
   	   <before name="before42" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedBeforeCallAspect"/>
   	   <before name="before43" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedBeforeCallAspect"/>
   	   <before name="before44" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedBeforeCallAspect"/>
-  	   <before name="before45" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedBeforeCallAspect"/>
   	   <around name="around1" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedAroundCallAspect"/>
   	   <around name="around2" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedAroundCallAspect"/>
   	   <around name="around3" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedAroundCallAspect"/>
@@ -955,7 +1198,6 @@
   	   <around name="around43" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedAroundCallAspect"/>
   	   <around name="around44" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedAroundCallAspect"/>
   	   <around name="around45" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedAroundCallAspect"/>
-  	   <around name="around46" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedAroundCallAspect"/>
   	   <after name="after1" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedAfterCallAspect"/>
   	   <after name="after2" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedAfterCallAspect"/>
   	   <after name="after3" aspect="org.jboss.test.aop.beforeafterArgs.OverloadedAfterCallAspect"/>

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafter/BeforeAfterThrowingTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafter/BeforeAfterThrowingTestCase.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafter/BeforeAfterThrowingTestCase.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -21,6 +21,7 @@
 */ 
 package org.jboss.test.aop.beforeafter;
 
+import org.jboss.aop.advice.NoMatchingAdviceException;
 import org.jboss.test.aop.AOPTestWithSetup;
 
 /**
@@ -102,6 +103,154 @@
       assertTrue(SimpleAspect.finallyAdvice);
    }
 
+   public void testNoMatchingSimple() throws Exception
+   {
+      System.out.println("=== TESING NO MATCHING SIMPLE");
+      boolean thrown = false;
+      try
+      {
+         new InvalidPOJO();
+      }
+      catch(NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      thrown = false;
+      try
+      {
+         new InvalidPOJO((short) 5);
+      }
+      catch(NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      thrown = false;
+      try
+      {
+         new InvalidPOJO(5l);
+      }
+      catch(NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      InvalidPOJO invalidPojo = new InvalidPOJO("");
+      thrown = false;
+      try
+      {
+         invalidPojo.methodBefore();
+      }
+      catch(NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      thrown = false;
+      try
+      {
+         invalidPojo.methodBefore(true);
+      }
+      catch(NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      thrown = false;
+      try
+      {
+         invalidPojo.methodAfter();
+      }
+      catch(NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      thrown = false;
+      try
+      {
+         invalidPojo.methodAfter(true);
+      }
+      catch(NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      thrown = false;
+      try
+      {
+         new InvalidAdviceNamePOJO();
+      }
+      catch(NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      thrown = false;
+      try
+      {
+         System.out.println(invalidPojo.i);
+      }
+      catch(NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      thrown = false;
+      try
+      {
+         System.out.println(invalidPojo.superValue);
+      }
+      catch (NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      thrown = false;
+      try
+      {
+         invalidPojo.superValue = new SuperValue(5);
+      }
+      catch (NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      thrown = false;
+      try
+      {
+         invalidPojo.subValue = new SubValue(5);
+      }
+      catch (NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+      
+      thrown = false;
+      try
+      {
+         invalidPojo.methodAfter(new SubValue(1), 1);
+      }
+      catch (NoMatchingAdviceException e)
+      {
+         thrown = true;
+      }
+      assertTrue(thrown);
+   }
+   
    public void testArgs() throws Exception
    {
       System.out.println("=== TESTING WITH ARGUMENTS");
@@ -130,55 +279,7 @@
       assertEquals("after2", ArgsAspect.after);
       assertNull(ArgsAspect.throwing);
       
-      
-      System.out.println("* Testing method()");
-      ArgsAspect.clear();
-      pojo.method();
-      assertNull(ArgsAspect.before);
-      assertNull(ArgsAspect.after);
-      assertNull(ArgsAspect.throwing);
-      
-      assertFalse(SimpleAspect.before);
-      assertFalse(SimpleAspect.around);
-      assertFalse(SimpleAspect.after);
-      assertFalse(SimpleAspect.throwing);
-      
-
-      System.out.println("* Testing method1(boolean) with exception");
-      ArgsAspect.clear();
       SimpleAspect.clear();
-      try
-      {
-         pojo.method1(true);
-         throw new RuntimeException("TestException not thrown");
-      }
-      catch (TestException e)
-      {
-         assertSame(e, ArgsAspect.exception);
-         assertSame(e, SimpleAspect.exception);
-      }
-      assertNull(ArgsAspect.before);
-      assertNull(ArgsAspect.after);
-      assertEquals("throwing2", ArgsAspect.throwing);
-      assertTrue(SimpleAspect.before);
-      assertTrue(SimpleAspect.around);
-      assertFalse(SimpleAspect.after);
-      assertTrue(SimpleAspect.throwing);
-
-      System.out.println("* Testing method1(boolean)");
-      ArgsAspect.clear();
-      SimpleAspect.clear();
-      pojo.method1(false);
-      assertNull(ArgsAspect.before);
-      assertNull(ArgsAspect.after);
-      assertNull(ArgsAspect.throwing);
-      assertTrue(SimpleAspect.before);
-      assertTrue(SimpleAspect.around);
-      assertTrue(SimpleAspect.after);
-      assertFalse(SimpleAspect.throwing);
-
-
-      SimpleAspect.clear();
       System.out.println("* Testing method(boolean, int, long, String) with exception");
       ArgsAspect.clear();
       try
@@ -237,7 +338,7 @@
       pojo.i = 5;
       assertEquals("before3", ArgsAspect.before);
       assertNull(ArgsAspect.throwing);
-      assertEquals("after3", ArgsAspect.after);
+      assertNull(ArgsAspect.after);
       
       ArgsAspect.clear();
       System.out.println("* Reading i");
@@ -257,7 +358,7 @@
       pojo.superValue = new SuperValue(5);
       assertEquals("before4", ArgsAspect.before);
       assertNull(ArgsAspect.throwing);
-      assertEquals(null, ArgsAspect.after);
+      assertNull(null, ArgsAspect.after);
 
       ArgsAspect.clear();
       System.out.println("* Reading superValue");

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafter/InvalidPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafter/InvalidPOJO.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafter/InvalidPOJO.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -0,0 +1,55 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.aop.beforeafter;
+
+/**
+ * POJO whose joinpoints execution will throw a NoMatchingAdviceException, due to
+ * the fact that the advice bound to it does not exist.
+ * 
+ * @author  <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ */
+class InvalidAdviceNamePOJO {}
+
+/**
+ * POJO whose joinpoint executions will throw a NoMatchingAdviceException, due to
+ * the fact that there is no advice that matches the joinpoint.
+ * 
+ * @author  <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ */
+class InvalidPOJO
+{
+   int i;
+   SuperValue superValue;
+   SubValue subValue;
+   
+   public InvalidPOJO() {}
+   public InvalidPOJO(short arg) {}
+   public InvalidPOJO(long arg) {}
+   // constructor that is not bound to any advice
+   public InvalidPOJO(String arg) {}
+   
+   public void methodBefore() {}
+   public void methodBefore(boolean arg) {}
+   public void methodAfter() {}
+   public void methodAfter(boolean arg) {}
+   public void methodAfter(SubValue arg1, int arg2) {}
+}
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafter/POJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafter/POJO.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafter/POJO.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -82,11 +82,6 @@
       return this;
    }
    
-   public void method()
-   {
-      joinPointRun = true;   
-   }
-
    public SuperValue method(SubValue sup, SubValue sub)
    {
       joinPointRun = true;

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsInvalidPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsInvalidPOJO.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ArgsInvalidPOJO.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -0,0 +1,124 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.aop.beforeafterArgs;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * POJO whose joinpoint executions will throw a NoMatchingAdviceException, due to
+ * the fact that there is no advice that matches the joinpoint.
+ * 
+ * @author  <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ */
+public class ArgsInvalidPOJO
+{
+   public Object field1;
+   
+   public String field2;
+   
+   public int field3;
+   
+   public static boolean field4;
+   
+   public int bunch1(int x, double y, float z, String str, int q)
+   {
+      return x + (int) y + (int) z + q;
+   }
+   
+   public int bunch2(int x, double y, float z, int q)
+   {
+      return x + (int) y * 2 + (int) z + q;
+   }
+   
+   public int bunch3(int x, double y, float z, int q)
+   {
+      return x + (int) y * 3 + (int) z + q;
+   }
+   
+   public int bunch4(int x, double y, float z, int q)
+   {
+      return x + (int) y * 4 + (int) z + q;
+   }
+   
+   public int bunch5(int x, double y, float z, int q)
+   {
+      return x + (int) y * 5 + (int) z + q;
+   }
+   
+   public int bunch6(int x, double y, float z, int q)
+   {
+      return x + (int) y * 6 + (int) z + q;
+   }
+   
+   public int bunch7(int x, double y, float z, int q)
+   {
+      return x + (int) y * 7 + (int) z + q;
+   }
+   
+   public int bunch8(int x, double y, float z, int q)
+   {
+      return x + (int) y * 8 + (int) z + q;
+   }
+   
+   public int bunch9(int x, double y, float z, int q)
+   {
+      return x + (int) y * 9 + (int) z + q;
+   }
+   
+   public void method2(String param1, int param2, boolean param3, ArgsPOJO[] param4)
+   {}
+   
+   public void method4(String param1, int param2, boolean param3, ArgsPOJO[] param4)
+   {}
+   
+   public void method6(short param1, long param2) throws POJOException
+   {
+      throw new POJOException();
+   }
+   
+   public void method8() throws POJOException
+   {
+      this.method6((short) -4, (long) 4);
+   }
+   
+   public void method9(Interface param) throws POJOException {}
+   
+   public void method10(Interface param) throws POJOException
+   {
+      throw new POJOException();
+   }
+   
+   public void method11(String param1, Collection param2) {}
+   
+   public void method12(String param1, Collection param2) throws POJOException
+   {
+      throw new POJOException();
+   }
+   
+   public void method13(List<SuperValue> arg) {}
+   
+   public void method14(List<SuperValue> arg) throws POJOException
+   {
+      throw new POJOException();
+   }
+}
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/InvalidAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/InvalidAspect.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/InvalidAspect.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -23,7 +23,12 @@
 
 import junit.framework.Assert;
 
+import org.jboss.aop.advice.annotation.Arg;
+import org.jboss.aop.advice.annotation.Args;
 import org.jboss.aop.advice.annotation.JoinPoint;
+import org.jboss.aop.advice.annotation.Return;
+import org.jboss.aop.joinpoint.CurrentInvocation;
+import org.jboss.aop.joinpoint.Invocation;
 
 /**
  * Aspect whose advices must never be called.
@@ -49,4 +54,35 @@
    {
       Assert.fail("This advice should never be executed");
    }
+   
+   public void before1(@Arg int arg, @Args Object[] args)
+   {
+      Assert.fail("This advice should never be executed");
+   }
+
+   public Object around1(@Arg int arg, @Args Object[] args) throws Throwable
+   {
+      Assert.fail("This advice should never be executed");
+      return CurrentInvocation.proceed();
+   }
+   
+   public void finally72(@Return String valueReturned)
+   {
+      Assert.fail("This advice should never be executed");
+   }
+   
+   public void finally2(@Return String returnedValue)
+   {
+      Assert.fail("This advice should never be executed");
+   }
+   
+   public void around1(Invocation invocation) throws Exception
+   {
+      Assert.fail("This advice should never be executed");
+   }
+   
+   public void throwing7(Throwable throwable)
+   {
+      Assert.fail("This advice should never be executed");
+   }
 }
\ No newline at end of file

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointInvalidPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointInvalidPOJO.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointInvalidPOJO.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -0,0 +1,153 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.aop.beforeafterArgs;
+
+/**
+ * Plain old java object used on @JoinPoint parameter tests.
+ * 
+ * @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ */
+public class JoinPointInvalidPOJO
+{
+   public int number;
+   public String text;
+   
+   // constructor without advices
+   public JoinPointInvalidPOJO() {}
+   
+   // constructor execution
+   public JoinPointInvalidPOJO(short arg0, boolean shouldThrow) throws POJOException
+   {
+      if (shouldThrow)
+      {
+         throw new POJOException();
+      }
+   }
+   
+   // construction
+   public JoinPointInvalidPOJO(float arg0, boolean shouldThrow) throws POJOException
+   {
+      if (shouldThrow)
+      {
+         throw new POJOException();
+      }
+   }
+   
+   // called constructor
+   public JoinPointInvalidPOJO(boolean shouldThrow) throws POJOException
+   {
+      if (shouldThrow)
+      {
+         throw new POJOException();
+      }
+   }
+   
+   // constructor call constructor
+   public JoinPointInvalidPOJO(int arg0, boolean shouldThrow) throws POJOException
+   {
+      new JoinPointInvalidPOJO(shouldThrow);
+   }
+   
+   // constructor call method
+   public JoinPointInvalidPOJO(boolean arg0, boolean shouldThrow) throws POJOException
+   {
+      this.calledMethod(shouldThrow);
+   }
+   
+   // constructor call static method
+   public JoinPointInvalidPOJO(char arg0, boolean shouldThrow) throws POJOException
+   {
+      calledStaticMethod(shouldThrow);
+   }
+   
+   public void method1()
+   {
+      
+   }
+   
+   public void method3() throws POJOException
+   {
+      throw new POJOException();
+   }
+   
+   public void method5() throws POJOException
+   {
+      throw new POJOException();
+   }
+   
+   public void method6() throws POJOException
+   {
+      throw new POJOException();
+   }
+ 
+   // method call constructor
+   public void callConstructor(boolean shouldThrow) throws POJOException
+   {
+      new JoinPointInvalidPOJO(shouldThrow);
+   }
+   
+   // static method call constructor
+   public static void staticCallConstructor(boolean shouldThrow) throws POJOException
+   {
+      new JoinPointInvalidPOJO(shouldThrow);
+   }
+   
+   // method call method
+   public void callMethod(boolean shouldThrow) throws POJOException
+   {
+      calledMethod(shouldThrow);
+   }
+   
+   // static method call method
+   public static void staticCallMethod(JoinPointInvalidPOJO pojo, boolean shouldThrow) throws POJOException
+   {
+      pojo.calledMethod(shouldThrow);
+   }
+   
+   public void calledMethod(boolean shouldThrow) throws POJOException
+   {
+      if (shouldThrow)
+      {
+         throw new POJOException();
+      }
+   }
+   
+   // method call static method
+   public void callStaticMethod(boolean shouldThrow) throws POJOException
+   {
+      calledStaticMethod(shouldThrow);
+   }
+   
+   // static method call static method
+   public static void staticCallStaticMethod(boolean shouldThrow) throws POJOException
+   {
+      calledStaticMethod(shouldThrow);
+   }
+   
+   public static void calledStaticMethod(boolean shouldThrow) throws POJOException
+   {
+      if (shouldThrow)
+      {
+         throw new POJOException();
+      }
+   }
+}
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointTestCase.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/JoinPointTestCase.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -21,8 +21,6 @@
  */
 package org.jboss.test.aop.beforeafterArgs;
 
-import java.lang.reflect.Method;
-
 import junit.framework.Test;
 import junit.framework.TestSuite;
 import junit.textui.TestRunner;

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedAdviceTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedAdviceTestCase.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedAdviceTestCase.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -558,7 +558,6 @@
       assertEquals("Object,int", OverloadedFinallyAspect.finally69);
       assertEquals("void,Object[]", OverloadedFinallyAspect.finally70);
       assertEquals("void,Object", OverloadedFinallyAspect.finally71);
-      assertEquals("void", OverloadedFinallyAspect.finally72);
    }
    
    public void testBeforeCall()
@@ -647,7 +646,6 @@
             OverloadedBeforeCallAspect.before42);
       assertEquals("SuperClass", OverloadedBeforeCallAspect.before43);
       assertEquals("int", OverloadedBeforeCallAspect.before44);
-      assertEquals("Object[]", OverloadedBeforeCallAspect.before45);
    }
    
    public void testAroundCall()
@@ -745,7 +743,6 @@
             OverloadedAroundCallAspect.around43);
       assertEquals("SuperClass", OverloadedAroundCallAspect.around44);
       assertEquals("int", OverloadedAroundCallAspect.around45);
-      assertEquals("Object[]", OverloadedAroundCallAspect.around46);
    }
    
    public void testAfterCall()

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedAroundCallAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedAroundCallAspect.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedAroundCallAspect.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -21,8 +21,6 @@
  */
 package org.jboss.test.aop.beforeafterArgs;
 
-import junit.framework.Assert;
-
 import org.jboss.aop.advice.annotation.Arg;
 import org.jboss.aop.advice.annotation.Args;
 import org.jboss.aop.advice.annotation.Caller;
@@ -85,8 +83,6 @@
    static String around43 = null;
    static String around44 = null;
    static String around45 = null;
-   static String around46 = null;
-   static String around47 = null;
    
    public static void clear()
    {
@@ -135,8 +131,6 @@
       around43 = null;
       around44 = null;
       around45 = null;
-      around46 = null;
-      around47 = null;
    }
    
    /* AROUND1 ADVICE */
@@ -468,12 +462,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around1(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND2 ADVICE */
    
    public Object around2(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -797,12 +785,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around2(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND3 ADVICE */
    
    public Object around3(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -1118,12 +1100,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around3(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND4 ADVICE */
    
    public Object around4(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -1431,12 +1407,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around4(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND5 ADVICE */
    
    public Object around5(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -1736,12 +1706,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around5(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND6 ADVICE */
    
    public Object around6(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -2032,12 +1996,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around6(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND7 ADVICE */
    
    public Object around7(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -2320,12 +2278,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around7(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND8 ADVICE */
    
    public Object around8(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -2600,12 +2552,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around8(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND9 ADVICE */
    
    public Object around9(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -2872,12 +2818,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around9(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND10 ADVICE */
    
    public Object around10(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -3136,12 +3076,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around10(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND11 ADVICE */
    
    public Object around11(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -3392,12 +3326,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around11(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND12 ADVICE */
    
    public Object around12(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -3640,12 +3568,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around12(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND13 ADVICE */
    
    public Object around13(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -3880,12 +3802,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around13(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND14 ADVICE */
    
    public Object around14(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -4113,12 +4029,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around14(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND15 ADVICE */
    
    public Object around15(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -4339,12 +4249,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around15(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND16 ADVICE */
    
    public Object around16(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -4558,12 +4462,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around16(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND17 ADVICE */
    
    public Object around17(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -4770,12 +4668,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around17(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND18 ADVICE */
    
    public Object around18(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -4975,12 +4867,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around18(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND19 ADVICE */
    
    public Object around19(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -5173,12 +5059,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around19(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND20 ADVICE */
    
    public Object around20(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -5364,12 +5244,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around20(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND21 ADVICE */
    
    public Object around21(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -5547,12 +5421,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around21(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND22 ADVICE */
    
    public Object around22(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -5723,12 +5591,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around22(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND23 ADVICE */
    
    public Object around23(@JoinPoint MethodCalledByMethodInvocation invocation,
@@ -5892,12 +5754,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around23(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND24 ADVICE */
    
    public Object around24(@JoinPoint MethodCalledByMethodInvocation invocation)
@@ -6054,12 +5910,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around24(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND25 ADVICE */
    
    public Object around25(@Target OverloadedAdvicePOJO target,
@@ -6209,12 +6059,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around25(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND26 ADVICE */
    
    public Object around26(@Target OverloadedAdvicePOJO target,
@@ -6357,12 +6201,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around26(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND27 ADVICE */
    
    public Object around27(@Target Object target,
@@ -6498,12 +6336,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around27(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND28 ADVICE */
    
    public Object around28(@Target Object target, @Caller SuperClass caller,
@@ -6632,12 +6464,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around28(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND29 ADVICE */
    
    public Object around29(@Target OverloadedAdvicePOJO target,
@@ -6759,12 +6585,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around29(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND30 ADVICE */
    
    public Object around30(@Target OverloadedAdvicePOJO target,
@@ -6878,12 +6698,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around30(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND31 ADVICE */
    
    public Object around31(@Target Object target,
@@ -6990,12 +6804,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around31(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND32 ADVICE */
    
    public Object around32(@Target Object target, @Caller SuperClass caller,
@@ -7094,12 +6902,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around32(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND33 ADVICE */
    
    public Object around33(@Target OverloadedAdvicePOJO target, @Arg int arg)
@@ -7191,12 +6993,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around33(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND34 ADVICE */
    
    public Object around34(@Target Object target, @Arg int arg) throws Throwable
@@ -7281,12 +7077,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around34(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND35 ADVICE */
    
    public Object around35(@Target OverloadedAdvicePOJO target, @Args Object[] args)
@@ -7365,12 +7155,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around35(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND36 ADVICE */
    
    public Object around36(@Target Object target, @Args Object[] args) throws Throwable
@@ -7442,12 +7226,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around36(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND37 ADVICE */
    
    public Object around37(@Target OverloadedAdvicePOJO target) throws Throwable
@@ -7513,12 +7291,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around37(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND38 ADVICE */
    
    public Object around38(@Target Object target) throws Throwable
@@ -7578,12 +7350,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around38(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND39 ADVICE */
    
    public Object around39(@Caller OverloadedAdvicePOJOCaller caller, @Arg int arg)
@@ -7637,12 +7403,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around39(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND40 ADVICE */
    
    public Object around40(@Caller SuperClass caller, @Arg int arg) throws Throwable
@@ -7689,12 +7449,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around40(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND41 ADVICE */
    
    public Object around41(@Caller OverloadedAdvicePOJOCaller caller,
@@ -7735,12 +7489,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around41(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND42 ADVICE */
    
    public Object around42(@Caller SuperClass caller, @Args Object[] args)
@@ -7774,12 +7522,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around42(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND43 ADVICE */
    
    public Object around43(@Caller OverloadedAdvicePOJOCaller caller) throws Throwable
@@ -7806,12 +7548,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around43(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND44 ADVICE */
    
    public Object around44(@Caller SuperClass caller) throws Throwable
@@ -7832,12 +7568,6 @@
       return CurrentInvocation.proceed();
    }
    
-   public Object around44(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
    /* AROUND45 ADVICE */
    
    public Object around45(@Arg int arg) throws Throwable
@@ -7851,24 +7581,4 @@
       around45 = "Object[]";
       return CurrentInvocation.proceed();
    }
-   
-   public Object around45(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
-   
-   /* AROUND46 ADVICE */
-   
-   public Object around46(@Args Object[] args) throws Throwable
-   {
-      around46 = "Object[]";
-      return CurrentInvocation.proceed();
-   }
-   
-   public Object around46(@Arg int arg, @Args Object[] args) throws Throwable
-   {
-      Assert.fail("This advice should never be executed");
-      return CurrentInvocation.proceed();
-   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedBeforeCallAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedBeforeCallAspect.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedBeforeCallAspect.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -21,8 +21,6 @@
  */
 package org.jboss.test.aop.beforeafterArgs;
 
-import junit.framework.Assert;
-
 import org.jboss.aop.advice.annotation.Arg;
 import org.jboss.aop.advice.annotation.Args;
 import org.jboss.aop.advice.annotation.Caller;
@@ -82,8 +80,6 @@
    static String before42 = null;
    static String before43 = null;
    static String before44 = null;
-   static String before45 = null;
-   static String before46 = null;
    
    public static void clear()
    {
@@ -131,8 +127,6 @@
       before42 = null;
       before43 = null;
       before44 = null;
-      before45 = null;
-      before46 = null;
    }
    
    /* BEFORE1 ADVICE */
@@ -401,11 +395,6 @@
       before1 = "Object[]";
    }
    
-   public void before1(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE2 ADVICE */
    
    public void before2(@JoinPoint MethodCallByMethod joinPoint,
@@ -665,11 +654,6 @@
       before2 = "Object[]";
    }
    
-   public void before2(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE3 ADVICE */
    
    public void before3(@JoinPoint MethodCallByMethod joinPoint,
@@ -922,11 +906,6 @@
       before3 = "Object[]";
    }
    
-   public void before3(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE4 ADVICE */
    
    public void before4(@JoinPoint MethodCallByMethod joinPoint,
@@ -1172,11 +1151,6 @@
       before4 = "Object[]";
    }
    
-   public void before4(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE5 ADVICE */
    
    public void before5(@JoinPoint MethodCallByMethod joinPoint,
@@ -1415,11 +1389,6 @@
       before5 = "Object[]";
    }
    
-   public void before5(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE6 ADVICE */
    
    public void before6(@JoinPoint MethodCallByMethod joinPoint,
@@ -1651,11 +1620,6 @@
       before6 = "Object[]";
    }
    
-   public void before6(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE7 ADVICE */
    
    public void before7(@JoinPoint MethodCallByMethod joinPoint,
@@ -1880,11 +1844,6 @@
       before7 = "Object[]";
    }
    
-   public void before7(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE8 ADVICE */
    
    public void before8(@JoinPoint MethodCallByMethod joinPoint,
@@ -2102,11 +2061,6 @@
       before8 = "Object[]";
    }
    
-   public void before8(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE9 ADVICE */
    
    public void before9(@JoinPoint MethodCallByMethod joinPoint,
@@ -2317,11 +2271,6 @@
       before9 = "Object[]";
    }
    
-   public void before9(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE10 ADVICE */
    
    public void before10(@JoinPoint MethodCallByMethod joinPoint,
@@ -2525,11 +2474,6 @@
       before10 = "Object[]";
    }
    
-   public void before10(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE11 ADVICE */
    
    public void before11(@JoinPoint MethodCallByMethod joinPoint,
@@ -2727,11 +2671,6 @@
       before11 = "Object[]";
    }
    
-   public void before11(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE12 ADVICE */
    
    public void before12(@JoinPoint MethodCallByMethod joinPoint,
@@ -2923,11 +2862,6 @@
       before12 = "Object[]";
    }
    
-   public void before12(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE13 ADVICE */
    
    public void before13(@JoinPoint MethodCallByMethod joinPoint,
@@ -3113,11 +3047,6 @@
       before13 = "Object[]";
    }
    
-   public void before13(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE14 ADVICE */
    
    public void before14(@JoinPoint MethodCallByMethod joinPoint,
@@ -3297,11 +3226,6 @@
       before14 = "Object[]";
    }
    
-   public void before14(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE15 ADVICE */
    
    public void before15(@JoinPoint MethodCallByMethod joinPoint,
@@ -3475,11 +3399,6 @@
       before15 = "Object[]";
    }
    
-   public void before15(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE16 ADVICE */
    
    public void before16(@JoinPoint MethodCallByMethod joinPoint,
@@ -3647,11 +3566,6 @@
       before16 = "Object[]";
    }
    
-   public void before16(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE17 ADVICE */
    
    public void before17(@JoinPoint MethodCallByMethod joinPoint,
@@ -3813,11 +3727,6 @@
       before17 = "Object[]";
    }
    
-   public void before17(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE18 ADVICE */
    
    public void before18(@JoinPoint MethodCallByMethod joinPoint,
@@ -3973,11 +3882,6 @@
       before18 = "Object[]";
    }
    
-   public void before18(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE19 ADVICE */
    
    public void before19(@JoinPoint MethodCallByMethod joinPoint,
@@ -4127,11 +4031,6 @@
       before19 = "Object[]";
    }
    
-   public void before19(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE20 ADVICE */
    
    public void before20(@JoinPoint MethodCallByMethod joinPoint,
@@ -4275,11 +4174,6 @@
       before20 = "Object[]";
    }
    
-   public void before20(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-
    /* BEFORE21 ADVICE */
    
    public void before21(@JoinPoint MethodCallByMethod joinPoint, @Arg int arg)
@@ -4417,11 +4311,6 @@
       before21 = "Object[]";
    }
    
-   public void before21(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE22 ADVICE */
    
    public void before22(@JoinPoint MethodCallByMethod joinPoint,
@@ -4554,11 +4443,6 @@
       before22 = "Object[]";
    }
    
-   public void before22(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE23 ADVICE */
    
    public void before23(@JoinPoint MethodCallByMethod joinPoint)
@@ -4685,11 +4569,6 @@
       before23 = "Object[]";
    }
    
-   public void before23(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE24 ADVICE */
    
    public void before24(@Target OverloadedAdvicePOJO target,
@@ -4811,11 +4690,6 @@
       before24 = "Object[]";
    }
    
-   public void before24(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE25 ADVICE */
    
    public void before25(@Target OverloadedAdvicePOJO target,
@@ -4931,11 +4805,6 @@
       before25 = "Object[]";
    }
    
-   public void before25(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE26 ADVICE */
    
    public void before26(@Target Object target,
@@ -5045,11 +4914,6 @@
       before26 = "Object[]";
    }
    
-   public void before26(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE27 ADVICE */
    
    public void before27(@Target Object target, @Caller SuperClass caller,
@@ -5153,11 +5017,6 @@
       before27 = "Object[]";
    }
    
-   public void before27(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE28 ADVICE */
    
    public void before28(@Target OverloadedAdvicePOJO target,
@@ -5255,11 +5114,6 @@
       before28 = "Object[]";
    }
    
-   public void before28(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE29 ADVICE */
    
    public void before29(@Target OverloadedAdvicePOJO target,
@@ -5351,11 +5205,6 @@
       before29 = "Object[]";
    }
    
-   public void before29(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE30 ADVICE */
    
    public void before30(@Target Object target,
@@ -5441,11 +5290,6 @@
       before30 = "Object[]";
    }
    
-   public void before30(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE31 ADVICE */
    
    public void before31(@Target Object target, @Caller SuperClass caller,
@@ -5525,11 +5369,6 @@
       before31 = "Object[]";
    }
    
-   public void before31(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE32 ADVICE */
    
    public void before32(@Target OverloadedAdvicePOJO target, @Arg int arg)
@@ -5603,11 +5442,6 @@
       before32 = "Object[]";
    }
    
-   public void before32(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE33 ADVICE */
    
    public void before33(@Target Object target, @Arg int arg)
@@ -5676,11 +5510,6 @@
       before33 = "Object[]";
    }
    
-   public void before33(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE34 ADVICE */
    
    public void before34(@Target OverloadedAdvicePOJO target, @Args Object[] args)
@@ -5744,11 +5573,6 @@
       before34 = "Object[]";
    }
    
-   public void before34(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE35 ADVICE */
    
    public void before35(@Target Object target, @Args Object[] args)
@@ -5807,11 +5631,6 @@
       before35 = "Object[]";
    }
    
-   public void before35(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE36 ADVICE */
    
    public void before36(@Target OverloadedAdvicePOJO target)
@@ -5865,11 +5684,6 @@
       before36 = "Object[]";
    }
    
-   public void before36(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE37 ADVICE */
    
    public void before37(@Target Object target)
@@ -5918,11 +5732,6 @@
       before37 = "Object[]";
    }
    
-   public void before37(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE38 ADVICE */
    
    public void before38(@Caller OverloadedAdvicePOJOCaller caller, @Arg int arg)
@@ -5966,11 +5775,6 @@
       before38 = "Object[]";
    }
    
-   public void before38(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE39 ADVICE */
    
    public void before39(@Caller SuperClass caller, @Arg int arg)
@@ -6009,11 +5813,6 @@
       before39 = "Object[]";
    }
    
-   public void before39(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE40 ADVICE */
    
    public void before40(@Caller OverloadedAdvicePOJOCaller caller,
@@ -6047,11 +5846,6 @@
       before40 = "Object[]";
    }
    
-   public void before40(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE41 ADVICE */
    
    public void before41(@Caller SuperClass caller, @Args Object[] args)
@@ -6079,11 +5873,6 @@
       before41 = "Object[]";
    }
    
-   public void before41(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE42 ADVICE */
    
    public void before42(@Caller OverloadedAdvicePOJOCaller caller)
@@ -6106,11 +5895,6 @@
       before42 = "Object[]";
    }
    
-   public void before42(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE43 ADVICE */
    
    public void before43(@Caller SuperClass caller)
@@ -6128,11 +5912,6 @@
       before43 = "Object[]";
    }
    
-   public void before43(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    /* BEFORE44 ADVICE */
    
    public void before44(@Arg int arg)
@@ -6143,22 +5922,5 @@
    public void before44(@Args Object[] args)
    {
       before44 = "Object[]";
-   }
-   
-   public void before44(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
-   /* BEFORE45 ADVICE */
-   
-   public void before45(@Args Object[] args)
-   {
-      before45 = "Object[]";
-   }
-   
-   public void before45(@Arg int arg, @Args Object[] args)
-   {
-      Assert.fail("This advice should never be executed");
-   }
+   }  
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedFinallyAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedFinallyAspect.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/OverloadedFinallyAspect.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -23,8 +23,6 @@
 
 import java.io.Serializable;
 
-import junit.framework.Assert;
-
 import org.jboss.aop.advice.annotation.Arg;
 import org.jboss.aop.advice.annotation.Args;
 import org.jboss.aop.advice.annotation.JoinPoint;
@@ -112,7 +110,6 @@
    static String finally69 = null;
    static String finally70 = null;
    static String finally71 = null;
-   static String finally72 = null;
    
    static void clear()
    {
@@ -187,7 +184,6 @@
       finally69 = null;
       finally70 = null;
       finally71 = null;
-      finally72 = null;
    }
    
    /* FINALLY1 ADVICE */
@@ -15602,16 +15598,4 @@
    {
       finally71 = "void";
    }
-   
-   /* FINALLY72 ADVICE */
-   
-   public void finally72()
-   {
-      finally72 = "void";
-   }
-   
-   public void finally72(@Return String valueReturned)
-   {
-      Assert.fail("This advice should never be executed");
-   }
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnAspect.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnAspect.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -64,11 +64,6 @@
       Assert.fail("This advice should never be executed");
    }
    
-   public void around1(Invocation invocation) throws Exception
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    public void around2(@JoinPoint
          Invocation invocation) throws Exception
    {
@@ -227,12 +222,7 @@
    {
       finallyAdvice = "finally1";
    }
-   
-   public void finally2(@Return String returnedValue)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
+      
    public String finally3(@Return Object returnedValue, @Thrown Throwable thrown)
    {
       finallyAdvice = "finally3";

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnInvalidPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnInvalidPOJO.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ReturnInvalidPOJO.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -0,0 +1,93 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.aop.beforeafterArgs;
+
+/**
+ * Plain old java object used both on @Return parameter tests, and on advice return
+ * type tests.
+ * 
+ * @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ */
+public class ReturnInvalidPOJO
+{
+   public void method1() {}
+
+   public String method2()
+   {
+      return "method2";
+   }
+   
+   public String method3()
+   {
+      return "method3";
+   }
+   
+   public String method4()
+   {
+      return "method4";
+   }
+   
+   public String method5()
+   {
+      return "method5";
+   }
+   
+   public String method6()
+   {
+      return "method6";
+   }
+   
+   public String method7()
+   {
+      return "method7";
+   }
+   
+   public SubValue method8()
+   {
+      return new SubValue(8);
+   }
+   
+   public SubValue method9()
+   {
+      return new SubValue(9);
+   }
+   
+   public SuperValue method10()
+   {
+      return new SuperValue(10);
+   }
+   
+   public SuperValue method11()
+   {
+      return new SuperValue(11);
+   }
+   
+   public SubValue method12() throws POJOException
+   {
+      throw new POJOException();
+   }
+   
+   public SubValue method13() throws POJOException
+   {
+      throw new POJOException();
+   }
+}
\ No newline at end of file

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerInvalidPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerInvalidPOJO.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/TargetCallerInvalidPOJO.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -0,0 +1,57 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.aop.beforeafterArgs;
+
+/**
+ * POJO whose joinpoint executions will throw a NoMatchingAdviceException, due to
+ * the fact that there is no advice that matches the joinpoint.
+ * 
+ * @author  <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ */
+public class TargetCallerInvalidPOJO
+{
+   public static void method15() throws POJOException
+   {
+      TargetCallerInvalidPOJO2.method4_();
+   }
+}
+
+/**
+ * POJO whose joinpoint executions will throw a NoMatchingAdviceException, due to
+ * the fact that there is no advice that matches the joinpoint.
+ * 
+ * @author  <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ */
+class TargetCallerInvalidPOJO2 extends TargetCallerInvalidPOJO
+{
+   public TargetCallerInvalidPOJO2(int x){}
+   
+   public TargetCallerInvalidPOJO2(int x, String y) throws POJOException
+   {
+      throw new POJOException();
+   }
+   
+   public static void method4_() throws POJOException
+   {
+      throw new POJOException();
+   }
+}
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownAspect.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownAspect.java	2007-08-12 18:02:41 UTC (rev 64551)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownAspect.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -92,11 +92,6 @@
       Assert.fail("This advice should never be executed");
    }
    
-   public void throwing7(Throwable throwable)
-   {
-      Assert.fail("This advice should never be executed");
-   }
-   
    public void throwing8(@Arg int i)
    {
       Assert.fail("This advice should never be executed");

Added: projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownInvalidPOJO.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownInvalidPOJO.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/beforeafterArgs/ThrownInvalidPOJO.java	2007-08-13 04:23:22 UTC (rev 64552)
@@ -0,0 +1,65 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.aop.beforeafterArgs;
+
+/**
+ * Plain old java object used on @Thrown parameter tests.
+ * 
+ * @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ */
+public class ThrownInvalidPOJO
+{
+   // as a convention, the number of the thrown exception should never be 0, so we
+   // can identify when the number hasn't been set in ThrownAspect, and when it has
+   
+   public void method1(int i) throws POJOException
+   {
+      throw new POJOException(i);
+   }
+   
+   public void method2(int i) throws POJOException
+   {
+      throw new POJOException(i);
+   }
+   
+   public void method3(int i) throws POJOException
+   {
+      throw new POJOException(i);
+   }
+   
+   public void method4(int i) throws POJOException
+   {
+      throw new POJOException(i);
+   }
+   
+   public void method5(int i) throws POJOException
+   {
+      throw new POJOException(i);
+   }
+   
+   public void method6() throws POJOException { }
+   
+   public void method7() throws POJOException
+   {
+      throw new POJOException(6);
+   }
+}
\ No newline at end of file




More information about the jboss-cvs-commits mailing list