--- /dev/null
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+public aspect Test {
+ // OK (matches f1 and f2):
+ declare warning : execution(* *(!(Object+), ..)) : "mOne: value parameter";
+
+ // Wrong (matches f1 and f2, should match only f1): a Not type pattern containing @A and negatedPattern Object+ is built
+//broke declare warning : execution(* *(@A (!(Object+)), ..)) : "mTwo: @A annotated value parameter";
+
+ // OK (matches f1):
+ declare warning : execution(* *(@A (*), ..)) && execution(* *(!(Object+), ..)): "mThree: @A annotated value parameter.";
+
+ // OK (matches f3 and f4):
+ declare warning : execution(* *(Object+, ..)) : "mFour: Reference parameter.";
+
+ // Wrong (no matches, should match f3):
+ declare warning : execution(* *(@A (Object+), ..)) : "mFive: @A annotated reference parameter!";
+
+ // OK (matches f3):
+ declare warning : execution(* *(@A (*), ..)) && execution(* *(Object+, ..)): "mSix: @A annotated reference parameter.";
+
+ // Wrong (matches f1 and f2, should match only f2):
+//broke declare warning : execution(* *(!@A (!(Object+)), ..)) : "mSeven: Non-@A annotated value parameter!";
+
+ // Wrong (matches f1 and f2, should match only f2):
+ declare warning : execution(* *(!@A (*), ..)) && execution(* *(!(Object+), ..)): "mEight: Non-@A annotated value parameter.";
+
+ // OK (matches f2):
+ declare warning : !execution(* *(@A (*), ..)) && execution(* *(!(Object+), ..)): "mNine: Non-@A annotated value parameter.";
+
+ // Wrong (matches f3 and f4, should match only f4):
+ declare warning : execution(* *(!@A (Object+), ..)) : "mTen: Non-@A annotated reference parameter!";
+
+ // Wrong (matches f3 and f4, should match only f4):
+ declare warning : execution(* *(!@A (*), ..)) && execution(* *(Object+, ..)): "mEleven: Non-@A annotated reference parameter.";
+
+ // OK (matches f4):
+ declare warning : !execution(* *(@A (*), ..)) && execution(* *(Object+, ..)): "mTwelve: Non-@A annotated reference parameter.";
+
+ void f1(@A int i) {}
+
+ void f2(int i) {}
+
+ void f3(@A Integer i) {}
+
+ void f4(Integer i) {}
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target({ElementType.PARAMETER})
+ private static @interface A {
+
+ }
+}
\ No newline at end of file
import java.io.File;
-import org.aspectj.testing.XMLBasedAjcTestCase;
-
import junit.framework.Test;
+import org.aspectj.testing.XMLBasedAjcTestCase;
+
/**
* Parameter annotation matching
*
*/
public class ParameterAnnotationMatchingTests extends XMLBasedAjcTestCase {
+ public void testDeow() { runTest("deow"); }
public void testNoWarningForWrongType() { runTest("no xlint for wrong target");}
public void testVariousCombinations() { runTest("various combinations"); }
public void testVariousCombinationsCtors() { runTest("various combinations - ctors"); }
<suite>
+ <ajc-test dir="features160/parameterAnnotationMatching" title="deow">
+ <compile options="-1.5" files="Test.java">
+ <message kind="warning" line="43" text="mOne"/>
+ <message kind="warning" line="45" text="mOne"/>
+ <message kind="warning" line="43" text="mThree"/>
+ <message kind="warning" line="47" text="mFour"/>
+ <message kind="warning" line="49" text="mFour"/>
+ <message kind="warning" line="47" text="mFive"/>
+ <message kind="warning" line="47" text="mSix"/>
+ <message kind="warning" line="45" text="mNine"/>
+ <message kind="warning" line="49" text="mEleven"/>
+ <message kind="warning" line="49" text="mTwelve"/>
+ <message kind="warning" line="49" text="mTen"/>
+ <message kind="warning" line="45" text="mEight"/>
+ <!--
+ <message kind="warning" line="43" text="mTwo"/>
+ <message kind="warning" line="45" text="mSeven"/>
+ -->
+ </compile>
+ </ajc-test>
+
<ajc-test dir="features160/parameterAnnotationMatching" title="no xlint for wrong target">
<compile options="-1.5" files="NonNullAssertionForcer.java"/>
</ajc-test>