1/*
2 * @test /nodynamiccopyright/
3 * @bug 8062373 8151018
4 *
5 * @summary  Test that javac complains when a <> inferred class contains a public method that does override a supertype method.
6 * @author sadayapalam
7 * @compile/fail/ref=Neg15.out Neg15.java -XDrawDiagnostics
8 *
9 */
10
11class Neg15 {
12
13    interface Predicate<T> {
14        default boolean test(T t) {
15            System.out.println("Default method");
16            return false;
17        }
18    }
19
20
21    static void someMethod(Predicate<? extends Number> p) {
22        if (!p.test(null))
23            throw new Error("Blew it");
24    }
25
26    public static void main(String[] args) {
27
28        someMethod(new Predicate<Integer>() {
29            public boolean test(Integer n) {
30                System.out.println("Override");
31                return true;
32            }
33            boolean test(Integer n, int i) {
34                System.out.println("Override");
35                return true;
36            }
37            protected boolean test(Integer n, int i, int j) {
38                System.out.println("Override");
39                return true;
40            }
41            private boolean test(Integer n, int i, long j) {
42                System.out.println("Override");
43                return true;
44            }
45        });
46
47        someMethod(new Predicate<>() {
48            public boolean test(Integer n) { // bad.
49                System.out.println("Override");
50                return true;
51            }
52            boolean test(Integer n, int i) { // bad, package access.
53                System.out.println("Override");
54                return true;
55            }
56            protected boolean test(Integer n, int i, int j) { // bad, protected access.
57                System.out.println("Override");
58                return true;
59            }
60            private boolean test(Integer n, int i, long j) { // OK, private method.
61                System.out.println("Override");
62                return true;
63            }
64        });
65    }
66}
67