@@ -0,0 +1,27 @@ | |||
// 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 | |||
} |
@@ -0,0 +1,13 @@ | |||
// 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 { } |
@@ -0,0 +1,15 @@ | |||
// 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 { } |
@@ -0,0 +1,20 @@ | |||
// 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;} | |||
} |
@@ -0,0 +1,17 @@ | |||
// 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 | |||
} |
@@ -0,0 +1,13 @@ | |||
// 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 | |||
} |
@@ -0,0 +1,28 @@ | |||
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) {} | |||
} |