1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 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++;
- }
- }
|