aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoracolyer <acolyer>2005-09-06 13:08:19 +0000
committeracolyer <acolyer>2005-09-06 13:08:19 +0000
commit71771abbb2d2bac4cd832323c08d9dcad81db2a0 (patch)
tree4c40bb41dfcd35076a97015549a95eb6382841b1
parent8459fc93a9f455b2669ed2a758b10bdc6cd3903a (diff)
downloadaspectj-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.aj20
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java4
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/ajc150.xml6
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java5
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