1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2024 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker import static java.lang.invoke.MethodType.methodType; 18*795d594fSAndroid Build Coastguard Worker 19*795d594fSAndroid Build Coastguard Worker import java.lang.invoke.MethodHandle; 20*795d594fSAndroid Build Coastguard Worker import java.lang.invoke.MethodHandles; 21*795d594fSAndroid Build Coastguard Worker import java.util.Arrays; 22*795d594fSAndroid Build Coastguard Worker import java.util.Optional; 23*795d594fSAndroid Build Coastguard Worker 24*795d594fSAndroid Build Coastguard Worker public class JavaApiTest extends AbstractInvokeExactTest { 25*795d594fSAndroid Build Coastguard Worker 26*795d594fSAndroid Build Coastguard Worker private static final MethodHandle OPTIONAL_GET; 27*795d594fSAndroid Build Coastguard Worker 28*795d594fSAndroid Build Coastguard Worker private static final MethodHandle VOID_METHOD; 29*795d594fSAndroid Build Coastguard Worker private static final MethodHandle RETURN_INT; 30*795d594fSAndroid Build Coastguard Worker private static final MethodHandle RETURN_DOUBLE; 31*795d594fSAndroid Build Coastguard Worker private static final MethodHandle PRIVATE_INTERFACE_METHOD; 32*795d594fSAndroid Build Coastguard Worker private static final MethodHandle B_PRIVATE_RETURN_INT; 33*795d594fSAndroid Build Coastguard Worker private static final MethodHandle A_PRIVATE_RETURN_INT; 34*795d594fSAndroid Build Coastguard Worker private static final MethodHandle STATIC_METHOD; 35*795d594fSAndroid Build Coastguard Worker private static final MethodHandle EXCEPTION_THROWING_METHOD; 36*795d594fSAndroid Build Coastguard Worker private static final MethodHandle INTERFACE_DEFAULT_METHOD; 37*795d594fSAndroid Build Coastguard Worker private static final MethodHandle OVERWRITTEN_INTERFACE_DEFAULT_METHOD; 38*795d594fSAndroid Build Coastguard Worker 39*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_I; 40*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_2I; 41*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_3I; 42*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_4I; 43*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_5I; 44*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_6I; 45*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_7I; 46*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_8I; 47*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_9I; 48*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_10I; 49*795d594fSAndroid Build Coastguard Worker 50*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_IJ; 51*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_2IJ; 52*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_3IJ; 53*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_4IJ; 54*795d594fSAndroid Build Coastguard Worker private static final MethodHandle SUM_5IJ; 55*795d594fSAndroid Build Coastguard Worker 56*795d594fSAndroid Build Coastguard Worker private static final MethodHandle FOO_NONDEFAULT; 57*795d594fSAndroid Build Coastguard Worker private static final MethodHandle FOOBARIMPL_NONDEFAULT; 58*795d594fSAndroid Build Coastguard Worker private static final MethodHandle FOO_DEFAULT; 59*795d594fSAndroid Build Coastguard Worker private static final MethodHandle BAR_DEFAULT; 60*795d594fSAndroid Build Coastguard Worker private static final MethodHandle FOOBAR_DEFINEDINABSTRACT; 61*795d594fSAndroid Build Coastguard Worker private static final MethodHandle FOOBAR_NONDEFAULT; 62*795d594fSAndroid Build Coastguard Worker private static final MethodHandle FOOBARIMPL_DEFINEDINABSTRACT; 63*795d594fSAndroid Build Coastguard Worker private static final MethodHandle FOOBARIMPL_DEFAULT; 64*795d594fSAndroid Build Coastguard Worker private static final MethodHandle FOO_NONOVERRIDDEN_DEFAULT; 65*795d594fSAndroid Build Coastguard Worker private static final MethodHandle BAR_NONOVERRIDDEN_DEFAULT; 66*795d594fSAndroid Build Coastguard Worker private static final MethodHandle TO_STRING_DEFINED_IN_AN_INTERFACE; 67*795d594fSAndroid Build Coastguard Worker 68*795d594fSAndroid Build Coastguard Worker private static final MethodHandle INTERFACE_ONE_METHOD; 69*795d594fSAndroid Build Coastguard Worker private static final MethodHandle INTERFACE_TWO_METHOD; 70*795d594fSAndroid Build Coastguard Worker private static final MethodHandle INTERFACE_THREE_METHOD; 71*795d594fSAndroid Build Coastguard Worker private static final MethodHandle INTERFACE_FOUR_METHOD; 72*795d594fSAndroid Build Coastguard Worker private static final MethodHandle FOO_AND_FOO_CONFLICT_DEFAULT; 73*795d594fSAndroid Build Coastguard Worker private static final MethodHandle BASE_INTERFACE; 74*795d594fSAndroid Build Coastguard Worker 75*795d594fSAndroid Build Coastguard Worker static { 76*795d594fSAndroid Build Coastguard Worker try { 77*795d594fSAndroid Build Coastguard Worker OPTIONAL_GET = MethodHandles.lookup() 78*795d594fSAndroid Build Coastguard Worker .findVirtual(Optional.class, "get", methodType(Object.class)); 79*795d594fSAndroid Build Coastguard Worker 80*795d594fSAndroid Build Coastguard Worker VOID_METHOD = MethodHandles.lookup() 81*795d594fSAndroid Build Coastguard Worker .findVirtual(A.class, "voidMethod", methodType(void.class)); 82*795d594fSAndroid Build Coastguard Worker RETURN_DOUBLE = MethodHandles.lookup() 83*795d594fSAndroid Build Coastguard Worker .findVirtual(A.class, "returnDouble", methodType(double.class)); 84*795d594fSAndroid Build Coastguard Worker RETURN_INT = MethodHandles.lookup() 85*795d594fSAndroid Build Coastguard Worker .findVirtual(A.class, "returnInt", methodType(int.class)); 86*795d594fSAndroid Build Coastguard Worker PRIVATE_INTERFACE_METHOD = MethodHandles.privateLookupIn(I.class, MethodHandles.lookup()) 87*795d594fSAndroid Build Coastguard Worker .findVirtual(I.class, "innerPrivateMethod", methodType(String.class)); 88*795d594fSAndroid Build Coastguard Worker A_PRIVATE_RETURN_INT = MethodHandles.privateLookupIn(A.class, MethodHandles.lookup()) 89*795d594fSAndroid Build Coastguard Worker .findVirtual(A.class, "privateReturnInt", methodType(int.class)); 90*795d594fSAndroid Build Coastguard Worker B_PRIVATE_RETURN_INT = MethodHandles.privateLookupIn(B.class, MethodHandles.lookup()) 91*795d594fSAndroid Build Coastguard Worker .findVirtual(B.class, "privateReturnInt", methodType(int.class)); 92*795d594fSAndroid Build Coastguard Worker STATIC_METHOD = MethodHandles.lookup() 93*795d594fSAndroid Build Coastguard Worker .findStatic(A.class, "staticMethod", methodType(String.class, A.class)); 94*795d594fSAndroid Build Coastguard Worker EXCEPTION_THROWING_METHOD = MethodHandles.lookup() 95*795d594fSAndroid Build Coastguard Worker .findVirtual(A.class, "throwException", methodType(void.class)); 96*795d594fSAndroid Build Coastguard Worker INTERFACE_DEFAULT_METHOD = MethodHandles.lookup() 97*795d594fSAndroid Build Coastguard Worker .findVirtual(I.class, "defaultMethod", methodType(void.class)); 98*795d594fSAndroid Build Coastguard Worker OVERWRITTEN_INTERFACE_DEFAULT_METHOD = MethodHandles.lookup() 99*795d594fSAndroid Build Coastguard Worker .findVirtual(I.class, "overrideMe", methodType(void.class)); 100*795d594fSAndroid Build Coastguard Worker 101*795d594fSAndroid Build Coastguard Worker SUM_I = MethodHandles.lookup() 102*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, "sum", methodType(int.class, repeat(1, int.class))); 103*795d594fSAndroid Build Coastguard Worker SUM_2I = MethodHandles.lookup() 104*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, "sum", methodType(int.class, repeat(2, int.class))); 105*795d594fSAndroid Build Coastguard Worker SUM_3I = MethodHandles.lookup() 106*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, "sum", methodType(int.class, repeat(3, int.class))); 107*795d594fSAndroid Build Coastguard Worker SUM_4I = MethodHandles.lookup() 108*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, "sum", methodType(int.class, repeat(4, int.class))); 109*795d594fSAndroid Build Coastguard Worker SUM_5I = MethodHandles.lookup() 110*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, "sum", methodType(int.class, repeat(5, int.class))); 111*795d594fSAndroid Build Coastguard Worker SUM_6I = MethodHandles.lookup() 112*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, "sum", methodType(int.class, repeat(6, int.class))); 113*795d594fSAndroid Build Coastguard Worker SUM_7I = MethodHandles.lookup() 114*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, "sum", methodType(int.class, repeat(7, int.class))); 115*795d594fSAndroid Build Coastguard Worker SUM_8I = MethodHandles.lookup() 116*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, "sum", methodType(int.class, repeat(8, int.class))); 117*795d594fSAndroid Build Coastguard Worker SUM_9I = MethodHandles.lookup() 118*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, "sum", methodType(int.class, repeat(9, int.class))); 119*795d594fSAndroid Build Coastguard Worker SUM_10I = MethodHandles.lookup() 120*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, "sum", methodType(int.class, repeat(10, int.class))); 121*795d594fSAndroid Build Coastguard Worker 122*795d594fSAndroid Build Coastguard Worker SUM_IJ = MethodHandles.lookup() 123*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, "sum", methodType(long.class, int.class, long.class)); 124*795d594fSAndroid Build Coastguard Worker SUM_2IJ = MethodHandles.lookup() 125*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, 126*795d594fSAndroid Build Coastguard Worker "sum", 127*795d594fSAndroid Build Coastguard Worker methodType(long.class, repeat(2, int.class, long.class))); 128*795d594fSAndroid Build Coastguard Worker SUM_3IJ = MethodHandles.lookup() 129*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, 130*795d594fSAndroid Build Coastguard Worker "sum", 131*795d594fSAndroid Build Coastguard Worker methodType(long.class, repeat(3, int.class, long.class))); 132*795d594fSAndroid Build Coastguard Worker SUM_4IJ = MethodHandles.lookup() 133*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, 134*795d594fSAndroid Build Coastguard Worker "sum", 135*795d594fSAndroid Build Coastguard Worker methodType(long.class, repeat(4, int.class, long.class))); 136*795d594fSAndroid Build Coastguard Worker SUM_5IJ = MethodHandles.lookup() 137*795d594fSAndroid Build Coastguard Worker .findVirtual(Sums.class, 138*795d594fSAndroid Build Coastguard Worker "sum", 139*795d594fSAndroid Build Coastguard Worker methodType(long.class, repeat(5, int.class, long.class))); 140*795d594fSAndroid Build Coastguard Worker 141*795d594fSAndroid Build Coastguard Worker FOO_NONDEFAULT = MethodHandles.lookup() 142*795d594fSAndroid Build Coastguard Worker .findVirtual(Foo.class, "nonDefault", methodType(String.class)); 143*795d594fSAndroid Build Coastguard Worker FOOBARIMPL_NONDEFAULT = MethodHandles.lookup() 144*795d594fSAndroid Build Coastguard Worker .findVirtual(FooBarImpl.class, "nonDefault", methodType(String.class)); 145*795d594fSAndroid Build Coastguard Worker FOO_DEFAULT = MethodHandles.lookup() 146*795d594fSAndroid Build Coastguard Worker .findVirtual(Foo.class, "defaultToOverride", methodType(String.class)); 147*795d594fSAndroid Build Coastguard Worker BAR_DEFAULT = MethodHandles.lookup() 148*795d594fSAndroid Build Coastguard Worker .findVirtual(Bar.class, "defaultToOverride", methodType(String.class)); 149*795d594fSAndroid Build Coastguard Worker FOOBAR_DEFINEDINABSTRACT = MethodHandles.lookup() 150*795d594fSAndroid Build Coastguard Worker .findVirtual(FooBar.class, "definedInAbstract", methodType(String.class)); 151*795d594fSAndroid Build Coastguard Worker FOOBAR_NONDEFAULT = MethodHandles.lookup() 152*795d594fSAndroid Build Coastguard Worker .findVirtual(FooBar.class, "nonDefault", methodType(String.class)); 153*795d594fSAndroid Build Coastguard Worker FOOBARIMPL_DEFINEDINABSTRACT = MethodHandles.lookup() 154*795d594fSAndroid Build Coastguard Worker .findVirtual(FooBarImpl.class, "definedInAbstract", methodType(String.class)); 155*795d594fSAndroid Build Coastguard Worker FOOBARIMPL_DEFAULT = MethodHandles.lookup() 156*795d594fSAndroid Build Coastguard Worker .findVirtual(FooBarImpl.class, "defaultToOverride", methodType(String.class)); 157*795d594fSAndroid Build Coastguard Worker FOO_NONOVERRIDDEN_DEFAULT = MethodHandles.lookup() 158*795d594fSAndroid Build Coastguard Worker .findVirtual(Foo.class, "nonOverriddenDefault", methodType(String.class)); 159*795d594fSAndroid Build Coastguard Worker BAR_NONOVERRIDDEN_DEFAULT = MethodHandles.lookup() 160*795d594fSAndroid Build Coastguard Worker .findVirtual(Bar.class, "nonOverriddenDefault", methodType(String.class)); 161*795d594fSAndroid Build Coastguard Worker TO_STRING_DEFINED_IN_AN_INTERFACE = MethodHandles.lookup() 162*795d594fSAndroid Build Coastguard Worker .findVirtual(ToStringable.class, "toString", methodType(String.class)); 163*795d594fSAndroid Build Coastguard Worker 164*795d594fSAndroid Build Coastguard Worker INTERFACE_ONE_METHOD = MethodHandles.lookup() 165*795d594fSAndroid Build Coastguard Worker .findVirtual(Interface1.class, "methodOne", methodType(String.class)); 166*795d594fSAndroid Build Coastguard Worker INTERFACE_TWO_METHOD = MethodHandles.lookup() 167*795d594fSAndroid Build Coastguard Worker .findVirtual(Interface2.class, "methodTwo", methodType(String.class)); 168*795d594fSAndroid Build Coastguard Worker INTERFACE_THREE_METHOD = MethodHandles.lookup() 169*795d594fSAndroid Build Coastguard Worker .findVirtual(Interface3.class, "methodThree", methodType(String.class)); 170*795d594fSAndroid Build Coastguard Worker INTERFACE_FOUR_METHOD = MethodHandles.lookup() 171*795d594fSAndroid Build Coastguard Worker .findVirtual(Interface4.class, "methodFour", methodType(String.class)); 172*795d594fSAndroid Build Coastguard Worker FOO_AND_FOO_CONFLICT_DEFAULT = MethodHandles.lookup() 173*795d594fSAndroid Build Coastguard Worker .findVirtual(FooAndFooConflict.class, "defaultToOverride", methodType(String.class)); 174*795d594fSAndroid Build Coastguard Worker BASE_INTERFACE = MethodHandles.lookup() 175*795d594fSAndroid Build Coastguard Worker .findVirtual(BaseInterface.class, "method", methodType(String.class)); 176*795d594fSAndroid Build Coastguard Worker } catch (Exception e) { 177*795d594fSAndroid Build Coastguard Worker throw new RuntimeException(e); 178*795d594fSAndroid Build Coastguard Worker } 179*795d594fSAndroid Build Coastguard Worker } 180*795d594fSAndroid Build Coastguard Worker repeat(int times, Class<?> clazz)181*795d594fSAndroid Build Coastguard Worker private static Class<?>[] repeat(int times, Class<?> clazz) { 182*795d594fSAndroid Build Coastguard Worker Class<?>[] classes = new Class<?>[times]; 183*795d594fSAndroid Build Coastguard Worker Arrays.fill(classes, clazz); 184*795d594fSAndroid Build Coastguard Worker return classes; 185*795d594fSAndroid Build Coastguard Worker } 186*795d594fSAndroid Build Coastguard Worker repeat(int times, Class<?> first, Class<?> second)187*795d594fSAndroid Build Coastguard Worker private static Class<?>[] repeat(int times, Class<?> first, Class<?> second) { 188*795d594fSAndroid Build Coastguard Worker Class<?>[] classes = new Class<?>[times * 2]; 189*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < 2 * times;) { 190*795d594fSAndroid Build Coastguard Worker classes[i++] = first; 191*795d594fSAndroid Build Coastguard Worker classes[i++] = second; 192*795d594fSAndroid Build Coastguard Worker } 193*795d594fSAndroid Build Coastguard Worker return classes; 194*795d594fSAndroid Build Coastguard Worker } 195*795d594fSAndroid Build Coastguard Worker 196*795d594fSAndroid Build Coastguard Worker @Override $noinline$privateMethods()197*795d594fSAndroid Build Coastguard Worker void $noinline$privateMethods() throws Throwable { 198*795d594fSAndroid Build Coastguard Worker assertEquals("boo", (String) PRIVATE_INTERFACE_METHOD.invokeExact((I) new A())); 199*795d594fSAndroid Build Coastguard Worker 200*795d594fSAndroid Build Coastguard Worker int privateIntA = (int) A_PRIVATE_RETURN_INT.invokeExact(new A()); 201*795d594fSAndroid Build Coastguard Worker assertEquals(1042, privateIntA); 202*795d594fSAndroid Build Coastguard Worker 203*795d594fSAndroid Build Coastguard Worker int privateIntB = (int) B_PRIVATE_RETURN_INT.invokeExact(new B()); 204*795d594fSAndroid Build Coastguard Worker assertEquals(9999, privateIntB); 205*795d594fSAndroid Build Coastguard Worker 206*795d594fSAndroid Build Coastguard Worker privateIntB = (int) B_PRIVATE_RETURN_INT.invokeExact((B) new A()); 207*795d594fSAndroid Build Coastguard Worker assertEquals(9999, privateIntB); 208*795d594fSAndroid Build Coastguard Worker } 209*795d594fSAndroid Build Coastguard Worker 210*795d594fSAndroid Build Coastguard Worker @Override voidMethod()211*795d594fSAndroid Build Coastguard Worker public MethodHandle voidMethod() { 212*795d594fSAndroid Build Coastguard Worker return VOID_METHOD; 213*795d594fSAndroid Build Coastguard Worker } 214*795d594fSAndroid Build Coastguard Worker 215*795d594fSAndroid Build Coastguard Worker @Override returnDouble()216*795d594fSAndroid Build Coastguard Worker public MethodHandle returnDouble() { 217*795d594fSAndroid Build Coastguard Worker return RETURN_DOUBLE; 218*795d594fSAndroid Build Coastguard Worker } 219*795d594fSAndroid Build Coastguard Worker 220*795d594fSAndroid Build Coastguard Worker @Override returnInt()221*795d594fSAndroid Build Coastguard Worker public MethodHandle returnInt() { 222*795d594fSAndroid Build Coastguard Worker return RETURN_INT; 223*795d594fSAndroid Build Coastguard Worker } 224*795d594fSAndroid Build Coastguard Worker 225*795d594fSAndroid Build Coastguard Worker @Override interfaceDefaultMethod()226*795d594fSAndroid Build Coastguard Worker public MethodHandle interfaceDefaultMethod() { 227*795d594fSAndroid Build Coastguard Worker return INTERFACE_DEFAULT_METHOD; 228*795d594fSAndroid Build Coastguard Worker } 229*795d594fSAndroid Build Coastguard Worker 230*795d594fSAndroid Build Coastguard Worker @Override overwrittenInterfaceDefaultMethod()231*795d594fSAndroid Build Coastguard Worker public MethodHandle overwrittenInterfaceDefaultMethod() { 232*795d594fSAndroid Build Coastguard Worker return OVERWRITTEN_INTERFACE_DEFAULT_METHOD; 233*795d594fSAndroid Build Coastguard Worker } 234*795d594fSAndroid Build Coastguard Worker 235*795d594fSAndroid Build Coastguard Worker @Override exceptionThrowingMethod()236*795d594fSAndroid Build Coastguard Worker public MethodHandle exceptionThrowingMethod() { 237*795d594fSAndroid Build Coastguard Worker return EXCEPTION_THROWING_METHOD; 238*795d594fSAndroid Build Coastguard Worker } 239*795d594fSAndroid Build Coastguard Worker 240*795d594fSAndroid Build Coastguard Worker @Override staticMethod()241*795d594fSAndroid Build Coastguard Worker public MethodHandle staticMethod() { 242*795d594fSAndroid Build Coastguard Worker return STATIC_METHOD; 243*795d594fSAndroid Build Coastguard Worker } 244*795d594fSAndroid Build Coastguard Worker 245*795d594fSAndroid Build Coastguard Worker @Override sumI()246*795d594fSAndroid Build Coastguard Worker public MethodHandle sumI() { 247*795d594fSAndroid Build Coastguard Worker return SUM_I; 248*795d594fSAndroid Build Coastguard Worker } 249*795d594fSAndroid Build Coastguard Worker 250*795d594fSAndroid Build Coastguard Worker @Override sum2I()251*795d594fSAndroid Build Coastguard Worker public MethodHandle sum2I() { 252*795d594fSAndroid Build Coastguard Worker return SUM_2I; 253*795d594fSAndroid Build Coastguard Worker } 254*795d594fSAndroid Build Coastguard Worker 255*795d594fSAndroid Build Coastguard Worker @Override sum3I()256*795d594fSAndroid Build Coastguard Worker public MethodHandle sum3I() { 257*795d594fSAndroid Build Coastguard Worker return SUM_3I; 258*795d594fSAndroid Build Coastguard Worker } 259*795d594fSAndroid Build Coastguard Worker 260*795d594fSAndroid Build Coastguard Worker @Override sum4I()261*795d594fSAndroid Build Coastguard Worker public MethodHandle sum4I() { 262*795d594fSAndroid Build Coastguard Worker return SUM_4I; 263*795d594fSAndroid Build Coastguard Worker } 264*795d594fSAndroid Build Coastguard Worker 265*795d594fSAndroid Build Coastguard Worker @Override sum5I()266*795d594fSAndroid Build Coastguard Worker public MethodHandle sum5I() { 267*795d594fSAndroid Build Coastguard Worker return SUM_5I; 268*795d594fSAndroid Build Coastguard Worker } 269*795d594fSAndroid Build Coastguard Worker 270*795d594fSAndroid Build Coastguard Worker @Override sum6I()271*795d594fSAndroid Build Coastguard Worker public MethodHandle sum6I() { 272*795d594fSAndroid Build Coastguard Worker return SUM_6I; 273*795d594fSAndroid Build Coastguard Worker } 274*795d594fSAndroid Build Coastguard Worker 275*795d594fSAndroid Build Coastguard Worker @Override sum7I()276*795d594fSAndroid Build Coastguard Worker public MethodHandle sum7I() { 277*795d594fSAndroid Build Coastguard Worker return SUM_7I; 278*795d594fSAndroid Build Coastguard Worker } 279*795d594fSAndroid Build Coastguard Worker 280*795d594fSAndroid Build Coastguard Worker @Override sum8I()281*795d594fSAndroid Build Coastguard Worker public MethodHandle sum8I() { 282*795d594fSAndroid Build Coastguard Worker return SUM_8I; 283*795d594fSAndroid Build Coastguard Worker } 284*795d594fSAndroid Build Coastguard Worker 285*795d594fSAndroid Build Coastguard Worker @Override sum9I()286*795d594fSAndroid Build Coastguard Worker public MethodHandle sum9I() { 287*795d594fSAndroid Build Coastguard Worker return SUM_9I; 288*795d594fSAndroid Build Coastguard Worker } 289*795d594fSAndroid Build Coastguard Worker 290*795d594fSAndroid Build Coastguard Worker @Override sum10I()291*795d594fSAndroid Build Coastguard Worker public MethodHandle sum10I() { 292*795d594fSAndroid Build Coastguard Worker return SUM_10I; 293*795d594fSAndroid Build Coastguard Worker } 294*795d594fSAndroid Build Coastguard Worker 295*795d594fSAndroid Build Coastguard Worker @Override sumIJ()296*795d594fSAndroid Build Coastguard Worker public MethodHandle sumIJ() { 297*795d594fSAndroid Build Coastguard Worker return SUM_IJ; 298*795d594fSAndroid Build Coastguard Worker } 299*795d594fSAndroid Build Coastguard Worker 300*795d594fSAndroid Build Coastguard Worker @Override sum2IJ()301*795d594fSAndroid Build Coastguard Worker public MethodHandle sum2IJ() { 302*795d594fSAndroid Build Coastguard Worker return SUM_2IJ; 303*795d594fSAndroid Build Coastguard Worker } 304*795d594fSAndroid Build Coastguard Worker 305*795d594fSAndroid Build Coastguard Worker @Override sum3IJ()306*795d594fSAndroid Build Coastguard Worker public MethodHandle sum3IJ() { 307*795d594fSAndroid Build Coastguard Worker return SUM_3IJ; 308*795d594fSAndroid Build Coastguard Worker } 309*795d594fSAndroid Build Coastguard Worker 310*795d594fSAndroid Build Coastguard Worker @Override sum4IJ()311*795d594fSAndroid Build Coastguard Worker public MethodHandle sum4IJ() { 312*795d594fSAndroid Build Coastguard Worker return SUM_4IJ; 313*795d594fSAndroid Build Coastguard Worker } 314*795d594fSAndroid Build Coastguard Worker 315*795d594fSAndroid Build Coastguard Worker @Override sum5IJ()316*795d594fSAndroid Build Coastguard Worker public MethodHandle sum5IJ() { 317*795d594fSAndroid Build Coastguard Worker return SUM_5IJ; 318*795d594fSAndroid Build Coastguard Worker } 319*795d594fSAndroid Build Coastguard Worker 320*795d594fSAndroid Build Coastguard Worker @Override fooNonDefault()321*795d594fSAndroid Build Coastguard Worker public MethodHandle fooNonDefault() { 322*795d594fSAndroid Build Coastguard Worker return FOO_NONDEFAULT; 323*795d594fSAndroid Build Coastguard Worker } 324*795d594fSAndroid Build Coastguard Worker 325*795d594fSAndroid Build Coastguard Worker @Override fooBarImplNonDefault()326*795d594fSAndroid Build Coastguard Worker public MethodHandle fooBarImplNonDefault() { 327*795d594fSAndroid Build Coastguard Worker return FOOBARIMPL_NONDEFAULT; 328*795d594fSAndroid Build Coastguard Worker } 329*795d594fSAndroid Build Coastguard Worker 330*795d594fSAndroid Build Coastguard Worker @Override barDefault()331*795d594fSAndroid Build Coastguard Worker public MethodHandle barDefault() { 332*795d594fSAndroid Build Coastguard Worker return BAR_DEFAULT; 333*795d594fSAndroid Build Coastguard Worker } 334*795d594fSAndroid Build Coastguard Worker 335*795d594fSAndroid Build Coastguard Worker @Override fooDefault()336*795d594fSAndroid Build Coastguard Worker public MethodHandle fooDefault() { 337*795d594fSAndroid Build Coastguard Worker return FOO_DEFAULT; 338*795d594fSAndroid Build Coastguard Worker } 339*795d594fSAndroid Build Coastguard Worker 340*795d594fSAndroid Build Coastguard Worker @Override fooBarImplDefault()341*795d594fSAndroid Build Coastguard Worker public MethodHandle fooBarImplDefault() { 342*795d594fSAndroid Build Coastguard Worker return FOOBARIMPL_DEFAULT; 343*795d594fSAndroid Build Coastguard Worker } 344*795d594fSAndroid Build Coastguard Worker 345*795d594fSAndroid Build Coastguard Worker @Override fooNonOverriddenDefault()346*795d594fSAndroid Build Coastguard Worker public MethodHandle fooNonOverriddenDefault() { 347*795d594fSAndroid Build Coastguard Worker return FOO_NONOVERRIDDEN_DEFAULT; 348*795d594fSAndroid Build Coastguard Worker } 349*795d594fSAndroid Build Coastguard Worker 350*795d594fSAndroid Build Coastguard Worker @Override barNonOverriddenDefault()351*795d594fSAndroid Build Coastguard Worker public MethodHandle barNonOverriddenDefault() { 352*795d594fSAndroid Build Coastguard Worker return BAR_NONOVERRIDDEN_DEFAULT; 353*795d594fSAndroid Build Coastguard Worker } 354*795d594fSAndroid Build Coastguard Worker 355*795d594fSAndroid Build Coastguard Worker @Override fooBarDefinedInAbstract()356*795d594fSAndroid Build Coastguard Worker public MethodHandle fooBarDefinedInAbstract() { 357*795d594fSAndroid Build Coastguard Worker return FOOBAR_DEFINEDINABSTRACT; 358*795d594fSAndroid Build Coastguard Worker } 359*795d594fSAndroid Build Coastguard Worker 360*795d594fSAndroid Build Coastguard Worker @Override fooBarImplDefinedInAbstract()361*795d594fSAndroid Build Coastguard Worker public MethodHandle fooBarImplDefinedInAbstract() { 362*795d594fSAndroid Build Coastguard Worker return FOOBARIMPL_DEFINEDINABSTRACT; 363*795d594fSAndroid Build Coastguard Worker } 364*795d594fSAndroid Build Coastguard Worker 365*795d594fSAndroid Build Coastguard Worker @Override fooBarNonDefault()366*795d594fSAndroid Build Coastguard Worker public MethodHandle fooBarNonDefault() { 367*795d594fSAndroid Build Coastguard Worker return FOOBAR_NONDEFAULT; 368*795d594fSAndroid Build Coastguard Worker } 369*795d594fSAndroid Build Coastguard Worker 370*795d594fSAndroid Build Coastguard Worker @Override toStringDefinedInAnInterface()371*795d594fSAndroid Build Coastguard Worker public MethodHandle toStringDefinedInAnInterface() { 372*795d594fSAndroid Build Coastguard Worker return TO_STRING_DEFINED_IN_AN_INTERFACE; 373*795d594fSAndroid Build Coastguard Worker } 374*795d594fSAndroid Build Coastguard Worker 375*795d594fSAndroid Build Coastguard Worker @Override optionalGet()376*795d594fSAndroid Build Coastguard Worker public MethodHandle optionalGet() { 377*795d594fSAndroid Build Coastguard Worker return OPTIONAL_GET; 378*795d594fSAndroid Build Coastguard Worker } 379*795d594fSAndroid Build Coastguard Worker 380*795d594fSAndroid Build Coastguard Worker @Override interfaceOneMethod()381*795d594fSAndroid Build Coastguard Worker public MethodHandle interfaceOneMethod() { 382*795d594fSAndroid Build Coastguard Worker return INTERFACE_ONE_METHOD; 383*795d594fSAndroid Build Coastguard Worker } 384*795d594fSAndroid Build Coastguard Worker 385*795d594fSAndroid Build Coastguard Worker @Override interfaceTwoMethod()386*795d594fSAndroid Build Coastguard Worker public MethodHandle interfaceTwoMethod() { 387*795d594fSAndroid Build Coastguard Worker return INTERFACE_TWO_METHOD; 388*795d594fSAndroid Build Coastguard Worker } 389*795d594fSAndroid Build Coastguard Worker 390*795d594fSAndroid Build Coastguard Worker @Override interfaceThreeMethod()391*795d594fSAndroid Build Coastguard Worker public MethodHandle interfaceThreeMethod() { 392*795d594fSAndroid Build Coastguard Worker return INTERFACE_THREE_METHOD; 393*795d594fSAndroid Build Coastguard Worker } 394*795d594fSAndroid Build Coastguard Worker 395*795d594fSAndroid Build Coastguard Worker @Override interfaceFourMethod()396*795d594fSAndroid Build Coastguard Worker public MethodHandle interfaceFourMethod() { 397*795d594fSAndroid Build Coastguard Worker return INTERFACE_FOUR_METHOD; 398*795d594fSAndroid Build Coastguard Worker } 399*795d594fSAndroid Build Coastguard Worker 400*795d594fSAndroid Build Coastguard Worker @Override fooAndFooConflictDefault()401*795d594fSAndroid Build Coastguard Worker public MethodHandle fooAndFooConflictDefault() { 402*795d594fSAndroid Build Coastguard Worker return FOO_AND_FOO_CONFLICT_DEFAULT; 403*795d594fSAndroid Build Coastguard Worker } 404*795d594fSAndroid Build Coastguard Worker 405*795d594fSAndroid Build Coastguard Worker @Override baseInterface()406*795d594fSAndroid Build Coastguard Worker public MethodHandle baseInterface() { 407*795d594fSAndroid Build Coastguard Worker return BASE_INTERFACE; 408*795d594fSAndroid Build Coastguard Worker } 409*795d594fSAndroid Build Coastguard Worker } 410