diff options
Diffstat (limited to 'tests/bugs163/pr128664/Bug.java')
-rw-r--r-- | tests/bugs163/pr128664/Bug.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/bugs163/pr128664/Bug.java b/tests/bugs163/pr128664/Bug.java new file mode 100644 index 000000000..92eb248e5 --- /dev/null +++ b/tests/bugs163/pr128664/Bug.java @@ -0,0 +1,41 @@ +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +public class Bug { + public static void main(String[] args) { + MonitorMyAnnotationExecution.aspectOf().executionCount = 0; + new ClassImplementingInterfaceWithInheritedAnnotation(); + if (MonitorMyAnnotationExecution.aspectOf().executionCount!=1) { + throw new RuntimeException(); + } + + MonitorMyAnnotationExecution.aspectOf().executionCount = 0; + new ClassExtendingClassWithInheritedAnnotation(); + // Expecting 2, one for derived and one for base class ctor execution + if (MonitorMyAnnotationExecution.aspectOf().executionCount!=2) { + throw new RuntimeException(); + } + } +} + +@Retention(RetentionPolicy.RUNTIME) +@Inherited +@interface InheritedAnnotation { } + +@InheritedAnnotation +interface InterfaceWithInheritedAnnotation { } + +@InheritedAnnotation class ClassWithInheritedAnnotation { } + +class ClassImplementingInterfaceWithInheritedAnnotation implements InterfaceWithInheritedAnnotation { } + +class ClassExtendingClassWithInheritedAnnotation extends ClassWithInheritedAnnotation { } + +aspect MonitorMyAnnotationExecution { + int executionCount; + + before() : execution((@InheritedAnnotation *)+.new(..)) && !within(Monitor*) && !within(Bug) { + executionCount++; + } +} |