| // 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(); |
| } |
| } |