| // 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 invokecustom; | |
| import java.lang.invoke.CallSite; | |
| import java.lang.invoke.ConstantCallSite; | |
| import java.lang.invoke.MethodHandle; | |
| import java.lang.invoke.MethodHandles; | |
| import java.lang.invoke.MethodType; | |
| class ClassWithLongName { | |
| @Override | |
| public String toString() { | |
| return getClass().getName(); | |
| } | |
| } | |
| class AnotherClassWithALongName { | |
| @Override | |
| public String toString() { | |
| return getClass().getName(); | |
| } | |
| } | |
| interface J { | |
| default void targetMethodTest8() { | |
| System.out.println("targetMethodTest8 from J"); | |
| } | |
| default void targetMethodTest7() { | |
| System.out.println("targetMethodTest7 from J"); | |
| } | |
| default void targetMethodTest6() { | |
| System.out.println("targetMethodTest6 from J"); | |
| } | |
| } | |
| interface I extends J { | |
| void targetMethodTest8(); | |
| default void targetMethodTest6() { | |
| System.out.println("targetMethodTest6 from I"); | |
| } | |
| default void targetMethodTest9() { | |
| System.out.println("targetMethodTest9 from I"); | |
| } | |
| default void targetMethodTest10() { | |
| System.out.println("targetMethodTest10 from I"); | |
| } | |
| default AnotherClassWithALongName targetMethodTest11(ClassWithLongName a) { | |
| System.out.println("targetMethodTest11 from I"); | |
| return new AnotherClassWithALongName(); | |
| } | |
| } | |
| abstract class Super { | |
| public void targetMethodTest5() { | |
| System.out.println("targetMethodTest5 from Super"); | |
| } | |
| abstract void targetMethodTest10(); | |
| } | |
| public class InvokeCustom extends Super implements I { | |
| private static String staticField1 = "StaticField1"; | |
| private String instanceField1 = "instanceField1"; | |
| private static void targetMethodTest1() { | |
| System.out.println("Hello World!"); | |
| } | |
| private static void targetMethodTest2(boolean z, byte b, char c, short s, int i, float f, long l, | |
| double d, String str) { | |
| System.out.println(z); | |
| System.out.println(b); | |
| System.out.println(c); | |
| System.out.println(s); | |
| System.out.println(i); | |
| System.out.println(f); | |
| System.out.println(l); | |
| System.out.println(d); | |
| System.out.println(str); | |
| } | |
| private static void targetMethodTest3() { | |
| } | |
| public static CallSite bsmLookupStatic(MethodHandles.Lookup caller, String name, MethodType type) | |
| throws NoSuchMethodException, IllegalAccessException { | |
| final MethodHandles.Lookup lookup = MethodHandles.lookup(); | |
| final MethodHandle targetMH = lookup.findStatic(lookup.lookupClass(), name, type); | |
| return new ConstantCallSite(targetMH.asType(type)); | |
| } | |
| public static CallSite bsmLookupStaticWithExtraArgs( | |
| MethodHandles.Lookup caller, String name, MethodType type, int i, long l, float f, double d) | |
| throws NoSuchMethodException, IllegalAccessException { | |
| System.out.println(i); | |
| System.out.println(l); | |
| System.out.println(f); | |
| System.out.println(d); | |
| final MethodHandles.Lookup lookup = MethodHandles.lookup(); | |
| final MethodHandle targetMH = lookup.findStatic(lookup.lookupClass(), name, type); | |
| return new ConstantCallSite(targetMH.asType(type)); | |
| } | |
| @Override | |
| public void targetMethodTest5() { | |
| System.out.println("targetMethodTest5 from InvokeCustom"); | |
| } | |
| private static void targetMethodTest4() { | |
| System.out.println("targetMethodTest4"); | |
| } | |
| public void targetMethodTest8() { | |
| System.out.println("targetMethodTest8 from InvokeCustom"); | |
| } | |
| public void targetMethodTest10() { | |
| System.out.println("targetMethodTest10 from InvokeCustom"); | |
| } | |
| public static CallSite bsmCreateCallSite( | |
| MethodHandles.Lookup caller, String name, MethodType type, MethodHandle mh) | |
| throws Throwable { | |
| return new ConstantCallSite(mh); | |
| } | |
| } |