diff options
Diffstat (limited to 'tests/features160')
-rw-r--r-- | tests/features160/parameterAnnotationMatching/Test.java | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/features160/parameterAnnotationMatching/Test.java b/tests/features160/parameterAnnotationMatching/Test.java new file mode 100644 index 000000000..2a5aa2480 --- /dev/null +++ b/tests/features160/parameterAnnotationMatching/Test.java @@ -0,0 +1,56 @@ +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 |