--- /dev/null
+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
runTest("returning(Object) binding");
}
+ public void testPerTargetAndNegation() {
+ runTest("pertarget and negated pointcut");
+ }
+
/*
* Load-time weaving bugs
*/
</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">
}
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) {