summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoracolyer <acolyer>2005-11-23 16:20:19 +0000
committeracolyer <acolyer>2005-11-23 16:20:19 +0000
commita4caeb95261431c81f7beb0cddbff3b0865e614d (patch)
tree65d21c09bf7879d0d0f0afa94d6ca2eaaa56c36f
parenta817aacd5a461ffb94416bfb3a44acc3bb05bc83 (diff)
downloadaspectj-a4caeb95261431c81f7beb0cddbff3b0865e614d.tar.gz
aspectj-a4caeb95261431c81f7beb0cddbff3b0865e614d.zip
tests and fix for pr114054 (erroneous handling of negation in per-object perclauses)
-rw-r--r--tests/bugs150/Pr114054.aj30
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java4
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/ajc150.xml5
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.java13
4 files changed, 47 insertions, 5 deletions
diff --git a/tests/bugs150/Pr114054.aj b/tests/bugs150/Pr114054.aj
new file mode 100644
index 000000000..3f776df43
--- /dev/null
+++ b/tests/bugs150/Pr114054.aj
@@ -0,0 +1,30 @@
+public class Pr114054 {
+ public static boolean passed;
+ public static void main(String[] args) {
+ SampleSeries me = new SampleSeries();
+ me.okSeries();
+ me.open();
+ me.close();
+ if (!passed) {
+ throw new Error("failed to advise...");
+ }
+ }
+ static class SampleSeries {
+ void open() {}
+ void close() {}
+ void okSeries() {open(); close();}
+ }
+ static aspect AAAA
+ // comment this out, and !call(...) works
+ pertarget(tracked())
+ {
+ protected final pointcut tracked() :
+ call(void SampleSeries.*())
+ // comment this out, and pertarget works...
+ && !call(void SampleSeries.*Series())
+ ;
+ before() : tracked() {
+ Pr114054.passed = true;
+ }
+ }
+} \ 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 be703cb03..41960b5ae 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
@@ -739,6 +739,10 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
runTest("returning(Object) binding");
}
+ public void testPerTargetAndNegation() {
+ runTest("pertarget and negated pointcut");
+ }
+
/*
* Load-time weaving bugs
*/
diff --git a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
index 5b072abf7..19a8c0f2f 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
+++ b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
@@ -37,6 +37,11 @@
</run>
</ajc-test>
+ <ajc-test dir="bugs150" pr="114054" title="pertarget and negated pointcut">
+ <compile files="Pr114054.aj" options=""/>
+ <run class="Pr114054"/>
+ </ajc-test>
+
<ajc-test dir="bugs150" pr="104220" title="adviceexecution join point toString forms">
<compile files="Pr104220.aj"/>
<run class="Pr104220">
diff --git a/weaver/src/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.java b/weaver/src/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.java
index da8271721..daaf2d5e1 100644
--- a/weaver/src/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.java
+++ b/weaver/src/org/aspectj/weaver/patterns/PerThisOrTargetPointcutVisitor.java
@@ -113,11 +113,14 @@ public class PerThisOrTargetPointcutVisitor extends IdentityPointcutVisitor {
}
public Object visit(NotPointcut node, Object data) {
- TypePattern negated = getPerTypePointcut(node.getNegatedPointcut());
- if (MAYBE.equals(negated)) {
- return MAYBE;
- }
- return new NotTypePattern(negated);
+// TypePattern negated = getPerTypePointcut(node.getNegatedPointcut());
+// if (MAYBE.equals(negated)) {
+// return MAYBE;
+// }
+// return new NotTypePattern(negated);
+ // AMC - the only safe thing to return here is maybe...
+ // see for example pr114054
+ return MAYBE;
}
public Object visit(ThisOrTargetAnnotationPointcut node, Object data) {