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