--- /dev/null
+// should give *no* errors....
+class Parent {
+ // declared in Parent, overridden in Child
+ public void parent_child() {} // AAA
+
+ // declared in Parent, overridden in Injector
+ public void parent_injector() {} // BBB
+}
+
+class Child extends Parent {
+ // works
+ @Override public void parent_child() {} // AAA
+
+ // must override a superclass method
+ @Override public void injector_child() {} // CCC
+}
+
+aspect Injector {
+ public void Parent.injector_child() {} // CCC
+ public void Parent.injector_injector() {} // DDD
+
+ // must override a superclass method
+ @Override public void Child.parent_injector() {} // BBB
+
+ // must override a superclass method
+ @Override public void Child.injector_injector() {} // DDD
+}
--- /dev/null
+// 1. child specifies override but there was no parent (error)
+
+class Parent {
+
+}
+
+class Child extends Parent {
+
+ @Override public void method() {} // ERROR, doesnt override anything
+
+}
+
+aspect Injector { }
--- /dev/null
+// 2. child specifies override and there was a parent (no error)
+
+class Parent {
+ public void method() {}
+ public Object method2() {return null;}
+}
+
+class Child extends Parent {
+
+ @Override public void method() {} // OK
+ @Override public String method2() {return null;} // OK, covariance at work
+
+}
+
+aspect Injector { }
--- /dev/null
+// 3. child specifies override and parent was placed via ITD (no error)
+
+
+class Parent {
+}
+
+class Child extends Parent {
+
+ @Override public void method() {} // OK
+ @Override public String method2() {return null;} // OK, covariance at work
+
+}
+
+aspect Injector {
+
+ public void Parent.method() {}
+
+ public Object Parent.method2() {return null;}
+
+}
--- /dev/null
+// 4. parent and child placed by ITD, @override on child (no error)
+
+class Parent {
+}
+
+class Child extends Parent {
+}
+
+aspect Injector {
+
+ public void Parent.method() {}
+ @Override public void Child.method() {} // OK, parent ITD'd
+
+ public Object Parent.method2() {return null;}
+ @Override public String Child.method2() {return null;} // OK, parent ITD'd, covariance
+
+}
--- /dev/null
+// 5. child placed by ITD, @override on child, no parent (error)
+
+class Parent {
+}
+
+class Child extends Parent {
+}
+
+aspect Injector {
+
+ @Override public void Child.method() {} // ERROR, no parent
+
+}
--- /dev/null
+import java.util.*;
+
+class Parent {
+
+ Object method1() {return null;}
+ void method2(String a) {}
+ void method3(List l,String b) {}
+
+}
+
+class Child extends Parent {
+
+ @Override String method1() {return null;}
+ @Override void method2(String b) {}
+ @Override void method3(List l,String b) {}
+
+}
+
+class Child2 extends Parent {
+}
+
+aspect Injector {
+
+ @Override public String Child2.method1() {return null;}
+ @Override public void Child2.method2(String s) {}
+ @Override public void Child2.method3(List l,String b) {}
+
+}