diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ajcTests.xml | 26 | ||||
-rw-r--r-- | tests/bugs/DeclareSoftDynamicPCDs.java | 58 |
2 files changed, 84 insertions, 0 deletions
diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml index 5f2210e34..2081e9e7c 100644 --- a/tests/ajcTests.xml +++ b/tests/ajcTests.xml @@ -7210,4 +7210,30 @@ </compile> </ajc-test> + <ajc-test dir="bugs" pr="51320" + title="ClasscastException on concretization of if(false)"> + <compile files="DeclareSoftDynamicPCDs.java"> + + <!-- These are the illegal PCDs against a deow --> + <message kind="error" line="27" text="if() pointcut designator cannot be used"/> + <message kind="error" line="29" text="if() pointcut designator cannot be used"/> + + <message kind="error" line="31" text="cflow() pointcut designator cannot be used"/> + <message kind="error" line="33" text="cflow() pointcut designator cannot be used"/> + + <message kind="error" line="35" text="cflowbelow() pointcut designator cannot be used"/> + <message kind="error" line="37" text="cflowbelow() pointcut designator cannot be used"/> + + <message kind="error" line="39" text="this() pointcut designator cannot be used"/> + <message kind="error" line="41" text="this() pointcut designator cannot be used"/> + + <message kind="error" line="43" text="target() pointcut designator cannot be used"/> + <message kind="error" line="45" text="target() pointcut designator cannot be used"/> + + <message kind="error" line="47" text="args() pointcut designator cannot be used"/> + <message kind="error" line="49" text="args() pointcut designator cannot be used"/> + + </compile> + </ajc-test> + </suite> diff --git a/tests/bugs/DeclareSoftDynamicPCDs.java b/tests/bugs/DeclareSoftDynamicPCDs.java new file mode 100644 index 000000000..934afbc9e --- /dev/null +++ b/tests/bugs/DeclareSoftDynamicPCDs.java @@ -0,0 +1,58 @@ +/* + * From: + * + * http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspectj-home/doc/progguide/semantics-declare.html#d0e6499 + * + * Pointcuts that appear inside of declare forms have certain restrictions. + * Like other pointcuts, these pick out join points, but they do so in a + * way that is statically determinable. + * + * Consequently, such pointcuts may not include, directly or indirectly + * (through user-defined pointcut declarations) pointcuts that discriminate + * based on dynamic (runtime) context. Therefore, such pointcuts may not be + * defined in terms of + * + * cflow + * cflowbelow + * this + * target + * args + * if + * + * all of which can discriminate on runtime information. + */ + +public aspect DeclareSoftDynamicPCDs { + + declare soft : MyException:if(true) ; + pointcut p(): if(false); + declare soft : MyException: p() ; + + declare soft : MyException:cflow(execution(* main(..))); + pointcut p2(): cflow(execution(* main(..))); + declare soft : MyException:p2(); + + declare soft : MyException:cflowbelow(execution(* main(..))); + pointcut p3(): cflowbelow(execution(* main(..))); + declare soft : MyException:p3(); + + declare soft : MyException: this(Object); + pointcut p4(): this(Object); + declare soft : MyException:p4(); + + declare soft : MyException:target(Object); + pointcut p5(): target(Object); + declare soft : MyException:p5(); + + declare soft : MyException:args(Object); + pointcut p6(): args(Object); + declare soft : MyException:p6(); + + class MyException extends Exception { + } + + public static void main(String[] args) { + System.err.println("In main!"); + } + +}
\ No newline at end of file |