Thu, 31 Aug 2017 15:17:03 +0800
merge
aoqi@0 | 1 | /* @test /nodynamiccopyright/ |
aoqi@0 | 2 | * @bug 7192246 |
aoqi@0 | 3 | * @summary check that re-abstraction works properly |
aoqi@0 | 4 | * @compile/fail/ref=Neg03.out -XDrawDiagnostics Neg03.java |
aoqi@0 | 5 | */ |
aoqi@0 | 6 | |
aoqi@0 | 7 | class Neg03 { |
aoqi@0 | 8 | interface A { |
aoqi@0 | 9 | default void m() { Neg03.one(this); } |
aoqi@0 | 10 | } |
aoqi@0 | 11 | |
aoqi@0 | 12 | interface B { |
aoqi@0 | 13 | default void m() { Neg03.two(this); } |
aoqi@0 | 14 | } |
aoqi@0 | 15 | |
aoqi@0 | 16 | interface C extends A, B { |
aoqi@0 | 17 | default void m() { Neg03.one(this); } |
aoqi@0 | 18 | } |
aoqi@0 | 19 | |
aoqi@0 | 20 | static class X implements C, A { } //ok - ignore extraneous remix of A |
aoqi@0 | 21 | |
aoqi@0 | 22 | interface D extends A, B { |
aoqi@0 | 23 | void m(); // ok - m() is not reabstracted! |
aoqi@0 | 24 | } |
aoqi@0 | 25 | |
aoqi@0 | 26 | static class Y implements D, A { } // invalid - abstract D.m() |
aoqi@0 | 27 | |
aoqi@0 | 28 | interface E extends A { |
aoqi@0 | 29 | void m(); // reabstraction of m() |
aoqi@0 | 30 | } |
aoqi@0 | 31 | |
aoqi@0 | 32 | static class W implements D, E { } // invalid - abstracts D.m()/E.m() |
aoqi@0 | 33 | |
aoqi@0 | 34 | static class Z implements D, A, B { } // invalid - abstract D.m() |
aoqi@0 | 35 | |
aoqi@0 | 36 | static void one(Object a) { } |
aoqi@0 | 37 | static void two(Object a) { } |
aoqi@0 | 38 | } |