diff options
author | acolyer <acolyer> | 2005-09-06 13:08:19 +0000 |
---|---|---|
committer | acolyer <acolyer> | 2005-09-06 13:08:19 +0000 |
commit | 71771abbb2d2bac4cd832323c08d9dcad81db2a0 (patch) | |
tree | 4c40bb41dfcd35076a97015549a95eb6382841b1 | |
parent | 8459fc93a9f455b2669ed2a758b10bdc6cd3903a (diff) | |
download | aspectj-71771abbb2d2bac4cd832323c08d9dcad81db2a0.tar.gz aspectj-71771abbb2d2bac4cd832323c08d9dcad81db2a0.zip |
tests and fix for pr108816, args with binding with .. at join point with synthetic arguments
-rw-r--r-- | tests/bugs150/pr108816.aj | 20 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java | 4 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc150/ajc150.xml | 6 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java | 5 |
4 files changed, 32 insertions, 3 deletions
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 |