| // Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| package privateinterfacemethods; | |
| public class PrivateInterfaceMethods { | |
| public static void main(String[] args) { | |
| System.out.println("1: " + I.DEFAULT.dFoo()); | |
| System.out.println("2: " + I.DEFAULT.lFoo()); | |
| System.out.println("3: " + I.xFoo()); | |
| System.out.println("4: " + new C().dFoo()); | |
| } | |
| } | |
| class C implements I { | |
| public String dFoo() { | |
| return "c>" + I.super.dFoo(); | |
| } | |
| } | |
| interface IB { | |
| String dFoo(); | |
| } | |
| interface I { | |
| I DEFAULT = new I() {{ | |
| System.out.println("0: " + sFoo(false, this)); | |
| }}; | |
| static String xFoo() { | |
| return "x>" + sFoo(true, null); | |
| } | |
| private static String sFoo(boolean simple, I it) { | |
| return simple ? "s" | |
| : ("s>" + it.iFoo(true) + ">" + new I() { | |
| public String dFoo() { | |
| return "a"; | |
| } | |
| }.dFoo()); | |
| } | |
| private String iFoo(boolean skip) { | |
| return skip ? "i" : ("i>" + sFoo(false, this)); | |
| } | |
| default String dFoo() { | |
| return "d>" + iFoo(false); | |
| } | |
| default String lFoo() { | |
| IB ib = () -> "l>" + iFoo(false); | |
| return ib.dFoo(); | |
| } | |
| } |