| // 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. | 
 |  | 
 | public class DebugLambda { | 
 |  | 
 |   interface I { | 
 |     int getInt(); | 
 |   } | 
 |  | 
 |   private static void printInt(I i) { | 
 |     System.out.println(i.getInt()); | 
 |   } | 
 |  | 
 |   public static void testLambda(int i, int j) { | 
 |     printInt(() -> i + j); | 
 |   } | 
 |  | 
 |   private static void printInt2(I i) { | 
 |     System.out.println(i.getInt()); | 
 |   } | 
 |  | 
 |   public static void testLambdaWithMethodReference() { | 
 |     printInt2(DebugLambda::returnOne); | 
 |   } | 
 |  | 
 |   private static int returnOne() { | 
 |     return 1; | 
 |   } | 
 |  | 
 |   private static void printInt3(BinaryOpInterface i, int a, int b) { | 
 |     System.out.println(i.binaryOp(a, b)); | 
 |   } | 
 |  | 
 |   public static void testLambdaWithArguments(int i, int j) { | 
 |     printInt3((a, b) -> { | 
 |       return a + b; | 
 |     }, i, j); | 
 |   } | 
 |  | 
 |   interface ObjectProvider { | 
 |     Object foo(String a, String b, String c); | 
 |   } | 
 |  | 
 |   private static void testLambdaWithMethodReferenceAndConversion(ObjectProvider objectProvider) { | 
 |     System.out.println(objectProvider.foo("A", "B", "C")); | 
 |   } | 
 |  | 
 |   public static void main(String[] args) { | 
 |     DebugLambda.testLambda(5, 10); | 
 |     DebugLambda.testLambdaWithArguments(5, 10); | 
 |     DebugLambda.testLambdaWithMethodReference(); | 
 |     DebugLambda.testLambdaWithMethodReferenceAndConversion(DebugLambda::concatObjects); | 
 |   } | 
 |  | 
 |   private static Object concatObjects(Object... objects) { | 
 |     StringBuilder sb = new StringBuilder(); | 
 |     for (Object o : objects) { | 
 |       sb.append(o.toString()); | 
 |     } | 
 |     return sb.toString(); | 
 |   } | 
 |  | 
 |   interface BinaryOpInterface { | 
 |     int binaryOp(int a, int b); | 
 |   } | 
 | } |