From 71771abbb2d2bac4cd832323c08d9dcad81db2a0 Mon Sep 17 00:00:00 2001
From: acolyer <acolyer>
Date: Tue, 6 Sep 2005 13:08:19 +0000
Subject: tests and fix for pr108816, args with binding with .. at join point
 with synthetic arguments

---
 tests/bugs150/pr108816.aj                            | 20 ++++++++++++++++++++
 .../org/aspectj/systemtest/ajc150/Ajc150Tests.java   |  4 ++++
 tests/src/org/aspectj/systemtest/ajc150/ajc150.xml   |  6 +++++-
 .../org/aspectj/weaver/patterns/ArgsPointcut.java    |  5 +++--
 4 files changed, 32 insertions(+), 3 deletions(-)
 create mode 100644 tests/bugs150/pr108816.aj

diff --git a/tests/bugs150/pr108816.aj b/tests/bugs150/pr108816.aj
new file mode 100644
index 000000000..cfec719ab
--- /dev/null
+++ b/tests/bugs150/pr108816.aj
@@ -0,0 +1,20 @@
+aspect BadAdvice {
+    after(Object controller) returning (Object foo): 
+      cflow(adviceexecution() && args(controller, ..) && this(BadAdvice)) && 
+      call(Bar+.new(..)) 
+    {
+    }    
+    
+    Object around(Object controller) : call(* whoKnows()) && target(controller) 
+    {
+        return new Bar();
+    }
+    
+    public static void main(String args[]) {
+        (new Bar()).whoKnows();
+    }
+}
+
+class Bar {
+    void whoKnows() {}
+}
\ No newline at end of file
diff --git a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
index 79754f8bf..b48c4c60b 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
@@ -393,6 +393,10 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
   public void testPrivatePointcutOverriding() {
 	  runTest("can't override private pointcut in abstract aspect");
   }
+
+  public void testAdviceOnCflow() {
+	  runTest("advising cflow advice execution");
+  }
   
   // helper methods.....
   
diff --git a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
index 2b84361cd..7849cde7a 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
+++ b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
@@ -500,7 +500,11 @@
             <message kind="warning" line="21" text="matched join point from sub advice"/>
         </compile>
     </ajc-test>
-    
+ 
+    <ajc-test dir="bugs150" pr="108816" title="advising cflow advice execution">
+        <compile files="pr108816.aj" >
+        </compile>
+    </ajc-test>   
     <!-- ============================================================================ -->
     <!-- ============================================================================ -->
     
diff --git a/weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java b/weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java
index e66dd4452..0dcc59630 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java
@@ -350,7 +350,8 @@ public class ArgsPointcut extends NameBindingPointcut {
 	}
 	
 	protected Test findResidueInternal(Shadow shadow, ExposedState state) {
-		if (arguments.matches(getArgumentsToMatchAgainst(shadow), TypePattern.DYNAMIC).alwaysFalse()) {
+		ResolvedType[] argsToMatch = getArgumentsToMatchAgainst(shadow);
+		if (arguments.matches(argsToMatch, TypePattern.DYNAMIC).alwaysFalse()) {
 			return Literal.FALSE;
 		}
 		int ellipsisCount = arguments.ellipsisCount;
@@ -358,7 +359,7 @@ public class ArgsPointcut extends NameBindingPointcut {
 			return findResidueNoEllipsis(shadow, state, arguments.getTypePatterns());		
 		} else if (ellipsisCount == 1) {
 			TypePattern[] patternsWithEllipsis = arguments.getTypePatterns();
-			TypePattern[] patternsWithoutEllipsis = new TypePattern[shadow.getArgCount()];
+			TypePattern[] patternsWithoutEllipsis = new TypePattern[argsToMatch.length];
 			int lenWithEllipsis = patternsWithEllipsis.length;
 			int lenWithoutEllipsis = patternsWithoutEllipsis.length;
 			// l1+1 >= l0
-- 
cgit v1.2.3