--- /dev/null
+public aspect AspectAB {\r
+ declare parents: Z+ implements java.io.Serializable;\r
+}\r
--- /dev/null
+public aspect AspectX1 {
+ declare parents: Bottom1 extends Middle1;
+}
--- /dev/null
+public aspect AspectX2 {
+ declare parents: Bottom2 extends Middle2;
+}
--- /dev/null
+public aspect AspectX3 {
+ declare parents: Bottom3 extends Middle3;
+}
--- /dev/null
+public aspect AspectX4 {
+ declare parents: Bottom4 extends Middle4;
+}
--- /dev/null
+public class B extends Z {
+
+ public static void main(String[] args) {
+ B b = new B();
+ if (b.getClass().getInterfaces().length>0) {
+ throw new RuntimeException("B should not implement any interfaces: "+b.getClass().getInterfaces()[0].toString());
+ }
+ if (!(b instanceof java.io.Serializable)) {
+ throw new RuntimeException("B should be serializable! Inherited from A");
+ }
+ }
+}
--- /dev/null
+public class Bottom1 extends Top1 {
+public static void main(String[]argv) {}
+}
--- /dev/null
+public class Bottom2 extends Top2 {
+ public Bottom2() {
+ super();
+ }
+
+ public static void main(String[]argv) {
+ new Bottom2();
+ }
+}
--- /dev/null
+public class Bottom3 extends Top3 {
+ public Bottom3() {
+ super();
+ }
+
+ public static void main(String[]argv) {
+ Bottom3 b = new Bottom3();
+ b.runit();
+ }
+
+ public void runit() {
+ super.m("x");
+ }
+}
--- /dev/null
+public class Bottom4 extends Top4 {
+ public Bottom4() {
+ super("hello");
+ }
+
+ public static void main(String[]argv) {
+ Bottom4 b = new Bottom4();
+ }
+
+}
--- /dev/null
+public class Middle1 extends Top1 {
+}
--- /dev/null
+public class Middle2 extends Top2 {
+}
--- /dev/null
+public class Middle3 extends Top3 {
+ public void m(String s) {
+ System.err.println("Middle3.m(String)");
+ }
+}
--- /dev/null
+public class Middle4 extends Top4 {
+
+ public Middle4() {
+ }
+}
--- /dev/null
+public class Top1 {
+}
--- /dev/null
+public class Top2 {
+}
--- /dev/null
+public class Top3 {
+ public void m(String s) {
+ System.err.println("Top3.m(String)");
+ }
+}
--- /dev/null
+public class Top4 {
+ public Top4() {}
+ public Top4(String s) {
+ }
+}
--- /dev/null
+public class Z {
+}
--- /dev/null
+public aspect Aspect1 {
+ declare parents: Middle1 extends Top1;
+}
--- /dev/null
+public aspect Aspect2 {
+ declare parents: Middle2 extends Top2;
+}
--- /dev/null
+public aspect Aspect3 {
+ declare parents: Middle3 extends Top3;
+}
--- /dev/null
+public aspect Aspect4 {
+ declare parents: Middle4 extends Top4;
+}
--- /dev/null
+public aspect Aspect5 {
+ declare parents: Middle4 extends Top4;
+
+ public void Middle4.absMethod0() { }
+ public void Middle4.absMethod2() { }
+}
--- /dev/null
+public aspect Aspect6 {
+ declare parents: Middle6 extends Top6;
+}
--- /dev/null
+public class Bottom1 extends Top1 {
+ public void publicMethod() {
+ }
+
+ protected void protectedMethod() {
+ }
+
+ void defaultMethod() {
+ }
+
+ private void privateMethod() {
+ }
+
+ public static void main(String[]argv) {
+ Bottom1 b = new Bottom1();
+ b.publicMethod();
+ b.protectedMethod();
+ b.defaultMethod();
+ b.privateMethod();
+ }
+}
--- /dev/null
+public class Bottom2 extends Top2 {
+ public void publicMethod_voidReturn() { }
+
+ public String publicMethod_StringReturn() { return "";}
+
+ public Integer publicMethod_IntegerReturn() { return new Integer(2);}
+
+// public Super publicMethod_SuperReturn() { return null;}
+
+}
--- /dev/null
+public class Middle1 {
+ protected void publicMethod() {
+ }
+
+ void protectedMethod() {
+ }
+
+ private void defaultMethod() {
+ }
+
+ private void privateMethod() {
+ }
+
+ public static void main(String[] argv) {
+ Middle1 m = new Middle1();
+
+ m.publicMethod();
+ m.protectedMethod();
+ m.defaultMethod();
+ m.privateMethod();
+ }
+}
--- /dev/null
+public class Middle2 {
+ public int publicMethod_voidReturn() { return 2;}
+
+ public String publicMethod_StringReturn() { return "";}
+
+ public int publicMethod_IntegerReturn() { return 3;}
+
+// public Sub publicMethod_SuperReturn() { return null;}
+
+}
--- /dev/null
+public class Middle3 {
+ public void absMethod1() {}
+
+}
--- /dev/null
+public class Middle4 {
+ public void absMethod1() {}
+
+}
--- /dev/null
+public class Middle6 {
+ protected void publicMethod() {
+ }
+
+ void protectedMethod() {
+ }
+
+ private void defaultMethod() {
+ }
+
+ private void privateMethod() {
+ }
+
+
+ private void anotherPublicMethod() { }
+ private void anotherProtectedMethod() {}
+
+ public static void main(String[] argv) {
+ Middle6 m = new Middle6();
+
+ m.publicMethod();
+ m.protectedMethod();
+ m.defaultMethod();
+ m.privateMethod();
+ }
+}
--- /dev/null
+public class Sub extends Super {}
--- /dev/null
+public class Super {}
--- /dev/null
+public class Top1 {
+ public void publicMethod() {
+ }
+
+ protected void protectedMethod() {
+ }
+
+ void defaultMethod() {
+ }
+
+ private void privateMethod() {
+ }
+}
--- /dev/null
+public class Top2 {
+ public void publicMethod_voidReturn() { }
+
+ public String publicMethod_StringReturn() { return "";}
+
+ public Integer publicMethod_IntegerReturn() { return new Integer(3);}
+
+// public Super publicMethod_SuperReturn() { return null;}
+
+}
--- /dev/null
+public abstract class Top3 {
+ public abstract void absMethod1();
+ public abstract void absMethod2();
+ public void absMethod3() {};
+
+}
--- /dev/null
+public abstract class Top4 extends TopTop4 {
+ public abstract void absMethod1();
+ public abstract void absMethod2();
+ public void absMethod3() {};
+
+}
--- /dev/null
+public class Top6 extends TopTop6 {
+ public void publicMethod() {
+ }
+
+ protected void protectedMethod() {
+ }
+
+ void defaultMethod() {
+ }
+
+ private void privateMethod() {
+ }
+}
--- /dev/null
+public abstract class TopTop4 {
+ public abstract void absMethod0();
+}
--- /dev/null
+public abstract class TopTop6 {
+ public void anotherPublicMethod() {}
+
+ protected void anotherProtectedMethod() {}
+
+}
--- /dev/null
+public class A1 {
+ public static void staticMethod() {
+ }
+
+ public void instanceMethod() {
+ }
+}
--- /dev/null
+public final class A2 {
+}
--- /dev/null
+public class A3 {
+}
--- /dev/null
+public class B1 {
+
+ // inherited via decp
+ public void staticMethod() {
+ }
+
+ // inherited via decp
+ public static void instanceMethod() {
+ }
+}
--- /dev/null
+public class B2 {
+
+ public static void main(String[] argv) {
+ B2 b = new B2();
+ }
+}
--- /dev/null
+public aspect X1 {
+ declare parents: B1 extends A1;
+}
--- /dev/null
+public aspect X2 {
+ declare parents: B2 extends A2;
+}
--- /dev/null
+public aspect X3 {
+ declare parents: java.lang.Obj* extends A3;
+}
--- /dev/null
+public aspect SimpleAspect1 {
+ declare parents: SimpleClass1 implements SimpleIntf1;
+}
--- /dev/null
+public aspect SimpleAspect2 {
+ declare parents: SimpleClass2 implements Runnable;
+ public void SimpleClass2.run() {}
+
+}
--- /dev/null
+public class SimpleClass1 {
+ public Integer getInteger() { return new Integer(42);}
+}
--- /dev/null
+public class SimpleClass2 {}
--- /dev/null
+public interface SimpleIntf1 {
+ public String getString();
+ public Integer getInteger();
+}
--- /dev/null
+public class A {
+ public A() {
+ }
+ public A(int i) {
+ }
+}
--- /dev/null
+public class B extends A {
+}
+
--- /dev/null
+public class C extends A{
+
+ public void helper0() {
+ }
+
+ public C() {
+ super(3);
+ }
+ public static void main(String[] argv) {
+ new C();
+ }
+
+ public C(String s) {
+ super(5);
+ }
+
+ public void helper1() {
+ }
+
+ public C(float f) {
+ }
+
+ public void helper2() { }
+}
--- /dev/null
+public aspect X {
+ declare parents: C extends B;
+
+ public B.new(int i) {
+ super(i);
+ }
+}