# HG changeset patch # User iignatyev # Date 1525897628 25200 # Wed May 09 13:27:08 2018 -0700 # Node ID b5a9f51b01a52b7951af56a35730f566bebf7caa # Parent 35b22ca681d1ee03c5e63449f561c26ecf9d0b69 @library diff --git a/make/test/JtregNativeHotspot.gmk b/make/test/JtregNativeHotspot.gmk --- a/make/test/JtregNativeHotspot.gmk +++ b/make/test/JtregNativeHotspot.gmk @@ -78,6 +78,17 @@ -I$(VM_TESTBASE_DIR)/nsk/share/native \ -I$(VM_TESTBASE_DIR)/nsk/share/locks +MLVM_JVMTI_INCLUDES := \ + -I$(VM_TESTBASE_DIR)/nsk/share/native \ + -I$(VM_TESTBASE_DIR)/nsk/share/jni \ + -I$(VM_TESTBASE_DIR)/nsk/share/jvmti \ + -I$(VM_TESTBASE_DIR)/nsk/share/jvmti/agent_common \ + -I$(VM_TESTBASE_DIR)/vm/mlvm/share + +MLVM_STRESS_INCLUDES := \ + -I$(VM_TESTBASE_DIR)/nsk/share/native \ + -I$(VM_TESTBASE_DIR)/nsk/share/jni + BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libProcessUtils := $(VM_SHARE_INCLUDES) BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libThreadController := $(NSK_MONITORING_INCLUDES) @@ -95,6 +106,11 @@ BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libLockingThread := $(NSK_SHARE_LOCKS_INCLUDES) BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libJNIMonitorLocker := $(NSK_SHARE_LOCKS_INCLUDES) +BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libstepBreakPopReturn := $(MLVM_JVMTI_INCLUDES) +BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libIndyRedefineClass := $(MLVM_JVMTI_INCLUDES) + +BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libnativeAndMH := $(MLVM_STRESS_INCLUDES) + ################################################################################ # Platform specific setup @@ -105,6 +121,8 @@ ifeq ($(OPENJDK_TARGET_OS), linux) BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rw := -z noexecstack BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rwx := -z execstack + BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libstepBreakPopReturn := -lpthread + BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libIndyRedefineClass := -lpthread BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exeinvoke := -ljvm -lpthread BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exestack-gap := -ljvm -lpthread BUILD_TEST_exeinvoke_exeinvoke.c_OPTIMIZATION := NONE diff --git a/test/hotspot/jtreg/ProblemList-graal.txt b/test/hotspot/jtreg/ProblemList-graal.txt --- a/test/hotspot/jtreg/ProblemList-graal.txt +++ b/test/hotspot/jtreg/ProblemList-graal.txt @@ -135,3 +135,6 @@ vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses028/TestDescription.java 8195627 generic-all vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses030/TestDescription.java 8195627 generic-all +vmTestbase/vm/mlvm/anonloader/stress/oome/heap/Test.java 8186299 generic-all +vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/Test.java 8186299 generic-all + diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -123,4 +123,23 @@ vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l005/TestDescription.java 8068225 generic-all vmTestbase/nsk/jdi/stress/ClassPrepareEvents/ClassPrepareEvents001/ClassPrepareEvents001.java 6426321 generic-all +vmTestbase/vm/mlvm/indy/func/jdi/breakpointOtherStratum/Test.java 8199578 generic-all +vmTestbase/vm/mlvm/indy/func/jdi/breakpoint/Test.java 8199578 generic-all +vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/TestDescription.java 8013267 generic-all +vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/Test.java 8079664 generic-all +vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/Test.java 8079664 generic-all +vmTestbase/vm/mlvm/meth/func/java/throwException/Test.java 8079714 generic-all +vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/Test.java 8079713,8079714 generic-all +vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/Test.java 8079642,8079714 generic-all +vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/Test.java 8079714 generic-all +vmTestbase/vm/mlvm/meth/stress/compiler/sequences/Test.java 8079714 generic-all +vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/Test.java 8079714 generic-all +vmTestbase/vm/mlvm/meth/stress/java/sequences/Test.java 8079714 generic-all +vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/Test.java 8079714 generic-all +vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TestDescription.java 8055376 generic-all +vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/INDIFY_Test.java 8079650 generic-all +vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TestDescription.java 8013267 generic-all +vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TestDescription.java 8013267 generic-all +vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TestDescription.java 8013267 generic-all + ############################################################################# diff --git a/test/hotspot/jtreg/TEST.groups b/test/hotspot/jtreg/TEST.groups --- a/test/hotspot/jtreg/TEST.groups +++ b/test/hotspot/jtreg/TEST.groups @@ -1149,3 +1149,6 @@ vmTestbase/nsk/jdi/StackFrame/getArgumentValues/getArgumentValues002/getArgumentValues002.java \ vmTestbase/nsk/jdi/StackFrame/getArgumentValues/getArgumentValues003/getArgumentValues003.java +# JSR292 tests (invokedynamic AKA Multi-Language VM AKA Da Vinci Machine) +vmTestbase_vm_mlvm = \ + vmTestbase/vm/mlvm diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/Injector.c b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/Injector.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/Injector.c @@ -0,0 +1,1207 @@ +/* + * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include "jni_tools.h" +#include "jvmti_tools.h" +#include "Injector.h" + +/* ========================================================================== */ + +/* Opcode Lengths */ +static const u1 opcLengths[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 3, /* 0- 19 */ + 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 20- 39 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, /* 40- 59 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 60- 79 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 80- 99 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 100-119 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, /* 120-139 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, /* 140-159 */ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 0, 0, 1, 1, 1, 1, 1, 1, 3, 3, /* 160-179 */ + 3, 3, 3, 3, 3, 5, 5, 3, 2, 3, 1, 1, 3, 3, 1, 1, 0, 4, 3, 3, /* 180-199 */ + 5, 5, 1 /* 200- */ +}; + +static const int GROWTH_FACTOR = 2; +static const char* codeAttributeName = "Code"; +static const char* lineNumberAttributeName = "LineNumberTable"; +static const char* localVarAttributeName = "LocalVariableTable"; +static const char* localVarTypeAttributeName = "LocalVariableTypeTable"; +static const char* stackMapAttributeName= "StackMapTable"; + +static u2 codeAttributeIndex; +static u2 lineNumberAttributeIndex; +static u2 localVarAttributeIndex; +static u2 localVarTypeAttributeIndex; +static u2 stackMapAttributeIndex; + +static const u1 SAME_BEGIN = 0; +static const u1 SAME_END = 63; + +static const u1 SAME_LOCALS_1_STACK_ITEM_BEGIN = 64; +static const u1 SAME_LOCALS_1_STACK_ITEM_END = 127; + +//Tags in the range [128-246] are reserved for future use. + +static const u1 SAME_LOCALS_1_STACK_ITEM_EXTENDED = 247; + +static const u1 CHOP_BEGIN = 248; +static const u1 CHOP_END = 250; + +static const u1 SAME_FRAME_EXTENDED = 251; + +static const u1 APPEND_BEGIN = 252; +static const u1 APPEND_END = 254; + +static const u1 FULL_FRAME = 255; + +static const u1 ITEM_Object = 7; +static const u1 ITEM_Uninitialized = 8; + +static u2 stackFrameOffset = 0; + +static int mode; +static const u1* orig; +static u1* gen; + +static u1* inputPos; +static const u1* endPos; +static u1* genPos; +static u1* markPos; + +static char** constantPool; +static u2 constantPoolSize; +static u2 constantPoolCount; + +static u1 callBytes[] = { opc_invokestatic, 0, 0 }; +static u1 allocBytes[] = { opc_invokestatic, 0, 0 }; +static u1 zeroBytes[] = { 0, 0, 0 }; + +static u4 codeLength; +static u4* map; +static jbyte* widening; + +/* ========================================================================== */ + +#ifdef __cplusplus +extern "C" { +#endif + + static u1 get_u1() { + return *inputPos++; + } + + static u2 get_u2() { + u1* p = inputPos; + inputPos += 2; + return (u2)p[1] | ((u2)p[0]<<8); + } + + static u4 get_u4() { + u1* p = inputPos; + inputPos += 4; + return (u4)p[3] | ((u4)p[2]<<8) | ((u4)p[1]<<16) | ((u4)p[0]<<24); + } + + static void put_u1(u1 v) { + *genPos++ = v; + } + + static void put_u2(u2 v) { + *genPos++ = (u1)(v>>8); + *genPos++ = (u1)(v & 0xFF); + } + + static void put_u4(u4 v) { + *genPos++ = (u1)(v>>24); + *genPos++ = (u1)(v>>16); + *genPos++ = (u1)(v>>8); + *genPos++ = (u1)(v & 0xFF); + } + + static void set_u4(u1* pos, u4 v) { + *pos++ = (u1)(v>>24); + *pos++ = (u1)(v>>16); + *pos++ = (u1)(v>>8); + *pos++ = (u1)(v & 0xFF); + } + + static u1 copy_u1() { + u1 v = get_u1(); + put_u1(v); + return v; + } + + static u2 copy_u2() { + u2 v = get_u2(); + put_u2(v); + return v; + } + + static u4 copy_u4() { + u4 v = get_u4(); + put_u4(v); + return v; + } + + static void copy(int count) { + memcpy(genPos, inputPos, count); + inputPos += count; + genPos += count; + } + + static void skip(int count) { + inputPos += count; + } + + static void get(u1* bytes, int count) { + memcpy(bytes, inputPos, count); + inputPos += count; + } + + static void put(u1* bytes, int count) { + memcpy(genPos, bytes, count); + genPos += count; + } + + static void markLocalPositionStart() { + markPos = inputPos; + } + + static u4 localPosition() { + return (u4) (inputPos - markPos); + } + + void recallPosition() { + inputPos = markPos; + } + + static u4 generatedPosition() { + return (u4) (genPos - gen); + } + + static void randomAccessWriteU2(int pos, u2 v) { + gen[pos] = (u1)(v>>8); + gen[pos+1] = (u1)(v & 0xFF); + } + + static void randomAccessWriteU4(int pos, u4 v) { + gen[pos] = (u1)(v>>24); + gen[pos+1] = (u1)(v>>16); + gen[pos+2] = (u1)(v>>8); + gen[pos+3] = (u1)(v & 0xFF); + } + + static int copyConstantPool(u2 constantPoolCount) { + u2 i; + u2 len; + char* utf8; + + constantPoolSize = constantPoolCount; + + NSK_DISPLAY1("copying ConstantPool: %d\n", constantPoolSize); + constantPool = (char**) malloc(constantPoolSize * sizeof(char*)); + if (!NSK_VERIFY(constantPool != NULL)) { + NSK_COMPLAIN0("out of memory\n"); + return NSK_FALSE; + } + + memset(constantPool, 0, constantPoolSize * sizeof(char*)); + + codeAttributeIndex = 0; + lineNumberAttributeIndex = 0; + localVarAttributeIndex = 0; + localVarTypeAttributeIndex = 0; + stackMapAttributeIndex = 0; + + for (i = 1; i < constantPoolSize; i++) { + u1 tag = copy_u1(); + switch (tag) { + case CONSTANT_Class: + case CONSTANT_String: + case CONSTANT_MethodType: + copy(2); + break; + case CONSTANT_MethodHandle: + copy(3); + break; + case CONSTANT_Fieldref: + case CONSTANT_Methodref: + case CONSTANT_InterfaceMethodref: + case CONSTANT_Integer: + case CONSTANT_Float: + case CONSTANT_NameAndType: + case CONSTANT_InvokeDynamic: + copy(4); + break; + case CONSTANT_Long: + case CONSTANT_Double: + copy(8); + i++; /* takes two CP entries */ + break; + case CONSTANT_Utf8: + len = copy_u2(); + utf8 = (char*) malloc(len + 1); + if (!NSK_VERIFY(utf8 != NULL)) { + NSK_COMPLAIN0("out of memory\n"); + return NSK_FALSE; + } + get((u1*) utf8, len); + utf8[len] = 0; + constantPool[i] = utf8; + if (strcmp(utf8, codeAttributeName) == 0) { + codeAttributeIndex = i; + } else if (strcmp(utf8, lineNumberAttributeName) == 0) { + lineNumberAttributeIndex = i; + } else if (strcmp(utf8, localVarAttributeName) == 0) { + localVarAttributeIndex = i; + } else if (strcmp(utf8, localVarTypeAttributeName) == 0) { + localVarTypeAttributeIndex = i; + } else if (strcmp(utf8, stackMapAttributeName) == 0) { + stackMapAttributeIndex = i; + } + put((u1*) utf8, len); + break; + default: + NSK_COMPLAIN2("%d unexpected constant pool tag: %d\n", i, tag); + return NSK_FALSE; + } + } + + return NSK_TRUE; + } + + static void freeConstantPool() { + u2 i; + + for (i = 1; i < constantPoolSize; i++) { + if (constantPool[i] != NULL) { + free(constantPool[i]); + } + } + + free(constantPool); + } + + /* ========================================================================== */ + + /* Copy the exception table for this method code */ + static void copyExceptionTable() { + u2 tableLength; + u2 i; + + tableLength = copy_u2(); + NSK_DISPLAY1("ExceptionTable length: %d\n", tableLength); + for (i = tableLength; i > 0; i--) { + put_u2((u2) map[get_u2()]); /* start_pc */ + put_u2((u2) map[get_u2()]); /* end_pc */ + put_u2((u2) map[get_u2()]); /* handler_pc */ + copy(2); /* catch_type */ + } + } + + /* Copy the line number table for this method code */ + static void copyLineNumberAttr() { + u2 tableLength; + u2 i; + + copy(4); /* attr len */ + + tableLength = copy_u2(); + + NSK_DISPLAY1("LineNumberTable length: %d\n", tableLength); + for (i = tableLength; i > 0; i--) { + put_u2((u2) map[get_u2()]); /* start_pc */ + copy(2); /* line_number */ + } + } + + /* Copy the local variable table for this method code */ + static void copyLocalVarAttr() { + u2 tableLength; + u2 startPC; + u2 i; + + copy(4); /* attr len */ + + tableLength = copy_u2(); + + NSK_DISPLAY1("LocalVariableTable length: %d\n", tableLength); + for (i = tableLength; i > 0; i--) { + startPC = get_u2(); + put_u2((u2) map[startPC]); /* start_pc */ + put_u2((u2) (map[startPC + get_u2()] - map[startPC])); /* length */ + copy(6); /* name_index, descriptor_index, index */ + } + } + + /* Copy the local variable type table for this method code */ + static void copyLocalVarTypeAttr() { + u2 tableLength; + u2 startPC; + u2 i; + + copy(4); /* attr len */ + + tableLength = copy_u2(); + + NSK_DISPLAY1("LocalVariableTypeTable length: %d\n", tableLength); + for (i = tableLength; i > 0; i--) { + startPC = get_u2(); + put_u2((u2) map[startPC]); /* start_pc */ + put_u2((u2) (map[startPC + get_u2()] - map[startPC])); /* length */ + copy(6); /* name_index, signature_index, index */ + } + } + + static u2 calculateOffsetDelta(u2 frameNumber, u2 frameOffsetDelta) { + u2 oldOffset; + u2 newOffset; + if(frameNumber == 0) { + stackFrameOffset = frameOffsetDelta; + return (u2) map[stackFrameOffset]; + } else { + oldOffset = (u2) map[stackFrameOffset]; + stackFrameOffset = stackFrameOffset + frameOffsetDelta + 1; + newOffset = (u2) map[stackFrameOffset - 1]; + return newOffset - oldOffset; + } + } + + static void copyVerificationTypeInfo(u2 count) { + u2 i; + u2 offset; + u1 tag; + for(i=0; i= SAME_BEGIN) && (frame_type <= SAME_END)) { + // same_frame { + // u1 frame_type = SAME; /* 0-63 */ + // } + + put_u1(SAME_FRAME_EXTENDED); + put_u2(calculateOffsetDelta(i, (u2) frame_type)); + + } else if((frame_type >= SAME_LOCALS_1_STACK_ITEM_BEGIN) && (frame_type<=SAME_LOCALS_1_STACK_ITEM_END)) { + // same_locals_1_stack_item_frame { + // u1 frame_type = SAME_LOCALS_1_STACK_ITEM;/* 64-127 */ + // verification_type_info stack[1]; + // } + + put_u1(SAME_LOCALS_1_STACK_ITEM_EXTENDED); + put_u2(calculateOffsetDelta(i, (u2) (frame_type-64))); + copyVerificationTypeInfo(1); + + // Tags in the range [128-246] are reserved for future use. + } else if(frame_type == SAME_LOCALS_1_STACK_ITEM_EXTENDED) { + // same_locals_1_stack_item_frame_extended { + // u1 frame_type = SAME_LOCALS_1_STACK_ITEM_EXTENDED; /* 247 */ + // u2 offset_delta; + // verification_type_info stack[1]; + // } + + put_u1(SAME_LOCALS_1_STACK_ITEM_EXTENDED); + frameOffsetDelta = get_u2(); + put_u2(calculateOffsetDelta(i, frameOffsetDelta)); + copyVerificationTypeInfo(1); + + } else if((frame_type >= CHOP_BEGIN) && (frame_type <= CHOP_END)) { + // chop_frame { + // u1 frame_type = CHOP; /* 248-250 */ + // u2 offset_delta; + // } + put_u1((u1)frame_type); + frameOffsetDelta = get_u2(); + put_u2(calculateOffsetDelta(i, frameOffsetDelta)); + + } else if(frame_type == SAME_FRAME_EXTENDED) { + // same_frame_extended { + // u1 frame_type = SAME_FRAME_EXTENDED; /* 251 */ + // u2 offset_delta; + // } + + put_u1(SAME_FRAME_EXTENDED); + frameOffsetDelta = get_u2(); + put_u2(calculateOffsetDelta(i, frameOffsetDelta)); + + } else if((frame_type >= APPEND_BEGIN) && (frame_type <= APPEND_END)) { + // append_frame { + // u1 frame_type = APPEND; /* 252-254 */ + // u2 offset_delta; + // verification_type_info locals[frame_type - 251]; + // } + + put_u1((u1)frame_type); + frameOffsetDelta = get_u2(); + put_u2(calculateOffsetDelta(i, frameOffsetDelta)); + copyVerificationTypeInfo((u1)(frame_type - 251)); + + } else if(frame_type == FULL_FRAME) { + // sfull_frame { + // u1 frame_type = FULL_FRAME; /* 255 */ + // u2 offset_delta; + // u2 number_of_locals; + // verification_type_info locals[number_of_locals]; + // u2 number_of_stack_items; + // verification_type_info stack[number_of_stack_items]; + //} + + put_u1(FULL_FRAME); + frameOffsetDelta = get_u2(); + put_u2(calculateOffsetDelta(i, frameOffsetDelta)); + number_of_locals = copy_u2(); + copyVerificationTypeInfo(number_of_locals); + number_of_stack_items = copy_u2(); + copyVerificationTypeInfo(number_of_stack_items); + + } + + } + set_u4(lenPtr,(u4)((genPos-lenPtr) - 4)); + + } + + /* ========================================================================== */ + + static void injectBytes(u4 at, u4 len) { + u4 i; + + NSK_DISPLAY2("Injecting %d bytes at %d\n", len, at); + for (i = at; i <= codeLength; i++) { + map[i] += len; + } + } + + static void widen(u4 at, jbyte len) { + u4 i; + jbyte delta = len - widening[at]; + + NSK_DISPLAY2("Widening to %d bytes at %d\n", len, at); + /* mark at beginning of instruction */ + widening[at] = len; + /* inject at end of instruction */ + for (i = localPosition(); i <= codeLength; i++) { + map[i] += delta; + } + } + + /* ========================================================================== */ + + /** + * Walk one instruction writing the transformed instruction. + */ + static void writeInstruction() { + u4 pos = localPosition(); + u4 newPos = map[pos]; + u1 opcode = get_u1(); + + switch (opcode) { + + case opc_wide: + put_u1(opcode); + copy(copy_u1() == opc_iinc ? 4 : 2); + break; + + case opc_new: + case opc_newarray: + case opc_anewarray: + case opc_multianewarray: + put_u1(opcode); + copy(opcLengths[opcode] - 1); + if (mode == BCI_MODE_ALLOC) { + put(allocBytes, 3); + } + break; + + case opc_jsr_w: + case opc_goto_w: + put_u1(opcode); + put_u4(map[pos + get_u4()] - newPos); + break; + + case opc_jsr: + case opc_goto: + case opc_ifeq: + case opc_ifge: + case opc_ifgt: + case opc_ifle: + case opc_iflt: + case opc_ifne: + case opc_if_icmpeq: + case opc_if_icmpne: + case opc_if_icmpge: + case opc_if_icmpgt: + case opc_if_icmple: + case opc_if_icmplt: + case opc_if_acmpeq: + case opc_if_acmpne: + case opc_ifnull: + case opc_ifnonnull: { + u1 newOpcode = opcode; + jbyte widened = widening[pos]; + if (widened == 0) { /* not widened */ + put_u1(opcode); + put_u2((u2) (map[pos + (jshort) get_u2()] - newPos)); + } else if (widened == 2) { /* wide form */ + if (opcode == opc_jsr) { + newOpcode = opc_jsr_w; + } else if (opcode == opc_jsr) { + newOpcode = opc_goto_w; + } else { + NSK_COMPLAIN1("unexpected opcode: %d\n", opcode); + } + put_u1(newOpcode); + put_u4(map[pos + (jshort) get_u2()] - newPos); + } else if (widened == 5) { /* insert goto_w */ + switch (opcode) { + case opc_ifeq: + newOpcode = opc_ifne; + break; + case opc_ifge: + newOpcode = opc_iflt; + break; + case opc_ifgt: + newOpcode = opc_ifle; + break; + case opc_ifle: + newOpcode = opc_ifgt; + break; + case opc_iflt: + newOpcode = opc_ifge; + break; + case opc_ifne: + newOpcode = opc_ifeq; + break; + case opc_if_icmpeq: + newOpcode = opc_if_icmpne; + break; + case opc_if_icmpne: + newOpcode = opc_if_icmpeq; + break; + case opc_if_icmpge: + newOpcode = opc_if_icmplt; + break; + case opc_if_icmpgt: + newOpcode = opc_if_icmple; + break; + case opc_if_icmple: + newOpcode = opc_if_icmpgt; + break; + case opc_if_icmplt: + newOpcode = opc_if_icmpge; + break; + case opc_if_acmpeq: + newOpcode = opc_if_acmpne; + break; + case opc_if_acmpne: + newOpcode = opc_if_acmpeq; + break; + case opc_ifnull: + newOpcode = opc_ifnonnull; + break; + case opc_ifnonnull: + newOpcode = opc_ifnull; + break; + default: + NSK_COMPLAIN1("unexpected opcode: %d\n", opcode); + break; + } + put_u1(newOpcode); /* write inverse branch */ + put_u1(3 + 5); /* beyond if and goto_w */ + put_u1(opc_goto_w); /* add a goto_w */ + put_u4(map[pos + (jshort) get_u2()] - newPos); + } else { + NSK_COMPLAIN2("unexpected widening: %d, pos=0x%x\n", + widened, pos); + } + break; + } + + case opc_tableswitch: { + u4 i, low, high; + + put_u1(opcode); + + /* skip old padding */ + skip(((pos+4) & (~3)) - (pos+1)); + + /* write new padding */ + put(zeroBytes, ((newPos+4) & (~3)) - (newPos+1)); + put_u4(map[pos + get_u4()] - newPos); + + low = copy_u4(); + high = copy_u4(); + for (i = low; i <= high; i++) { + put_u4(map[pos + get_u4()] - newPos); + } + + break; + } + + case opc_lookupswitch: { + u4 i, npairs; + + put_u1(opcode); + + /* skip old padding */ + skip(((pos+4) & (~3)) - (pos+1)); + + /* write new padding */ + put(zeroBytes, ((newPos+4) & (~3)) - (newPos+1)); + put_u4(map[pos + get_u4()] - newPos); + + npairs = copy_u4(); + for (i = npairs; i > 0; i--) { + copy_u4(); + put_u4(map[pos + get_u4()] - newPos); + } + + break; + } + + default: + put_u1(opcode); + copy(opcLengths[opcode] - 1); + break; + } + + } + + /* ========================================================================== */ + + /** + * Walk one instruction adjusting for insertions + */ + static int adjustInstruction() { + u4 pos = localPosition(); + u4 newPos = map[pos]; + u1 opcode = get_u1(); + + switch (opcode) { + + case opc_wide: + skip(get_u1() == opc_iinc ? 4 : 2); + break; + + case opc_jsr: + case opc_goto: + case opc_ifeq: + case opc_ifge: + case opc_ifgt: + case opc_ifle: + case opc_iflt: + case opc_ifne: + case opc_if_icmpeq: + case opc_if_icmpne: + case opc_if_icmpge: + case opc_if_icmpgt: + case opc_if_icmple: + case opc_if_icmplt: + case opc_if_acmpeq: + case opc_if_acmpne: + case opc_ifnull: + case opc_ifnonnull: { + jbyte widened = widening[pos]; + if (widened == 0) { /* not yet widened */ + jint delta = (jshort) get_u2(); + u4 target = pos + delta; + u4 newTarget = map[target]; + jint newDelta = newTarget - newPos; + if ((newDelta < -32768) || (newDelta > 32767)) { + if ((opcode == opc_jsr) || (opcode == opc_goto)) { + widen(pos, 2); /* will convert to wide */ + } else { + widen(pos, 5); /* will inject goto_w */ + } + return NSK_FALSE; /* cause restart */ + } + } + break; + } + + case opc_tableswitch: { + jbyte widened = widening[pos]; + u4 low; + jbyte deltaPadding; + + /* skip old padding and default */ + skip(((pos+4) & (~3)) - (pos+1) + 4); + low = get_u4(); + skip((get_u4() - low + 1) * 4); + + deltaPadding = ((newPos+4) & (~3)) - newPos - ((pos+4) & (~3)) + pos; + if (widened != deltaPadding) { + widen(pos, deltaPadding); + return NSK_FALSE; /* cause restart */ + } + break; + } + + case opc_lookupswitch: { + jbyte widened = widening[pos]; + jbyte deltaPadding; + + /* skip old padding and default */ + skip(((pos+4) & (~3)) - (pos+1) + 4); + skip(get_u4() * 8); + + deltaPadding = ((newPos+4) & (~3)) - newPos - ((pos+4) & (~3)) + pos; + if (widened != deltaPadding) { + widen(pos, deltaPadding); + return NSK_FALSE; /* cause restart */ + } + break; + } + + default: + skip(opcLengths[opcode] - 1); + break; + } + + return NSK_TRUE; + } + + /* ========================================================================== */ + + /** + * Walk one instruction inserting instrumentation at specified instructions + */ + static void insertAtInstruction() { + u4 pos = localPosition(); + u1 opcode = get_u1(); + + switch (opcode) { + + case opc_wide: + /* no support for instrumenting wide instructions */ + skip(get_u1() == opc_iinc ? 4 : 2); + break; + + case opc_new: + case opc_newarray: + case opc_anewarray: + case opc_multianewarray: + skip(opcLengths[opcode] - 1); + injectBytes(localPosition(), 3); + break; + + case opc_tableswitch: + /* skip 4-byte boundry padding and default */ + skip(((pos+4) & (~3)) - (pos+1) + 4); + { + u4 low = get_u4(); + skip((get_u4() - low + 1) * 4); + } + break; + + case opc_lookupswitch: + /* skip 4-byte boundry padding and default */ + skip(((pos+4) & (~3)) - (pos+1) + 4); + skip(get_u4() * 8); + break; + + default: + skip(opcLengths[opcode] - 1); + break; + + } + } + + static void adjustOffsets() { + recallPosition(); + + if (mode == BCI_MODE_CALL) { + /* instrument calls - method entry */ + injectBytes(0, 3); + } + + if (mode == BCI_MODE_ALLOC) { + /* instrument allocations */ + while (localPosition() < codeLength) { + insertAtInstruction(); + } + recallPosition(); + } + + NSK_DISPLAY0("Searching for adjustments...\n"); + while (localPosition() < codeLength) { + if (!adjustInstruction()) { + recallPosition(); + NSK_DISPLAY0("Restarting adjustments after change...\n"); + } + } + + NSK_DISPLAY0("Writing new code...\n"); + recallPosition(); + + if (mode == BCI_MODE_CALL) { + put(callBytes, 3); + } + + while (localPosition() < codeLength) { + writeInstruction(); + } + } + + /* ========================================================================== */ + + static void copyAttr() { + u4 len; + + copy(2); + len = copy_u4(); + NSK_DISPLAY1("attr len: %d\n", len); + copy(len); + } + + static void copyAttrs(u2 attrCount) { + u2 i; + + for (i = attrCount; i > 0; i--) { + copyAttr(); + } + } + + static void copyFields() { + u2 count; + u2 attrCount; + u2 i; + + count = copy_u2(); + NSK_DISPLAY1("fields count: %d\n", count); + for (i = count; i > 0; i--) { + /* access, name, descriptor */ + copy(2 + 2 + 2); + attrCount = copy_u2(); + NSK_DISPLAY1("field attrCount: %d\n", attrCount); + copyAttrs(attrCount); + } + } + + static void copyAttrForCode() { + u2 nameIndex = copy_u2(); + + /* check for Code attr */ + if (nameIndex == lineNumberAttributeIndex) { + copyLineNumberAttr(); + } else if (nameIndex == localVarAttributeIndex) { + copyLocalVarAttr(); + } else if (nameIndex == localVarTypeAttributeIndex) { + copyLocalVarTypeAttr(); + } else if (nameIndex == stackMapAttributeIndex) { + copyStackMapAttr(); + } else { + u4 len = copy_u4(); + NSK_DISPLAY1("code attr len: %d\n", len); + copy(len); + } + } + + static void copyCodeAttr(char* name) { + u4 attrLengthPos; + u4 attrLength; + u4 newAttrLength; + u4 codeLengthPos; + u4 newCodeLength; + u2 attrCount; + u4 i; + + attrLengthPos = generatedPosition(); + attrLength = copy_u4(); + + NSK_DISPLAY2("Code attr found: %s, pos=0x%x\n", name, + inputPos - orig - 6); + + /* max_stack, max_locals */ + copy(2 + 2); + + codeLengthPos = generatedPosition(); + codeLength = copy_u4(); + + if (codeLength == 0) { + NSK_COMPLAIN0("code_length must be greater than zero\n"); + return; + } + + if (mode == BCI_MODE_EMCP) { + /* copy remainder minus already copied */ + copy(attrLength - 8); + return; + } + + markLocalPositionStart(); + + map = (u4*) malloc((codeLength + 1) * sizeof(u4)); + for (i = 0; i <= codeLength; i++) { + map[i] = i; + } + + widening = (jbyte*) malloc(codeLength + 1); + memset(widening, 0, codeLength + 1); + + adjustOffsets(); + + /* fix up code length */ + newCodeLength = generatedPosition() - (codeLengthPos + 4); + randomAccessWriteU4(codeLengthPos, newCodeLength); + NSK_DISPLAY2("code length old: %d, new: %d\n", + codeLength, newCodeLength); + + copyExceptionTable(); + + attrCount = copy_u2(); + for (i = attrCount; i > 0; i--) { + copyAttrForCode(); + } + + free(map); + free(widening); + + /* fix up attr length */ + newAttrLength = generatedPosition() - (attrLengthPos + 4); + randomAccessWriteU4(attrLengthPos, newAttrLength); + NSK_DISPLAY2("attr length old: %d, new: %d\n", + attrLength, newAttrLength); + } + + static void copyAttrForMethod(char* name) { + u2 nameIndex; + + nameIndex = copy_u2(); + if (nameIndex == codeAttributeIndex) { + copyCodeAttr(name); + } else { + u4 len = copy_u4(); + + NSK_DISPLAY1("method attr len: %d\n", len); + copy(len); + } + } + + static void copyMethod() { + u2 accessFlags; + u2 methodNameIdx; + char* name; + u2 attrCount; + u2 i; + + accessFlags = copy_u2(); + methodNameIdx = copy_u2(); + name = constantPool[methodNameIdx]; + + /* descriptor */ + copy(2); + + attrCount = copy_u2(); + NSK_DISPLAY1("method attrCount: %d\n", attrCount); + for (i = attrCount; i > 0; i--) { + copyAttrForMethod(name); + } + } + + static void copyMethods() { + u2 count; + u2 i; + + count = copy_u2(); + NSK_DISPLAY1("methods count: %d\n", count); + for (i = count; i > 0; i--) { + copyMethod(); + } + } + + static u2 writeCPEntryUtf8(char* str) { + u2 i; + u2 len = (u2) strlen(str); + put_u1(CONSTANT_Utf8); + put_u2(len); + for (i = 0; i < len; i++) { + put_u1(str[i]); + } + return constantPoolCount++; + } + + static u2 writeCPEntryClass(u2 classNameIndex) { + put_u1(CONSTANT_Class); + put_u2(classNameIndex); + return constantPoolCount++; + } + + static u2 writeCPEntryNameAndType(u2 nameIndex, u2 descrIndex) { + put_u1(CONSTANT_NameAndType); + put_u2(nameIndex); + put_u2(descrIndex); + return constantPoolCount++; + } + + static u2 writeCPEntryMethodRef(u2 classIndex, u2 nameAndTypeIndex) { + put_u1(CONSTANT_Methodref); + put_u2(classIndex); + put_u2(nameAndTypeIndex); + return constantPoolCount++; + } + + static u2 writeCPEntryFieldRef(u2 classIndex, u2 nameAndTypeIndex) { + put_u1(CONSTANT_Fieldref); + put_u2(classIndex); + put_u2(nameAndTypeIndex); + return constantPoolCount++; + } + + static u2 addFieldToConstantPool(u2 classIndex, char* fieldName, char* descr) { + u2 fieldNameIndex = writeCPEntryUtf8(fieldName); + u2 descrIndex = writeCPEntryUtf8(descr); + u2 nameAndTypeIndex = writeCPEntryNameAndType(fieldNameIndex, descrIndex); + u2 fieldIndex = writeCPEntryFieldRef(classIndex, nameAndTypeIndex); + return fieldIndex; + } + + static u2 addMethodToConstantPool(u2 classIndex, char* methodName, char* descr) { + u2 methodNameIndex = writeCPEntryUtf8(methodName); + u2 descrIndex = writeCPEntryUtf8(descr); + u2 nameAndTypeIndex = writeCPEntryNameAndType(methodNameIndex, descrIndex); + u2 methodIndex = writeCPEntryMethodRef(classIndex, nameAndTypeIndex); + return methodIndex; + } + + static u2 addClassToConstantPool(char* className) { + u2 classNameIndex = writeCPEntryUtf8(className); + u2 classIndex = writeCPEntryClass(classNameIndex); + return classIndex; + } + + /* ========================================================================== */ + + int Inject(const u1* old_bytes, const jint old_length, + u1** new_bytes, jint* new_length, int bci_mode) { + u4 constantPoolCountPos; + u2 profiler; + u2 interfaceCount; + u2 attrCount; + + //printf("inject\n"); + NSK_DISPLAY3("Injecting bytecodes: mode=%d, bytes=0x%p, len=%d\n", + bci_mode, old_bytes, old_length); + + mode = bci_mode; + orig = old_bytes; + inputPos = (u1*) orig; + endPos = orig + old_length; + gen = (u1*) malloc(old_length * GROWTH_FACTOR); + if (!NSK_VERIFY(gen != NULL)) { + NSK_COMPLAIN0("out of memory\n"); + return NSK_FALSE; + } + + genPos = gen; + + /* magic + minor/major version */ + copy(4 + 2 + 2); + + constantPoolCountPos = generatedPosition(); + constantPoolCount = copy_u2(); + + /* copy old constant pool */ + if (!copyConstantPool(constantPoolCount)) { + return NSK_FALSE; + } + NSK_DISPLAY1("ConstantPool expanded from: %d\n", constantPoolCount); + + profiler = addClassToConstantPool("nsk/share/jvmti/ProfileCollector"); + + if (mode == BCI_MODE_ALLOC) { + u2 allocTracker = + addMethodToConstantPool(profiler, "allocTracker", "()V"); + allocBytes[1] = (u1) (allocTracker >> 8); + allocBytes[2] = (u1) (allocTracker & 0xFF); + } + + if (mode == BCI_MODE_CALL) { + u2 callTracker = + addMethodToConstantPool(profiler, "callTracker", "()V"); + callBytes[1] = (u1) (callTracker >> 8); + callBytes[2] = (u1) (callTracker & 0xFF); + } + + /* access, this, super */ + copy(2 + 2 + 2); + + interfaceCount = copy_u2(); + NSK_DISPLAY1("interfaceCount: %d\n", interfaceCount); + copy(interfaceCount * 2); + + copyFields(); + copyMethods(); + + attrCount = copy_u2(); + NSK_DISPLAY1("class attrCount: %d\n", attrCount); + copyAttrs(attrCount); + + randomAccessWriteU2(constantPoolCountPos, constantPoolCount); + NSK_DISPLAY1("New constant pool size: %d\n", constantPoolCount); + + *new_length = (jint) (genPos - gen); + *new_bytes = realloc(gen, *new_length); + + freeConstantPool(); + + return NSK_TRUE; + } + + /* ========================================================================== */ + +#ifdef __cplusplus +} +#endif diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/Injector.h b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/Injector.h new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/Injector.h @@ -0,0 +1,312 @@ +/* + * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef _NSK_SHARE_JVMTI_INJECTOR_H_ +#define _NSK_SHARE_JVMTI_INJECTOR_H_ + +/* Class File Format Constants + */ + +typedef unsigned char u1; +typedef unsigned short u2; +typedef unsigned int u4; + +/* Constant table */ +enum { + CONSTANT_Utf8 = 1, + CONSTANT_Integer = 3, + CONSTANT_Float = 4, + CONSTANT_Long = 5, + CONSTANT_Double = 6, + CONSTANT_Class = 7, + CONSTANT_String = 8, + CONSTANT_Fieldref = 9, + CONSTANT_Methodref = 10, + CONSTANT_InterfaceMethodref = 11, + CONSTANT_NameAndType = 12, + CONSTANT_MethodHandle = 15, + CONSTANT_MethodType = 16, + CONSTANT_InvokeDynamic = 18 +}; + +/* Access and modifier flags */ +enum { + ACC_PUBLIC = 0x00000001, + ACC_PRIVATE = 0x00000002, + ACC_PROTECTED = 0x00000004, + ACC_STATIC = 0x00000008, + ACC_FINAL = 0x00000010, + ACC_SYNCHRONIZED = 0x00000020, + ACC_VOLATILE = 0x00000040, + ACC_TRANSIENT = 0x00000080, + ACC_NATIVE = 0x00000100, + ACC_INTERFACE = 0x00000200, + ACC_ABSTRACT = 0x00000400, + ACC_SUPER = 0x00000020, + ACC_STRICT = 0x00000800 +}; + +/* Opcodes */ +enum { + opc_nop = 0, + opc_aconst_null = 1, + opc_iconst_m1 = 2, + opc_iconst_0 = 3, + opc_iconst_1 = 4, + opc_iconst_2 = 5, + opc_iconst_3 = 6, + opc_iconst_4 = 7, + opc_iconst_5 = 8, + opc_lconst_0 = 9, + opc_lconst_1 = 10, + opc_fconst_0 = 11, + opc_fconst_1 = 12, + opc_fconst_2 = 13, + opc_dconst_0 = 14, + opc_dconst_1 = 15, + opc_bipush = 16, + opc_sipush = 17, + opc_ldc = 18, + opc_ldc_w = 19, + opc_ldc2_w = 20, + opc_iload = 21, + opc_lload = 22, + opc_fload = 23, + opc_dload = 24, + opc_aload = 25, + opc_iload_0 = 26, + opc_iload_1 = 27, + opc_iload_2 = 28, + opc_iload_3 = 29, + opc_lload_0 = 30, + opc_lload_1 = 31, + opc_lload_2 = 32, + opc_lload_3 = 33, + opc_fload_0 = 34, + opc_fload_1 = 35, + opc_fload_2 = 36, + opc_fload_3 = 37, + opc_dload_0 = 38, + opc_dload_1 = 39, + opc_dload_2 = 40, + opc_dload_3 = 41, + opc_aload_0 = 42, + opc_aload_1 = 43, + opc_aload_2 = 44, + opc_aload_3 = 45, + opc_iaload = 46, + opc_laload = 47, + opc_faload = 48, + opc_daload = 49, + opc_aaload = 50, + opc_baload = 51, + opc_caload = 52, + opc_saload = 53, + opc_istore = 54, + opc_lstore = 55, + opc_fstore = 56, + opc_dstore = 57, + opc_astore = 58, + opc_istore_0 = 59, + opc_istore_1 = 60, + opc_istore_2 = 61, + opc_istore_3 = 62, + opc_lstore_0 = 63, + opc_lstore_1 = 64, + opc_lstore_2 = 65, + opc_lstore_3 = 66, + opc_fstore_0 = 67, + opc_fstore_1 = 68, + opc_fstore_2 = 69, + opc_fstore_3 = 70, + opc_dstore_0 = 71, + opc_dstore_1 = 72, + opc_dstore_2 = 73, + opc_dstore_3 = 74, + opc_astore_0 = 75, + opc_astore_1 = 76, + opc_astore_2 = 77, + opc_astore_3 = 78, + opc_iastore = 79, + opc_lastore = 80, + opc_fastore = 81, + opc_dastore = 82, + opc_aastore = 83, + opc_bastore = 84, + opc_castore = 85, + opc_sastore = 86, + opc_pop = 87, + opc_pop2 = 88, + opc_dup = 89, + opc_dup_x1 = 90, + opc_dup_x2 = 91, + opc_dup2 = 92, + opc_dup2_x1 = 93, + opc_dup2_x2 = 94, + opc_swap = 95, + opc_iadd = 96, + opc_ladd = 97, + opc_fadd = 98, + opc_dadd = 99, + opc_isub = 100, + opc_lsub = 101, + opc_fsub = 102, + opc_dsub = 103, + opc_imul = 104, + opc_lmul = 105, + opc_fmul = 106, + opc_dmul = 107, + opc_idiv = 108, + opc_ldiv = 109, + opc_fdiv = 110, + opc_ddiv = 111, + opc_irem = 112, + opc_lrem = 113, + opc_frem = 114, + opc_drem = 115, + opc_ineg = 116, + opc_lneg = 117, + opc_fneg = 118, + opc_dneg = 119, + opc_ishl = 120, + opc_lshl = 121, + opc_ishr = 122, + opc_lshr = 123, + opc_iushr = 124, + opc_lushr = 125, + opc_iand = 126, + opc_land = 127, + opc_ior = 128, + opc_lor = 129, + opc_ixor = 130, + opc_lxor = 131, + opc_iinc = 132, + opc_i2l = 133, + opc_i2f = 134, + opc_i2d = 135, + opc_l2i = 136, + opc_l2f = 137, + opc_l2d = 138, + opc_f2i = 139, + opc_f2l = 140, + opc_f2d = 141, + opc_d2i = 142, + opc_d2l = 143, + opc_d2f = 144, + opc_i2b = 145, + opc_i2c = 146, + opc_i2s = 147, + opc_lcmp = 148, + opc_fcmpl = 149, + opc_fcmpg = 150, + opc_dcmpl = 151, + opc_dcmpg = 152, + opc_ifeq = 153, + opc_ifne = 154, + opc_iflt = 155, + opc_ifge = 156, + opc_ifgt = 157, + opc_ifle = 158, + opc_if_icmpeq = 159, + opc_if_icmpne = 160, + opc_if_icmplt = 161, + opc_if_icmpge = 162, + opc_if_icmpgt = 163, + opc_if_icmple = 164, + opc_if_acmpeq = 165, + opc_if_acmpne = 166, + opc_goto = 167, + opc_jsr = 168, + opc_ret = 169, + opc_tableswitch = 170, + opc_lookupswitch = 171, + opc_ireturn = 172, + opc_lreturn = 173, + opc_freturn = 174, + opc_dreturn = 175, + opc_areturn = 176, + opc_return = 177, + opc_getstatic = 178, + opc_putstatic = 179, + opc_getfield = 180, + opc_putfield = 181, + opc_invokevirtual = 182, + opc_invokespecial = 183, + opc_invokestatic = 184, + opc_invokeinterface = 185, + opc_invokedynamic = 186, + opc_new = 187, + opc_newarray = 188, + opc_anewarray = 189, + opc_arraylength = 190, + opc_athrow = 191, + opc_checkcast = 192, + opc_instanceof = 193, + opc_monitorenter = 194, + opc_monitorexit = 195, + opc_wide = 196, + opc_multianewarray = 197, + opc_ifnull = 198, + opc_ifnonnull = 199, + opc_goto_w = 200, + opc_jsr_w = 201, + opc_breakpoint = 202 +}; + +enum { + BCI_MODE_EMCP = 0, + BCI_MODE_CALL = 1, + BCI_MODE_ALLOC = 2 +}; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Class file transformer. Transforms a classfile image from old_bytes + * to a new classfile image new_bytes according to value of bci_mode. + * The new classfile image is allocated with malloc(), and should be + * freed by the caller. The possible bci_mode values: + * + * BCI_MODE_EMCP + * dummy, without injection any bytecodes + * + * BCI_MODE_CALL + * inject invokestatic call to ProfileCollector.callTracker() + * at the beginning of all methods + * + * BCI_MODE_ALLOC + * inject invokestatic call to ProfileCollector.allocTracker() + * immediately following new/newarray opcodes. + * + */ + +int Inject(const u1* old_bytes, const jint old_length, + u1** new_bytes, jint* new_length, int bci_mode); + +#ifdef __cplusplus +} +#endif + +#endif /* _NSK_SHARE_JVMTI_INJECTOR_H_ */ diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/JVMTITools.c b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/JVMTITools.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/JVMTITools.c @@ -0,0 +1,331 @@ +/* + * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include "JVMTITools.h" + +#ifdef __cplusplus +extern "C" { +#endif + +const char* TranslateState(jint flags) { + static char str[15 * 20]; + + if (flags == 0) + return ""; + + str[0] = '\0'; + + if (flags & JVMTI_THREAD_STATE_ALIVE) { + strcat(str, " ALIVE"); + } + + if (flags & JVMTI_THREAD_STATE_TERMINATED) { + strcat(str, " TERMINATED"); + } + + if (flags & JVMTI_THREAD_STATE_RUNNABLE) { + strcat(str, " RUNNABLE"); + } + + if (flags & JVMTI_THREAD_STATE_WAITING) { + strcat(str, " WAITING"); + } + + if (flags & JVMTI_THREAD_STATE_WAITING_INDEFINITELY) { + strcat(str, " WAITING_INDEFINITELY"); + } + + if (flags & JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT) { + strcat(str, " WAITING_WITH_TIMEOUT"); + } + + if (flags & JVMTI_THREAD_STATE_SLEEPING) { + strcat(str, " SLEEPING"); + } + + if (flags & JVMTI_THREAD_STATE_IN_OBJECT_WAIT) { + strcat(str, " IN_OBJECT_WAIT"); + } + + if (flags & JVMTI_THREAD_STATE_PARKED) { + strcat(str, " PARKED"); + } + + if (flags & JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER) { + strcat(str, " BLOCKED_ON_MONITOR_ENTER"); + } + + if (flags & JVMTI_THREAD_STATE_SUSPENDED) { + strcat(str, " SUSPENDED"); + } + + if (flags & JVMTI_THREAD_STATE_INTERRUPTED) { + strcat(str, " INTERRUPTED"); + } + + if (flags & JVMTI_THREAD_STATE_IN_NATIVE) { + strcat(str, " IN_NATIVE"); + } + + + return str; +} + +const char* TranslateEvent(jvmtiEvent event_type) { + switch (event_type) { + case JVMTI_EVENT_VM_INIT: + return ("JVMTI_EVENT_VM_INIT"); + case JVMTI_EVENT_VM_DEATH: + return ("JVMTI_EVENT_VM_DEATH"); + case JVMTI_EVENT_THREAD_START: + return ("JVMTI_EVENT_THREAD_START"); + case JVMTI_EVENT_THREAD_END: + return ("JVMTI_EVENT_THREAD_END"); + case JVMTI_EVENT_CLASS_FILE_LOAD_HOOK: + return ("JVMTI_EVENT_CLASS_FILE_LOAD_HOOK"); + case JVMTI_EVENT_CLASS_LOAD: + return ("JVMTI_EVENT_CLASS_LOAD"); + case JVMTI_EVENT_CLASS_PREPARE: + return ("JVMTI_EVENT_CLASS_PREPARE"); + case JVMTI_EVENT_VM_START: + return ("JVMTI_EVENT_VM_START"); + case JVMTI_EVENT_EXCEPTION: + return ("JVMTI_EVENT_EXCEPTION"); + case JVMTI_EVENT_EXCEPTION_CATCH: + return ("JVMTI_EVENT_EXCEPTION_CATCH"); + case JVMTI_EVENT_SINGLE_STEP: + return ("JVMTI_EVENT_SINGLE_STEP"); + case JVMTI_EVENT_FRAME_POP: + return ("JVMTI_EVENT_FRAME_POP"); + case JVMTI_EVENT_BREAKPOINT: + return ("JVMTI_EVENT_BREAKPOINT"); + case JVMTI_EVENT_FIELD_ACCESS: + return ("JVMTI_EVENT_FIELD_ACCESS"); + case JVMTI_EVENT_FIELD_MODIFICATION: + return ("JVMTI_EVENT_FIELD_MODIFICATION"); + case JVMTI_EVENT_METHOD_ENTRY: + return ("JVMTI_EVENT_METHOD_ENTRY"); + case JVMTI_EVENT_METHOD_EXIT: + return ("JVMTI_EVENT_METHOD_EXIT"); + case JVMTI_EVENT_NATIVE_METHOD_BIND: + return ("JVMTI_EVENT_NATIVE_METHOD_BIND"); + case JVMTI_EVENT_COMPILED_METHOD_LOAD: + return ("JVMTI_EVENT_COMPILED_METHOD_LOAD"); + case JVMTI_EVENT_COMPILED_METHOD_UNLOAD: + return ("JVMTI_EVENT_COMPILED_METHOD_UNLOAD"); + case JVMTI_EVENT_DYNAMIC_CODE_GENERATED: + return ("JVMTI_EVENT_DYNAMIC_CODE_GENERATED"); + case JVMTI_EVENT_DATA_DUMP_REQUEST: + return ("JVMTI_EVENT_DATA_DUMP_REQUEST"); + case JVMTI_EVENT_MONITOR_WAIT: + return ("JVMTI_EVENT_MONITOR_WAIT"); + case JVMTI_EVENT_MONITOR_WAITED: + return ("JVMTI_EVENT_MONITOR_WAITED"); + case JVMTI_EVENT_MONITOR_CONTENDED_ENTER: + return ("JVMTI_EVENT_MONITOR_CONTENDED_ENTER"); + case JVMTI_EVENT_MONITOR_CONTENDED_ENTERED: + return ("JVMTI_EVENT_MONITOR_CONTENDED_ENTERED"); + case JVMTI_EVENT_GARBAGE_COLLECTION_START: + return ("JVMTI_EVENT_GARBAGE_COLLECTION_START"); + case JVMTI_EVENT_GARBAGE_COLLECTION_FINISH: + return ("JVMTI_EVENT_GARBAGE_COLLECTION_FINISH"); + case JVMTI_EVENT_OBJECT_FREE: + return ("JVMTI_EVENT_OBJECT_FREE"); + case JVMTI_EVENT_VM_OBJECT_ALLOC: + return ("JVMTI_EVENT_VM_OBJECT_ALLOC"); + default: + return (""); + } +} + +const char* TranslateError(jvmtiError err) { + switch (err) { + case JVMTI_ERROR_NONE: + return ("JVMTI_ERROR_NONE"); + case JVMTI_ERROR_INVALID_THREAD: + return ("JVMTI_ERROR_INVALID_THREAD"); + case JVMTI_ERROR_INVALID_THREAD_GROUP: + return ("JVMTI_ERROR_INVALID_THREAD_GROUP"); + case JVMTI_ERROR_INVALID_PRIORITY: + return ("JVMTI_ERROR_INVALID_PRIORITY"); + case JVMTI_ERROR_THREAD_NOT_SUSPENDED: + return ("JVMTI_ERROR_THREAD_NOT_SUSPENDED"); + case JVMTI_ERROR_THREAD_SUSPENDED: + return ("JVMTI_ERROR_THREAD_SUSPENDED"); + case JVMTI_ERROR_THREAD_NOT_ALIVE: + return ("JVMTI_ERROR_THREAD_NOT_ALIVE"); + case JVMTI_ERROR_INVALID_OBJECT: + return ("JVMTI_ERROR_INVALID_OBJECT"); + case JVMTI_ERROR_INVALID_CLASS: + return ("JVMTI_ERROR_INVALID_CLASS"); + case JVMTI_ERROR_CLASS_NOT_PREPARED: + return ("JVMTI_ERROR_CLASS_NOT_PREPARED"); + case JVMTI_ERROR_INVALID_METHODID: + return ("JVMTI_ERROR_INVALID_METHODID"); + case JVMTI_ERROR_INVALID_LOCATION: + return ("JVMTI_ERROR_INVALID_LOCATION"); + case JVMTI_ERROR_INVALID_FIELDID: + return ("JVMTI_ERROR_INVALID_FIELDID"); + case JVMTI_ERROR_NO_MORE_FRAMES: + return ("JVMTI_ERROR_NO_MORE_FRAMES"); + case JVMTI_ERROR_OPAQUE_FRAME: + return ("JVMTI_ERROR_OPAQUE_FRAME"); + case JVMTI_ERROR_TYPE_MISMATCH: + return ("JVMTI_ERROR_TYPE_MISMATCH"); + case JVMTI_ERROR_INVALID_SLOT: + return ("JVMTI_ERROR_INVALID_SLOT"); + case JVMTI_ERROR_DUPLICATE: + return ("JVMTI_ERROR_DUPLICATE"); + case JVMTI_ERROR_NOT_FOUND: + return ("JVMTI_ERROR_NOT_FOUND"); + case JVMTI_ERROR_INVALID_MONITOR: + return ("JVMTI_ERROR_INVALID_MONITOR"); + case JVMTI_ERROR_NOT_MONITOR_OWNER: + return ("JVMTI_ERROR_NOT_MONITOR_OWNER"); + case JVMTI_ERROR_INTERRUPT: + return ("JVMTI_ERROR_INTERRUPT"); + case JVMTI_ERROR_INVALID_CLASS_FORMAT: + return ("JVMTI_ERROR_INVALID_CLASS_FORMAT"); + case JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION: + return ("JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION"); + case JVMTI_ERROR_FAILS_VERIFICATION: + return ("JVMTI_ERROR_FAILS_VERIFICATION"); + case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED: + return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED"); + case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED: + return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED"); + case JVMTI_ERROR_INVALID_TYPESTATE: + return ("JVMTI_ERROR_INVALID_TYPESTATE"); + case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED: + return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED"); + case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED: + return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED"); + case JVMTI_ERROR_UNSUPPORTED_VERSION: + return ("JVMTI_ERROR_UNSUPPORTED_VERSION"); + case JVMTI_ERROR_NAMES_DONT_MATCH: + return ("JVMTI_ERROR_NAMES_DONT_MATCH"); + case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED: + return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED"); + case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED: + return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED"); + case JVMTI_ERROR_UNMODIFIABLE_CLASS: + return ("JVMTI_ERROR_UNMODIFIABLE_CLASS"); + case JVMTI_ERROR_NOT_AVAILABLE: + return ("JVMTI_ERROR_NOT_AVAILABLE"); + case JVMTI_ERROR_MUST_POSSESS_CAPABILITY: + return ("JVMTI_ERROR_MUST_POSSESS_CAPABILITY"); + case JVMTI_ERROR_NULL_POINTER: + return ("JVMTI_ERROR_NULL_POINTER"); + case JVMTI_ERROR_ABSENT_INFORMATION: + return ("JVMTI_ERROR_ABSENT_INFORMATION"); + case JVMTI_ERROR_INVALID_EVENT_TYPE: + return ("JVMTI_ERROR_INVALID_EVENT_TYPE"); + case JVMTI_ERROR_ILLEGAL_ARGUMENT: + return ("JVMTI_ERROR_ILLEGAL_ARGUMENT"); + case JVMTI_ERROR_NATIVE_METHOD: + return ("JVMTI_ERROR_NATIVE_METHOD"); + case JVMTI_ERROR_OUT_OF_MEMORY: + return ("JVMTI_ERROR_OUT_OF_MEMORY"); + case JVMTI_ERROR_ACCESS_DENIED: + return ("JVMTI_ERROR_ACCESS_DENIED"); + case JVMTI_ERROR_WRONG_PHASE: + return ("JVMTI_ERROR_WRONG_PHASE"); + case JVMTI_ERROR_INTERNAL: + return ("JVMTI_ERROR_INTERNAL"); + case JVMTI_ERROR_UNATTACHED_THREAD: + return ("JVMTI_ERROR_UNATTACHED_THREAD"); + case JVMTI_ERROR_INVALID_ENVIRONMENT: + return ("JVMTI_ERROR_INVALID_ENVIRONMENT"); + default: + return (""); + } +} + +const char* TranslatePhase(jvmtiPhase phase) { + switch (phase) { + case JVMTI_PHASE_ONLOAD: + return ("JVMTI_PHASE_ONLOAD"); + case JVMTI_PHASE_PRIMORDIAL: + return ("JVMTI_PHASE_PRIMORDIAL"); + case JVMTI_PHASE_START: + return ("JVMTI_PHASE_START"); + case JVMTI_PHASE_LIVE: + return ("JVMTI_PHASE_LIVE"); + case JVMTI_PHASE_DEAD: + return ("JVMTI_PHASE_DEAD"); + default: + return (""); + } +} + +const char* TranslateRootKind(jvmtiHeapRootKind root) { + switch (root) { + case JVMTI_HEAP_ROOT_JNI_GLOBAL: + return ("JVMTI_HEAP_ROOT_JNI_GLOBAL"); + case JVMTI_HEAP_ROOT_JNI_LOCAL: + return ("JVMTI_HEAP_ROOT_JNI_LOCAL"); + case JVMTI_HEAP_ROOT_SYSTEM_CLASS: + return ("JVMTI_HEAP_ROOT_SYSTEM_CLASS"); + case JVMTI_HEAP_ROOT_MONITOR: + return ("JVMTI_HEAP_ROOT_MONITOR"); + case JVMTI_HEAP_ROOT_STACK_LOCAL: + return ("JVMTI_HEAP_ROOT_STACK_LOCAL"); + case JVMTI_HEAP_ROOT_THREAD: + return ("JVMTI_HEAP_ROOT_THREAD"); + case JVMTI_HEAP_ROOT_OTHER: + return ("JVMTI_HEAP_ROOT_OTHER"); + default: + return (""); + } +} + +const char* TranslateObjectRefKind(jvmtiObjectReferenceKind ref) { + switch (ref) { + case JVMTI_REFERENCE_CLASS: + return ("JVMTI_REFERENCE_CLASS"); + case JVMTI_REFERENCE_FIELD: + return ("JVMTI_REFERENCE_FIELD"); + case JVMTI_REFERENCE_ARRAY_ELEMENT: + return ("JVMTI_REFERENCE_ARRAY_ELEMENT"); + case JVMTI_REFERENCE_CLASS_LOADER: + return ("JVMTI_REFERENCE_CLASS_LOADER"); + case JVMTI_REFERENCE_SIGNERS: + return ("JVMTI_REFERENCE_SIGNERS"); + case JVMTI_REFERENCE_PROTECTION_DOMAIN: + return ("JVMTI_REFERENCE_PROTECTION_DOMAIN"); + case JVMTI_REFERENCE_INTERFACE: + return ("JVMTI_REFERENCE_INTERFACE"); + case JVMTI_REFERENCE_STATIC_FIELD: + return ("JVMTI_REFERENCE_STATIC_FIELD"); + case JVMTI_REFERENCE_CONSTANT_POOL: + return ("JVMTI_REFERENCE_CONSTANT_POOL"); + default: + return (""); + } +} + +#ifdef __cplusplus +} +#endif diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/JVMTITools.h b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/JVMTITools.h new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/JVMTITools.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef _NSK_SHARE_JVMTI_JVMTITOOLS_H_ +#define _NSK_SHARE_JVMTI_JVMTITOOLS_H_ + +#include "jvmti.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Return string representation of given JVMTI event constant. + */ +const char* TranslateEvent(jvmtiEvent event_type); + +/** + * Return string representation of given JVMTI thread state constant. + */ +const char* TranslateState(jint flags); + +/** + * Return string representation of given JVMTI error code. + */ +const char* TranslateError(jvmtiError err); + +/** + * Return string representation of given phase of VM execution. + */ +const char* TranslatePhase(jvmtiPhase phase); + +/** + * Return string representation of given heap root kind. + */ +const char* TranslateRootKind(jvmtiHeapRootKind root); + +/** + * Return string representation of given heap root kind. + */ +const char* TranslateObjectRefKind(jvmtiObjectReferenceKind ref); + +#ifdef __cplusplus +} +#endif + +#endif /* _NSK_SHARE_JVMTI_JVMTITOOLS_H_ */ diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_common/agent_common.c b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_common/agent_common.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_common/agent_common.c @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +#include "jvmti.h" +#include "agent_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) { + return Agent_Initialize(jvm, options, reserved); +} + +JNIEXPORT jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options, void *reserved) { + return Agent_Initialize(jvm, options, reserved); +} + +#ifdef __cplusplus +} +#endif diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_common/agent_common.h b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_common/agent_common.h new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_common/agent_common.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +#ifndef NSK_JVMTI_AGENT_COMMON_DEFINED +#define NSK_JVMTI_AGENT_COMMON_DEFINED + +#include "jvmti.h" +#include "../jvmti_tools.h" + +#ifdef __cplusplus +extern "C" { +#endif + +JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved); + +JNIEXPORT jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options, void *reserved); + +jint Agent_Initialize(JavaVM *vm, char *options, void *reserved); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_tools.c b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_tools.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_tools.c @@ -0,0 +1,815 @@ +/* + * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include + +#include "native_thread.h" +#include "jni_tools.h" +#include "jvmti_tools.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ============================================================================= */ + +/* Be careful: do not build shared library which will be linked with different + * agent libs while global variables are used + * Now the same source is used to build different agent libs, so these + * variables are not shared between agents */ + +static jthread agentThread = NULL; +static jvmtiStartFunction agentThreadProc = NULL; +static void* agentThreadArg = NULL; + + +typedef enum {NEW, RUNNABLE, WAITING, SUSPENDED, TERMINATED} thread_state_t; + +typedef struct agent_data_t { + volatile thread_state_t thread_state; + int last_debuggee_status; + jrawMonitorID monitor; +} agent_data_t; + +static agent_data_t agent_data; + +static jvmtiEnv* jvmti_env = NULL; +static JavaVM* jvm = NULL; +static JNIEnv* jni_env = NULL; + +static volatile int currentAgentStatus = NSK_STATUS_PASSED; + +/* ============================================================================= */ + +void nsk_jvmti_setFailStatus() { + currentAgentStatus = NSK_STATUS_FAILED; +} + +int nsk_jvmti_isFailStatus() { + return (nsk_jvmti_getStatus() != NSK_STATUS_PASSED); +} + +jint nsk_jvmti_getStatus() { + return currentAgentStatus; +} + +/* ============================================================================= */ +static jvmtiError init_agent_data(jvmtiEnv *jvmti_env, agent_data_t *data) { + data->thread_state = NEW; + data->last_debuggee_status = NSK_STATUS_PASSED; + + return NSK_CPP_STUB3(CreateRawMonitor, jvmti_env, "agent_data_monitor", &data->monitor); +} + +/** Reset agent data to prepare for another run. */ +void nsk_jvmti_resetAgentData() { + rawMonitorEnter(jvmti_env, agent_data.monitor); + /* wait for agentThreadWrapper() to finish */ + while (agent_data.thread_state != TERMINATED) { + rawMonitorWait(jvmti_env, agent_data.monitor, 10); + } + agent_data.thread_state = NEW; + agent_data.last_debuggee_status = NSK_STATUS_PASSED; + rawMonitorExit(jvmti_env, agent_data.monitor); +} + +static jvmtiError free_agent_data(jvmtiEnv *jvmti_env, agent_data_t *data) { + return NSK_CPP_STUB2(DestroyRawMonitor, jvmti_env, data->monitor); +} + +/** Create JVMTI environment. */ +jvmtiEnv* nsk_jvmti_createJVMTIEnv(JavaVM* javaVM, void* reserved) { + jvm = javaVM; + if (!NSK_VERIFY( + NSK_CPP_STUB3(GetEnv, javaVM, (void **)&jvmti_env, JVMTI_VERSION_1_1) == JNI_OK)) { + nsk_jvmti_setFailStatus(); + return NULL; + } + + if (!NSK_JVMTI_VERIFY(init_agent_data(jvmti_env, &agent_data))) { + nsk_jvmti_setFailStatus(); + return NULL; + } + + return jvmti_env; +} + +/** Dispose JVMTI environment */ +static int nsk_jvmti_disposeJVMTIEnv(jvmtiEnv* jvmti_env) { + if (jvmti_env != NULL) { + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB1(DisposeEnvironment, jvmti_env))) { + nsk_jvmti_setFailStatus(); + return NSK_FALSE; + } + + if (!NSK_JVMTI_VERIFY(free_agent_data(jvmti_env, &agent_data))) { + nsk_jvmti_setFailStatus(); + return NSK_FALSE; + } + } + return NSK_TRUE; +} + +/** Get JNI environment for agent thread. */ +JNIEnv* nsk_jvmti_getAgentJNIEnv() { + return jni_env; +} + +/** Get JVMTI environment for agent */ +jvmtiEnv* nsk_jvmti_getAgentJVMTIEnv() { + return jvmti_env; +} + +/* ============================================================================= */ +static void set_agent_thread_state(thread_state_t value) { + rawMonitorEnter(jvmti_env, agent_data.monitor); + agent_data.thread_state = value; + rawMonitorNotify(jvmti_env, agent_data.monitor); + rawMonitorExit(jvmti_env, agent_data.monitor); +} + +/** Wrapper for user agent thread. */ +static void JNICALL +agentThreadWrapper(jvmtiEnv* jvmti_env, JNIEnv* agentJNI, void* arg) { + jni_env = agentJNI; + + /* run user agent proc */ + { + set_agent_thread_state(RUNNABLE); + + NSK_TRACE((*agentThreadProc)(jvmti_env, agentJNI, agentThreadArg)); + + set_agent_thread_state(TERMINATED); + } + + /* finalize agent thread */ + { + /* gelete global ref for agent thread */ + NSK_CPP_STUB2(DeleteGlobalRef, agentJNI, agentThread); + agentThread = NULL; + } +} + +/** Start wrapper for user agent thread. */ +static jthread startAgentThreadWrapper(JNIEnv *jni_env, jvmtiEnv* jvmti_env) { + const jint THREAD_PRIORITY = JVMTI_THREAD_MAX_PRIORITY; + const char* THREAD_NAME = "JVMTI agent thread"; + const char* THREAD_CLASS_NAME = "java/lang/Thread"; + const char* THREAD_CTOR_NAME = ""; + const char* THREAD_CTOR_SIGNATURE = "(Ljava/lang/String;)V"; + + jobject threadName = NULL; + jclass threadClass = NULL; + jmethodID threadCtor = NULL; + jobject threadObject = NULL; + jobject threadGlobalRef = NULL; + + if (!NSK_JNI_VERIFY(jni_env, (threadClass = + NSK_CPP_STUB2(FindClass, jni_env, THREAD_CLASS_NAME)) != NULL)) { + return NULL; + } + + if (!NSK_JNI_VERIFY(jni_env, (threadCtor = + NSK_CPP_STUB4(GetMethodID, jni_env, threadClass, THREAD_CTOR_NAME, THREAD_CTOR_SIGNATURE)) != NULL)) + return NULL; + + if (!NSK_JNI_VERIFY(jni_env, (threadName = + NSK_CPP_STUB2(NewStringUTF, jni_env, THREAD_NAME)) != NULL)) + return NULL; + + if (!NSK_JNI_VERIFY(jni_env, (threadObject = + NSK_CPP_STUB4(NewObject, jni_env, threadClass, threadCtor, threadName)) != NULL)) + return NULL; + + if (!NSK_JNI_VERIFY(jni_env, (threadGlobalRef = + NSK_CPP_STUB2(NewGlobalRef, jni_env, threadObject)) != NULL)) { + NSK_CPP_STUB2(DeleteLocalRef, jni_env, threadObject); + return NULL; + } + agentThread = (jthread)threadGlobalRef; + + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB5(RunAgentThread, jvmti_env, agentThread, + &agentThreadWrapper, agentThreadArg, THREAD_PRIORITY))) { + NSK_CPP_STUB2(DeleteGlobalRef, jni_env, threadGlobalRef); + NSK_CPP_STUB2(DeleteLocalRef, jni_env, threadObject); + return NULL; + } + return agentThread; +} + +/** Register user agent thread with arg. */ +int nsk_jvmti_setAgentProc(jvmtiStartFunction proc, void* arg) { + agentThreadProc = proc; + agentThreadArg = arg; + return NSK_TRUE; +} + +/** Get agent thread ref. */ +jthread nsk_jvmti_getAgentThread() { + return agentThread; +} + +/** Run registered user agent thread via wrapper. */ +static jthread nsk_jvmti_runAgentThread(JNIEnv *jni_env, jvmtiEnv* jvmti_env) { + /* start agent thread wrapper */ + jthread thread = startAgentThreadWrapper(jni_env, jvmti_env); + if (thread == NULL) { + nsk_jvmti_setFailStatus(); + return NULL; + } + + return thread; +} + +/* ============================================================================= */ + +/** Sleep current thread. */ +void nsk_jvmti_sleep(jlong timeout) { + int seconds = (int)((timeout + 999) / 1000); + THREAD_sleep(seconds); +} + +/** Sync point called from Java code. */ +static jint syncDebuggeeStatus(JNIEnv* jni_env, jvmtiEnv* jvmti_env, jint debuggeeStatus) { + jint result = NSK_STATUS_FAILED; + + rawMonitorEnter(jvmti_env, agent_data.monitor); + + /* save last debugee status */ + agent_data.last_debuggee_status = debuggeeStatus; + + /* we don't enter if-stmt in second call */ + if (agent_data.thread_state == NEW) { + if (nsk_jvmti_runAgentThread(jni_env, jvmti_env) == NULL) + goto monitor_exit_and_return; + + /* SP2.2-w - wait for agent thread */ + while (agent_data.thread_state == NEW) { + rawMonitorWait(jvmti_env, agent_data.monitor, 0); + } + } + + /* wait for sync permit */ + /* we don't enter loop in first call */ + while (agent_data.thread_state != WAITING && agent_data.thread_state != TERMINATED) { + /* SP4.2-w - second wait for agent thread */ + rawMonitorWait(jvmti_env, agent_data.monitor, 0); + } + + if (agent_data.thread_state != TERMINATED) { + agent_data.thread_state = SUSPENDED; + /* SP3.2-n - notify to start test */ + /* SP6.2-n - notify to end test */ + rawMonitorNotify(jvmti_env, agent_data.monitor); + } + else { + NSK_COMPLAIN0("Debuggee status sync aborted because agent thread has finished\n"); + goto monitor_exit_and_return; + } + + /* update status from debuggee */ + if (debuggeeStatus != NSK_STATUS_PASSED) { + nsk_jvmti_setFailStatus(); + } + + while (agent_data.thread_state == SUSPENDED) { + /* SP5.2-w - wait while testing */ + /* SP7.2 - wait for agent end */ + rawMonitorWait(jvmti_env, agent_data.monitor, 0); + } + + agent_data.last_debuggee_status = nsk_jvmti_getStatus(); + result = agent_data.last_debuggee_status; + +monitor_exit_and_return: + rawMonitorExit(jvmti_env, agent_data.monitor); + return result; +} + +/** Wait for sync point with Java code. */ +int nsk_jvmti_waitForSync(jlong timeout) { + static const int inc_timeout = 1000; + + jlong t = 0; + int result = NSK_TRUE; + + rawMonitorEnter(jvmti_env, agent_data.monitor); + + agent_data.thread_state = WAITING; + + /* SP2.2-n - notify agent is waiting and wait */ + /* SP4.1-n - notify agent is waiting and wait */ + rawMonitorNotify(jvmti_env, agent_data.monitor); + + while (agent_data.thread_state == WAITING) { + /* SP3.2-w - wait to start test */ + /* SP6.2-w - wait to end test */ + rawMonitorWait(jvmti_env, agent_data.monitor, inc_timeout); + + if (timeout == 0) continue; + + t += inc_timeout; + + if (t >= timeout) break; + } + + if (agent_data.thread_state == WAITING) { + NSK_COMPLAIN1("No status sync occured for timeout: %"LL"d ms\n", timeout); + nsk_jvmti_setFailStatus(); + result = NSK_FALSE; + } + + rawMonitorExit(jvmti_env, agent_data.monitor); + + return result; +} + +/** Resume java code suspended on sync point. */ +int nsk_jvmti_resumeSync() { + int result; + rawMonitorEnter(jvmti_env, agent_data.monitor); + + if (agent_data.thread_state == SUSPENDED) { + result = NSK_TRUE; + agent_data.thread_state = RUNNABLE; + /* SP5.2-n - notify suspend done */ + /* SP7.2-n - notify agent end */ + rawMonitorNotify(jvmti_env, agent_data.monitor); + } + else { + NSK_COMPLAIN0("Debuggee was not suspended on status sync\n"); + nsk_jvmti_setFailStatus(); + result = NSK_FALSE; + } + + rawMonitorExit(jvmti_env, agent_data.monitor); + return NSK_TRUE; +} + +/** Native function for Java code to provide sync point. */ +JNIEXPORT jint JNICALL +Java_nsk_share_jvmti_DebugeeClass_checkStatus(JNIEnv* jni_env, jclass cls, jint debuggeeStatus) { + jint status; + NSK_TRACE(status = syncDebuggeeStatus(jni_env, jvmti_env, debuggeeStatus)); + return status; +} + +/** Native function for Java code to reset agent data. */ +JNIEXPORT void JNICALL +Java_nsk_share_jvmti_DebugeeClass_resetAgentData(JNIEnv* jni_env, jclass cls) { + NSK_TRACE(nsk_jvmti_resetAgentData()); +} + +/* ============================================================================= */ + +/** Find loaded class by signature. */ +jclass nsk_jvmti_classBySignature(const char signature[]) { + jclass* classes = NULL; + jint count = 0; + jclass foundClass = NULL; + int i; + + if (!NSK_VERIFY(signature != NULL)) { + nsk_jvmti_setFailStatus(); + return NULL; + } + + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB3(GetLoadedClasses, jvmti_env, &count, &classes))) { + nsk_jvmti_setFailStatus(); + return NULL; + } + + for (i = 0; i < count; i++) { + char* sig = NULL; + char* generic = NULL; + + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB4(GetClassSignature, jvmti_env, classes[i], &sig, &generic))) { + nsk_jvmti_setFailStatus(); + break; + } + + if (sig != NULL && strcmp(signature, sig) == 0) { + foundClass = classes[i]; + } + + if (!(NSK_JVMTI_VERIFY( + NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)sig)) + && NSK_JVMTI_VERIFY( + NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)generic)))) { + nsk_jvmti_setFailStatus(); + break; + } + + if (foundClass != NULL) + break; + } + + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)classes))) { + nsk_jvmti_setFailStatus(); + return NULL; + } + + if (!NSK_JNI_VERIFY(jni_env, (foundClass = (jclass) + NSK_CPP_STUB2(NewGlobalRef, jni_env, foundClass)) != NULL)) { + nsk_jvmti_setFailStatus(); + return NULL; + } + + return foundClass; +} + +/** Find alive thread by name. */ +jthread nsk_jvmti_threadByName(const char name[]) { + jthread* threads = NULL; + jint count = 0; + jthread foundThread = NULL; + int i; + + if (!NSK_VERIFY(name != NULL)) { + nsk_jvmti_setFailStatus(); + return NULL; + } + + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB3(GetAllThreads, jvmti_env, &count, &threads))) { + nsk_jvmti_setFailStatus(); + return NULL; + } + + for (i = 0; i < count; i++) { + jvmtiThreadInfo info; + + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB3(GetThreadInfo, jvmti_env, threads[i], &info))) { + nsk_jvmti_setFailStatus(); + break; + } + + if (info.name != NULL && strcmp(name, info.name) == 0) { + foundThread = threads[i]; + break; + } + } + + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)threads))) { + nsk_jvmti_setFailStatus(); + return NULL; + } + + if (!NSK_JNI_VERIFY(jni_env, (foundThread = (jthread) + NSK_CPP_STUB2(NewGlobalRef, jni_env, foundThread)) != NULL)) { + nsk_jvmti_setFailStatus(); + return NULL; + } + + return foundThread; +} + + +/* ============================================================================= */ + +/** Add all capabilities for finding line locations. */ +int nsk_jvmti_addLocationCapabilities() { + jvmtiCapabilities caps; + + memset(&caps, 0, sizeof(caps)); + caps.can_get_line_numbers = 1; + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB2(AddCapabilities, jvmti_env, &caps))) + return NSK_FALSE; + + return NSK_TRUE; +} + +/** Add all capabilities for using breakpoints. */ +int nsk_jvmti_addBreakpointCapabilities() { + jvmtiCapabilities caps; + + if (!nsk_jvmti_addLocationCapabilities()) + return NSK_FALSE; + + memset(&caps, 0, sizeof(caps)); + caps.can_generate_breakpoint_events = 1; + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB2(AddCapabilities, jvmti_env, &caps))) + return NSK_FALSE; + + return NSK_TRUE; +} + +/** Find line location. */ +jlocation nsk_jvmti_getLineLocation(jclass cls, jmethodID method, int line) { + jint count = 0; + jvmtiLineNumberEntry* table = NULL; + jlocation location = NSK_JVMTI_INVALID_JLOCATION; + int i; + + if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB4(GetLineNumberTable, jvmti_env, method, &count, &table))) + return NSK_JVMTI_INVALID_JLOCATION; + + for (i = 0; i < count; i++) { + if (table[i].line_number == line) { + location = table[i].start_location; + break; + } + } + + if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)table))) + return NSK_JVMTI_INVALID_JLOCATION; + + return location; +} + +/** Set breakpoint to a line. */ +jlocation nsk_jvmti_setLineBreakpoint(jclass cls, jmethodID method, int line) { + jlocation location = NSK_JVMTI_INVALID_JLOCATION; + + if (!NSK_VERIFY((location = + nsk_jvmti_getLineLocation(cls, method, line)) != NSK_JVMTI_INVALID_JLOCATION)) + return NSK_JVMTI_INVALID_JLOCATION; + + if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetBreakpoint, jvmti_env, method, location))) + return NSK_JVMTI_INVALID_JLOCATION; + + return location; +} + +/** Remove breakpoint from a line. */ +jlocation nsk_jvmti_clearLineBreakpoint(jclass cls, jmethodID method, int line) { + jlocation location = NSK_JVMTI_INVALID_JLOCATION; + + if (!NSK_VERIFY((location = + nsk_jvmti_getLineLocation(cls, method, line)) != NSK_JVMTI_INVALID_JLOCATION)) + return NSK_JVMTI_INVALID_JLOCATION; + + if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB3(ClearBreakpoint, jvmti_env, method, location))) + return NSK_JVMTI_INVALID_JLOCATION; + + return location; +} + +/* ============================================================================= */ + +/** Enable or disable given events. */ +int nsk_jvmti_enableEvents(jvmtiEventMode enable, int size, jvmtiEvent list[], jthread thread) { + int i; + + for (i = 0; i < size; i++) { + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, enable, + list[i], thread))) { + nsk_jvmti_setFailStatus(); + return NSK_FALSE; + } + } + return NSK_TRUE; +} + +/* ============================================================================= */ + +typedef jint (JNICALL *checkStatus_type)(JNIEnv* jni_env, jclass cls, jint debuggeeStatus); + +static checkStatus_type checkStatus_func = NULL; + +/** + * Proxy function to gain sequential access to checkStatus of each agent + */ +JNIEXPORT jint JNICALL +MA_checkStatus(JNIEnv* jni_env, jclass cls, jint debuggeeStatus) { + jint status; + + NSK_TRACE(status = syncDebuggeeStatus(jni_env, jvmti_env, debuggeeStatus)); + return (*checkStatus_func)(jni_env, cls, status); +} + +/** + * nativeMethodBind callback: + * if needed, redirects checkStatus native method call + */ +static void JNICALL nativeMethodBind(jvmtiEnv* jvmti_env, JNIEnv *jni_env, + jthread thread, jmethodID mid, + void* address, void** new_address_ptr) { + const char* BIND_CLASS_NAME = "Lnsk/share/jvmti/DebugeeClass;"; + const char* BIND_METHOD_NAME = "checkStatus"; + const char* BIND_METHOD_SIGNATURE = "(I)I"; + + jvmtiPhase phase; + jclass cls; + char *class_sig = NULL; + char *name = NULL; + char *sig = NULL; + + if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(GetPhase, jvmti_env, &phase))) { + nsk_jvmti_setFailStatus(); + return; + } + + if (phase != JVMTI_PHASE_START && phase != JVMTI_PHASE_LIVE) + return; + + if (NSK_JVMTI_VERIFY( + NSK_CPP_STUB5(GetMethodName, jvmti_env, mid, &name, &sig, NULL))) { + if (strcmp(name, BIND_METHOD_NAME) == 0 && + strcmp(sig, BIND_METHOD_SIGNATURE) == 0) { + + if (NSK_JVMTI_VERIFY( + NSK_CPP_STUB3(GetMethodDeclaringClass, jvmti_env, mid, &cls)) + && NSK_JVMTI_VERIFY( + NSK_CPP_STUB4(GetClassSignature, jvmti_env, cls, &class_sig, NULL)) + && strcmp(class_sig, BIND_CLASS_NAME) == 0 + && address != (void*)Java_nsk_share_jvmti_DebugeeClass_checkStatus) { + checkStatus_func = (checkStatus_type)address; + NSK_TRACE(*new_address_ptr = (void*)MA_checkStatus); + } + } + } + + if (name != NULL) + NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)name); + + if (sig != NULL) + NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)sig); + + if (class_sig != NULL) + NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)class_sig); +} + +/** + * Initialize multiple agent: + * establish processing of nativeMethodBind events + */ +int nsk_jvmti_init_MA(jvmtiEventCallbacks* callbacks) { + + if (callbacks == NULL) { + NSK_COMPLAIN0("callbacks should not be NULL\n"); + nsk_jvmti_setFailStatus(); + return NSK_FALSE; + } + + if (callbacks->NativeMethodBind != NULL) { + NSK_COMPLAIN0("callbacks.NativeMethodBind should be NULL\n"); + nsk_jvmti_setFailStatus(); + return NSK_FALSE; + } + + { + jvmtiCapabilities caps; + memset(&caps, 0, sizeof(caps)); + caps.can_generate_native_method_bind_events = 1; + if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(AddCapabilities, jvmti_env, &caps))) + return NSK_FALSE; + } + + callbacks->NativeMethodBind = nativeMethodBind; + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB3(SetEventCallbacks, jvmti_env, callbacks, + sizeof(jvmtiEventCallbacks)))) + return NSK_FALSE; + + if (!NSK_JVMTI_VERIFY( + NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, JVMTI_ENABLE, + JVMTI_EVENT_NATIVE_METHOD_BIND, NULL))) + return NSK_FALSE; + + return NSK_TRUE; +} + +/* ============================================================================= */ + +int nsk_jvmti_isOptionalEvent(jvmtiEvent event) { + + return (event == JVMTI_EVENT_EXCEPTION) + || (event == JVMTI_EVENT_EXCEPTION_CATCH) + || (event == JVMTI_EVENT_SINGLE_STEP) + || (event == JVMTI_EVENT_FRAME_POP) + || (event == JVMTI_EVENT_BREAKPOINT) + || (event == JVMTI_EVENT_FIELD_ACCESS) + || (event == JVMTI_EVENT_FIELD_MODIFICATION) + || (event == JVMTI_EVENT_METHOD_ENTRY) + || (event == JVMTI_EVENT_METHOD_EXIT) + || (event == JVMTI_EVENT_NATIVE_METHOD_BIND) + || (event == JVMTI_EVENT_COMPILED_METHOD_LOAD) + || (event == JVMTI_EVENT_COMPILED_METHOD_UNLOAD) + || (event == JVMTI_EVENT_MONITOR_WAIT) + || (event == JVMTI_EVENT_MONITOR_WAITED) + || (event == JVMTI_EVENT_MONITOR_CONTENDED_ENTER) + || (event == JVMTI_EVENT_MONITOR_CONTENDED_ENTERED) + || (event == JVMTI_EVENT_GARBAGE_COLLECTION_START) + || (event == JVMTI_EVENT_GARBAGE_COLLECTION_FINISH) + || (event == JVMTI_EVENT_OBJECT_FREE) + || (event == JVMTI_EVENT_VM_OBJECT_ALLOC); +} + +/* ============================================================================= */ + +void nsk_jvmti_showPossessedCapabilities(jvmtiEnv *jvmti_env) { + + jvmtiCapabilities caps; + + if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(GetCapabilities, jvmti_env, &caps))) { + return; + } + + NSK_DISPLAY0("\n"); + NSK_DISPLAY0("Possessed capabilities:\n"); + NSK_DISPLAY0("-----------------------\n"); + if (caps.can_tag_objects) + NSK_DISPLAY0("\tcan_tag_objects\n"); + if (caps.can_generate_field_modification_events) + NSK_DISPLAY0("\tcan_generate_field_modification_events\n"); + if (caps.can_generate_field_access_events) + NSK_DISPLAY0("\tcan_generate_field_access_events\n"); + if (caps.can_get_bytecodes) + NSK_DISPLAY0("\tcan_get_bytecodes\n"); + if (caps.can_get_synthetic_attribute) + NSK_DISPLAY0("\tcan_get_synthetic_attribute\n"); + if (caps.can_get_owned_monitor_info) + NSK_DISPLAY0("\tcan_get_owned_monitor_info\n"); + if (caps.can_get_current_contended_monitor) + NSK_DISPLAY0("\tcan_get_current_contended_monitor\n"); + if (caps.can_get_monitor_info) + NSK_DISPLAY0("\tcan_get_monitor_info\n"); + if (caps.can_pop_frame) + NSK_DISPLAY0("\tcan_pop_frame\n"); + if (caps.can_redefine_classes) + NSK_DISPLAY0("\tcan_redefine_classes\n"); + if (caps.can_signal_thread) + NSK_DISPLAY0("\tcan_signal_thread\n"); + if (caps.can_get_source_file_name) + NSK_DISPLAY0("\tcan_get_source_file_name\n"); + if (caps.can_get_line_numbers) + NSK_DISPLAY0("\tcan_get_line_numbers\n"); + if (caps.can_get_source_debug_extension) + NSK_DISPLAY0("\tcan_get_source_debug_extension\n"); + if (caps.can_access_local_variables) + NSK_DISPLAY0("\tcan_access_local_variables\n"); + if (caps.can_maintain_original_method_order) + NSK_DISPLAY0("\tcan_maintain_original_method_order\n"); + if (caps.can_generate_single_step_events) + NSK_DISPLAY0("\tcan_generate_single_step_events\n"); + if (caps.can_generate_exception_events) + NSK_DISPLAY0("\tcan_generate_exception_events\n"); + if (caps.can_generate_frame_pop_events) + NSK_DISPLAY0("\tcan_generate_frame_pop_events\n"); + if (caps.can_generate_breakpoint_events) + NSK_DISPLAY0("\tcan_generate_breakpoint_events\n"); + if (caps.can_suspend) + NSK_DISPLAY0("\tcan_suspend\n"); + if (caps.can_get_current_thread_cpu_time) + NSK_DISPLAY0("\tcan_get_current_thread_cpu_time\n"); + if (caps.can_get_thread_cpu_time) + NSK_DISPLAY0("\tcan_get_thread_cpu_time\n"); + if (caps.can_generate_method_entry_events) + NSK_DISPLAY0("\tcan_generate_method_entry_events\n"); + if (caps.can_generate_method_exit_events) + NSK_DISPLAY0("\tcan_generate_method_exit_events\n"); + if (caps.can_generate_all_class_hook_events) + NSK_DISPLAY0("\tcan_generate_all_class_hook_events\n"); + if (caps.can_generate_compiled_method_load_events) + NSK_DISPLAY0("\tcan_generate_compiled_method_load_events\n"); + if (caps.can_generate_monitor_events) + NSK_DISPLAY0("\tcan_generate_monitor_events\n"); + if (caps.can_generate_vm_object_alloc_events) + NSK_DISPLAY0("\tcan_generate_vm_object_alloc_events\n"); + if (caps.can_generate_native_method_bind_events) + NSK_DISPLAY0("\tcan_generate_native_method_bind_events\n"); + if (caps.can_generate_garbage_collection_events) + NSK_DISPLAY0("\tcan_generate_garbage_collection_events\n"); + if (caps.can_generate_object_free_events) + NSK_DISPLAY0("\tcan_generate_object_free_events\n"); + + NSK_DISPLAY0("\n"); +} + +/* ============================================================================= */ + +#ifdef __cplusplus +} +#endif diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_FollowRefObjects.c b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_FollowRefObjects.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_FollowRefObjects.c @@ -0,0 +1,397 @@ +/* + * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include "jni_tools.h" +#include "jvmti_tools.h" +#include "jvmti_FollowRefObjects.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ============================================================================= */ + +int g_fakeUserData = 0; +int g_userDataError = 0; +jvmtiHeapCallbacks g_wrongHeapCallbacks = { 0 }; + +/* This array has to be up-to-date with the jvmtiHeapReferenceKind enum */ +const char * const g_refKindStr[28] = { + "unknown_0", + "JVMTI_HEAP_REFERENCE_CLASS", + "JVMTI_HEAP_REFERENCE_FIELD", + "JVMTI_HEAP_REFERENCE_ARRAY_ELEMENT", + "JVMTI_HEAP_REFERENCE_CLASS_LOADER", + "JVMTI_HEAP_REFERENCE_SIGNERS", + "JVMTI_HEAP_REFERENCE_PROTECTION_DOMAIN", + "JVMTI_HEAP_REFERENCE_INTERFACE", + "JVMTI_HEAP_REFERENCE_STATIC_FIELD", + "JVMTI_HEAP_REFERENCE_CONSTANT_POOL", + "JVMTI_HEAP_REFERENCE_SUPERCLASS", + "unknown_11", "unknown_12", "unknown_13", "unknown_14", "unknown_15", + "unknown_16", "unknown_17", "unknown_18", "unknown_19", "unknown_20", + "JVMTI_HEAP_REFERENCE_JNI_GLOBAL", + "JVMTI_HEAP_REFERENCE_SYSTEM_CLASS", + "JVMTI_HEAP_REFERENCE_MONITOR", + "JVMTI_HEAP_REFERENCE_STACK_LOCAL", + "JVMTI_HEAP_REFERENCE_JNI_LOCAL", + "JVMTI_HEAP_REFERENCE_THREAD", + "JVMTI_HEAP_REFERENCE_OTHER" +}; + +/* ============================================================================= */ + +char * g_szTagInfo[MAX_TAG]; +char g_tagFlags[MAX_TAG]; +int g_tagVisitCount[MAX_TAG]; + +/* ============================================================================= */ + +void markTagSet(jlong tag_val) +{ + if ( tag_val > 0 && tag_val < MAX_TAG ) + g_tagFlags[tag_val] |= FLAG_TAG_SET; +} + +void markTagVisited(jlong tag_val) +{ + if ( tag_val > 0 && tag_val < MAX_TAG ) { + g_tagVisitCount[tag_val]++; + } +} + +jboolean checkThatAllTagsVisited() +{ + jboolean ok = JNI_TRUE; + jlong i; + + NSK_DISPLAY0("Checking that all set tags have been visited\n"); + + for ( i = 1; i < MAX_TAG; i++ ) { + char flags = g_tagFlags[i]; + + if ( (g_tagFlags[i] & FLAG_TAG_SET) ) { + if ( g_tagVisitCount[i] == 0 ) { + NSK_COMPLAIN1("Tag %" LL "d has not been visited: %x\n", i); + ok = JNI_FALSE; + } + + DBG(printf(">>> Tag %" LL "d has been visited %i times: %s\n", i, g_tagVisitCount[i], g_szTagInfo[i])); + } + } + + return ok; +} + +JNIEXPORT void JNICALL Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_resetTags(JNIEnv* jni, jclass klass) +{ + memset(g_szTagInfo, 0, sizeof(g_szTagInfo)); + memset(g_tagFlags, 0, sizeof(g_tagFlags)); + memset(g_tagVisitCount, 0, sizeof(g_tagVisitCount)); +} + +JNIEXPORT jboolean JNICALL Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_setTag(JNIEnv* jni, jclass klass, jobject o, jlong tag, jstring sInfo) +{ + jvmtiEnv * jvmti = nsk_jvmti_getAgentJVMTIEnv(); + jint hashCode; + + if ( ! NSK_VERIFY(NSK_CPP_STUB3(SetTag, jvmti, o, tag) == JVMTI_ERROR_NONE) ) { + NSK_COMPLAIN2("Can't set tag %li for object %lx\n", tag, o); + return JNI_FALSE; + } + + if ( ! NSK_VERIFY(NSK_CPP_STUB3(GetObjectHashCode, jvmti, o, &hashCode) == JVMTI_ERROR_NONE) ) { + NSK_COMPLAIN1("Can't get hash object %lx\n", o); + return JNI_FALSE; + } + + NSK_DISPLAY2("setTag: %08x <- % 3li", hashCode, tag); + + if ( tag > 0 && tag < MAX_TAG ) { + jboolean fCopy; + const char * s; + + if ( ! NSK_VERIFY((s = NSK_CPP_STUB3(GetStringUTFChars, jni, sInfo, &fCopy)) != NULL) ) { + NSK_COMPLAIN1("Can't get string at %#p\n", sInfo); + return JNI_FALSE; + } + + if ( ! s ) { + NSK_COMPLAIN1("Can't get string at %#p: NULL\n", sInfo); + return JNI_FALSE; + } + + g_szTagInfo[tag] = strdup(s); + + NSK_CPP_STUB3(ReleaseStringUTFChars, jni, sInfo, s); + + NSK_DISPLAY1(" // %s", g_szTagInfo[tag]); + + } + + markTagSet(tag); + + return JNI_TRUE; +} + +JNIEXPORT jlong JNICALL Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_getTag(JNIEnv* jni, jclass klass, jobject o) +{ + jvmtiEnv * jvmti = nsk_jvmti_getAgentJVMTIEnv(); + + jlong tag; + jvmtiError r; + if ( ! NSK_VERIFY((r = NSK_CPP_STUB3(GetTag, jvmti, o, &tag)) == JVMTI_ERROR_NONE) ) { + NSK_COMPLAIN2("Can't GetTag for object %lx. Return code: %i\n", o, r); + return -1; + } + + return tag; +} + +/* ============================================================================= */ + +int g_refsToVerifyCnt; + +RefToVerify g_refsToVerify[MAX_REFS]; + +/* ============================================================================= */ + +JNIEXPORT void JNICALL Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_resetRefsToVerify(JNIEnv* jni, jclass klass) +{ + g_refsToVerifyCnt = 0; +} + +static RefToVerify * findRefToVerify(jlong tagFrom, jlong tagTo, jint refKind) +{ + int i; + RefToVerify * pRefRec = g_refsToVerify; + + for ( i = g_refsToVerifyCnt; i > 0; i--, pRefRec++ ) { + pRefRec = &g_refsToVerify[i]; + if ( pRefRec->_tagFrom == tagFrom && pRefRec->_tagTo == tagTo && pRefRec->_refKind == refKind ) { + return pRefRec; + } + } + + return NULL; +} + +static jboolean addRefToVerify(jlong tagFrom, jlong tagTo, jint refKind, int expectedCount, int actualCount) +{ + RefToVerify * pRefRec; + + if ( g_refsToVerifyCnt >= MAX_REFS ) { + NSK_COMPLAIN0("TEST_BUG: Max. number of refs reached!"); + nsk_jvmti_setFailStatus(); + return JNI_FALSE; + } + + pRefRec = &g_refsToVerify[g_refsToVerifyCnt++]; + + pRefRec->_tagFrom = tagFrom; + pRefRec->_tagTo = tagTo; + pRefRec->_refKind = refKind; + pRefRec->_expectedCount = expectedCount; + pRefRec->_actualCount = actualCount; + + return JNI_TRUE; +} + +JNIEXPORT jboolean JNICALL Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_addRefToVerify(JNIEnv* jni, jclass klass, jobject from, jobject to, jint refKind, jint count) +{ + jvmtiEnv * jvmti = nsk_jvmti_getAgentJVMTIEnv(); + jvmtiError r; + jlong tagFrom, tagTo; + RefToVerify * pRefRec; + + if ( ! NSK_VERIFY((r = NSK_CPP_STUB3(GetTag, jvmti, from, &tagFrom)) == JVMTI_ERROR_NONE) ) { + NSK_COMPLAIN2("TEST_BUG: Can't GetTag for object %lx. Return code: %i\n", from, r); + nsk_jvmti_setFailStatus(); + return JNI_FALSE; + } + + + if ( ! NSK_VERIFY((r = NSK_CPP_STUB3(GetTag, jvmti, to, &tagTo)) == JVMTI_ERROR_NONE) ) { + NSK_COMPLAIN2("TEST_BUG: Can't GetTag for object %lx. Return code: %i\n", to, r); + nsk_jvmti_setFailStatus(); + return JNI_FALSE; + } + + if ( (pRefRec = findRefToVerify(tagFrom, tagTo, refKind)) != NULL ) { + pRefRec->_expectedCount += count; + return JNI_TRUE; + } + + return addRefToVerify(tagFrom, tagTo, refKind, count, 0); +} + +jboolean markRefToVerify(jlong tagFrom, jlong tagTo, int refKind) +{ + RefToVerify * pRefRec; + + if ( (pRefRec = findRefToVerify(tagFrom, tagTo, refKind)) != NULL ) { + pRefRec->_actualCount++; + return JNI_TRUE; + } + + return addRefToVerify(tagFrom, tagTo, refKind, 0, 1); +} + +/* ============================================================================= */ + +void checkUserData(const char * szFile, const int line, void * user_data) +{ + if (user_data != &g_fakeUserData && !g_userDataError) { + NSK_COMPLAIN4("%s, %i: Unexpected user_data is passed" + " to heapReferenceCallback:\n" + " expected: 0x%p\n" + " actual: 0x%p\n", + szFile, line, + &g_fakeUserData, + user_data); + g_userDataError++; + } +} + +#define CHECK_USER_DATA(p) checkUserData(__FILE__, __LINE__, (p)) + +void printHeapRefCallbackInfo( + jvmtiHeapReferenceKind reference_kind, + const jvmtiHeapReferenceInfo* reference_info, + jlong class_tag, + jlong referrer_class_tag, + jlong size, + jlong* tag_ptr, + jlong* referrer_tag_ptr, + jint length) +{ + const char * szInfo, * szRefInfo; + jlong tag_val = tag_ptr ? *tag_ptr : 0; + + NSK_DISPLAY1("heapReferenceCallback: %s", g_refKindStr[reference_kind]); + + NSK_DISPLAY3(" reference_info: %#lx, class_tag: %#" LL "d, referrer_class_tag: %#" LL "d\n", + reference_info, class_tag, referrer_class_tag); + + NSK_DISPLAY4(" size: %" LL "d, tag_ptr: %p, referrer_tag_ptr: %p, length: %-ld\n", + size, tag_ptr, referrer_tag_ptr, length); + + NSK_DISPLAY2(" tag: %" LL "d, referrer_tag: %" LL "d\n", + tag_val, DEREF(referrer_tag_ptr)); + + szInfo = ( tag_val > 0 && tag_val < MAX_TAG ) ? g_szTagInfo[tag_val] : ""; + szRefInfo = ( referrer_tag_ptr && *referrer_tag_ptr > 0 && *referrer_tag_ptr < MAX_TAG ) ? g_szTagInfo[*referrer_tag_ptr] : ""; + + NSK_DISPLAY3(" summary: %s: %s <- %s\n", + g_refKindStr[reference_kind], szInfo, szRefInfo); +} + +/* ============================================================================= */ + +jint JNICALL wrongHeapReferenceCallback( + jvmtiHeapReferenceKind reference_kind, + const jvmtiHeapReferenceInfo* reference_info, + jlong class_tag, + jlong referrer_class_tag, + jlong size, + jlong* tag_ptr, + jlong* referrer_tag_ptr, + jint length, + void* user_data) +{ + CHECK_USER_DATA(user_data); + NSK_COMPLAIN0("heap reference callback was called, where it should not be\n"); + nsk_jvmti_setFailStatus(); + printHeapRefCallbackInfo(reference_kind, reference_info, class_tag, referrer_class_tag, size, tag_ptr, referrer_tag_ptr, length); + + return JVMTI_VISIT_OBJECTS; +} + +jint JNICALL wrongPrimitiveFieldCallback( + jvmtiHeapReferenceKind reference_kind, + const jvmtiHeapReferenceInfo* reference_info, + jlong class_tag, + jlong* tag_ptr, + jvalue value, + jvmtiPrimitiveType value_type, + void* user_data) +{ + CHECK_USER_DATA(user_data); + NSK_COMPLAIN0("primitive field callback was called, where it should not be\n"); + nsk_jvmti_setFailStatus(); + + return JVMTI_VISIT_OBJECTS; +} + +jint JNICALL wrongArrayPrimitiveValueCallback( + jlong class_tag, + jlong size, + jlong* tag_ptr, + jint element_count, + jvmtiPrimitiveType element_type, + const void* elements, + void* user_data) +{ + CHECK_USER_DATA(user_data); + NSK_COMPLAIN0("array primitive value callback was called, where it should not be\n"); + nsk_jvmti_setFailStatus(); + + return JVMTI_VISIT_OBJECTS; +} + +jint JNICALL wrongStringPrimitiveValueCallback( + jlong class_tag, + jlong size, + jlong* tag_ptr, + const jchar* value, + jint value_length, + void* user_data) +{ + CHECK_USER_DATA(user_data); + NSK_COMPLAIN0("string primitive value callback was called, where it should not be\n"); + nsk_jvmti_setFailStatus(); + + return JVMTI_VISIT_OBJECTS; +} + +/* ============================================================================= */ + +void jvmti_FollowRefObject_init() +{ + g_wrongHeapCallbacks.heap_iteration_callback = NULL; + g_wrongHeapCallbacks.heap_reference_callback = wrongHeapReferenceCallback; + g_wrongHeapCallbacks.primitive_field_callback = wrongPrimitiveFieldCallback; + g_wrongHeapCallbacks.array_primitive_value_callback = wrongArrayPrimitiveValueCallback; + g_wrongHeapCallbacks.string_primitive_value_callback = wrongStringPrimitiveValueCallback; + + Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_resetTags(NULL, NULL); + Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_resetRefsToVerify(NULL, NULL); +} + +/* ============================================================================= */ + +#ifdef __cplusplus +} +#endif diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_FollowRefObjects.h b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_FollowRefObjects.h new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_FollowRefObjects.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +#ifndef __FollowRefObject_h +#define __FollowRefObject_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ============================================================================= */ + +void jvmti_FollowRefObject_init(); + +/* ============================================================================= */ + +#define DBG(x) x +#define DEREF(ptr) (((ptr) == NULL ? 0 : *(ptr))) + +extern jvmtiHeapCallbacks g_wrongHeapCallbacks; /* Callbacks that blame */ + +extern const char * const g_refKindStr[28]; /* JVMTI_HEAP_REFERENCE_xxx */ + +/* ============================================================================= */ + +#define MAX_TAG 1000 +#define MAX_REFS (MAX_TAG * 3) + +#define FLAG_TAG_SET 0x01 + +extern char * g_szTagInfo[MAX_TAG]; +extern char g_tagFlags[MAX_TAG]; +extern int g_tagVisitCount[MAX_TAG]; + +void markTagSet(jlong tag_val); +void markTagVisited(jlong tag_val); + +jboolean checkThatAllTagsVisited(); + +/* ============================================================================= */ + +typedef struct { + + jlong _tagFrom, + _tagTo; + + jint _refKind; + + int _expectedCount, + _actualCount; + +} RefToVerify; + +extern int g_refsToVerifyCnt; + +extern RefToVerify g_refsToVerify[MAX_REFS]; + +jboolean markRefToVerify(jlong tagFrom, jlong tagTo, int refKind); + +/* ============================================================================= */ + +extern int g_fakeUserData; +extern int g_userDataError; + +#define CHECK_USER_DATA(p) checkUserData(__FILE__, __LINE__, (p)) + +void checkUserData(const char * szFile, const int line, void * user_data); + +/* ============================================================================= */ + +void printHeapRefCallbackInfo( + jvmtiHeapReferenceKind reference_kind, + const jvmtiHeapReferenceInfo* reference_info, + jlong class_tag, + jlong referrer_class_tag, + jlong size, + jlong* tag_ptr, + jlong* referrer_tag_ptr, + jint length); + +/* ============================================================================= */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_tools.c b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_tools.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_tools.c @@ -0,0 +1,684 @@ +/* + * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include +#include +#include + +/*************************************************************/ + +#include "jvmti.h" + +/*************************************************************/ + +#include "nsk_tools.h" +#include "jni_tools.h" +#include "jvmti_tools.h" +#include "JVMTITools.h" + +/*************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +/*************************************************************/ + +#define NSK_JVMTI_WAITTIME 2 + +#define NSK_JVMTI_MAX_OPTIONS 10 +#define NSK_JVMTI_OPTION_START '-' +#define NSK_JVMTI_OPTION_VAL_SEP '=' + +#define NSK_JVMTI_OPT_PATH_TO_NEW_BYTE_CODE "pathToNewByteCode" +#define PATH_FORMAT "%s%02d/%s" +#define DIR_NAME "newclass" + +static volatile int redefineAttempted = NSK_FALSE; +static volatile int redefineSucceed = NSK_FALSE; +static volatile int agentFailed = NSK_FALSE; + +static struct { + struct { + int count; + char* names[NSK_JVMTI_MAX_OPTIONS]; + char* values[NSK_JVMTI_MAX_OPTIONS]; + char* string; + } options; + int waittime; +} context; + +/*************************************************************/ + +static int check_option(int dashed, const char name[], const char value[]) { + if (strcmp("verbose", name) == 0) { + if (strlen(value) > 0) { + nsk_complain("nsk_jvmti_parseOptions(): unexpected value in option: %s=%s\n", name, value); + return NSK_FALSE; + } + nsk_setVerboseMode(NSK_TRUE); + } else if (strcmp("trace", name) == 0) { + if (strlen(value) <= 0) { + nsk_complain("nsk_jvmti_parseOptions(): no value for option: %s\n", name); + return NSK_FALSE; + } + if (strcmp("none", value) == 0) { + nsk_setTraceMode(NSK_TRACE_NONE); + } else if (strcmp("before", value) == 0) { + nsk_setTraceMode(NSK_TRACE_BEFORE); + } else if (strcmp("after", value) == 0) { + nsk_setTraceMode(NSK_TRACE_AFTER); + } else if (strcmp("all", value) == 0) { + nsk_setTraceMode(NSK_TRACE_ALL); + } else { + nsk_complain("nsk_jvmti_parseOptions(): uexpected value in option: %s=%s\n", name, value); + return NSK_FALSE; + } + nsk_setVerboseMode(NSK_TRUE); + } else if (strcmp("waittime", name) == 0) { + if (strlen(value) <= 0) { + nsk_complain("nsk_jvmti_parseOptions(): no value for option: %s\n", name); + return NSK_FALSE; + } + { + char* end = NULL; + long n = strtol(value, &end, 10); + if (end == NULL || end == value || *end != '\0') { + nsk_complain("nsk_jvmti_parseOptions(): not integer value in option: %s=%s\n", name, value); + return NSK_FALSE; + } + if (n < 0) { + nsk_complain("nsk_jvmti_parseOptions(): negative value in option: %s=%s\n", name, value); + return NSK_FALSE; + } + context.waittime = (int)n; + } + } else if (dashed) { + nsk_complain("nsk_jvmti_parseOptions(): unknown option: %c%s\n", + NSK_JVMTI_OPTION_START, name); + return NSK_FALSE; + } + return NSK_TRUE; +} + +static int add_option(const char opt[], int opt_len, const char val[], int val_len) { + char* name; + char* value; + + int success = NSK_TRUE; + int dashed_opt = NSK_FALSE; + + if (opt[0] == NSK_JVMTI_OPTION_START) { + dashed_opt = NSK_TRUE; + opt++; + opt_len--; + } + if (opt_len <= 0) { + nsk_complain("nsk_jvmti_parseOptions(): found empty option\n"); + return NSK_FALSE; + } + + name = (char*)malloc(opt_len + 1); + value = (char*)malloc(val_len + 1); + + if (name == NULL || value == NULL) { + nsk_complain("nsk_jvmti_parseOptions(): out of memory\n"); + success = NSK_FALSE; + } else { + strncpy(name, opt, opt_len); + name[opt_len] = '\0'; + strncpy(value, val, val_len); + value[val_len] = '\0'; + + if (!check_option(dashed_opt, name, value)) { + success = NSK_FALSE; + } + } + + if (success) { + if (context.options.count >= NSK_JVMTI_MAX_OPTIONS) { + nsk_complain("nsk_jvmti_parseOptions(): too many options for parsing\n"); + success = NSK_FALSE; + } else { + context.options.names[context.options.count] = name; + context.options.values[context.options.count] = value; + context.options.count++; + } + } + + if (!success) { + if (name != NULL) + free(name); + if (value != NULL) + free(value); + } + + return success; +} + +static void nsk_jvmti_free() { + if (context.options.count > 0) { + int i; + for (i = 0; i < context.options.count; i++) { + free(context.options.names[i]); + free(context.options.values[i]); + } + context.options.count = 0; + } + if (context.options.string != NULL) { + free(context.options.string); + context.options.string = NULL; + } +} + +int isOptSep(char c) { + return isspace(c) || c == '~'; +} + + +/** + * + * The current option will not perform more than one + * single option which given, this is due to places explained + * in this question. + * + **/ + + /* + * This whole play can be reduced with simple StringTokenizer (strtok). + * + */ + +int nsk_jvmti_parseOptions(const char options[]) { + size_t len; + const char* opt; + int success = NSK_TRUE; + + context.options.string = NULL; + context.options.count = 0; + context.waittime = 2; + + if (options == NULL) + return NSK_TRUE; + + len = strlen(options); + context.options.string = (char*)malloc(len + 2); + + if (context.options.string == NULL) { + nsk_complain("nsk_jvmti_parseOptions(): out of memory\n"); + return NSK_FALSE; + } + strncpy(context.options.string, options, len); + context.options.string[len] = '\0'; + context.options.string[len+1] = '\0'; + + for (opt = context.options.string; ; ) { + const char* opt_end; + const char* val_sep; + int opt_len=0; + int val_len=0; + int exit=1; + + while (*opt != '\0' && isOptSep(*opt)) opt++; + if (*opt == '\0') break; + + val_sep = NULL; + /* + This should break when the first option it encounters other wise + */ + for (opt_end = opt, opt_len=0; !(*opt_end == '\0' || isOptSep(*opt_end)); opt_end++,opt_len++) { + if (*opt_end == NSK_JVMTI_OPTION_VAL_SEP) { + val_sep = opt_end; + exit=0; + break; + } + } + + if (exit == 1) break; + + /* now scan for the search for the option value end. + + */ + exit =1; + opt_end++; + val_sep++; + /** + * I was expecting this jvmti_parseOptions(), + * should be for multiple options as well. + * If this break is not there then It will expects + * to have. so a space should be sufficient as well. + */ + for(val_len=0; !(*opt_end == '\0' || isOptSep(*opt_end)); opt_end++,val_len++) { + //if (*opt_end == NSK_JVMTI_OPTION_START) { + // break; + //} + } + + if (!add_option(opt, opt_len, val_sep, val_len)) { + success = NSK_FALSE; + break; + } + opt_end++; + opt = opt_end; + } + + if (!success) { + nsk_jvmti_free(); + } + + return success; +} + + +/*************************************************************/ + +/** + * Returns value of given option name; or NULL if no such option found. + * If search name is NULL then complains an error and returns NULL. + */ +const char* nsk_jvmti_findOptionValue(const char name[]) { + int i; + + if (name == NULL) { + nsk_complain("nsk_jvmti_findOptionValue(): option name is NULL\n"); + return NULL; + } + + for (i = 0; i < context.options.count; i++) { + if (strcmp(name, context.options.names[i]) == 0) + return context.options.values[i]; + } + return NULL; +} + +/** + * Returns string value of given option; or defaultValue if no such option found. + * If options is specified but has empty value then complains an error and returns NULL. + */ +const char* nsk_jvmti_findOptionStringValue(const char name[], const char* defaultValue) { + const char* value; + + if (name == NULL) { + nsk_complain("nsk_jvmti_findOptionStringValue(): option name is NULL\n"); + return NULL; + } + + value = nsk_jvmti_findOptionValue(name); + if (value == NULL) { + return defaultValue; + } + + if (strlen(value) <= 0) { + nsk_complain("nsk_jvmti_findOptionStringValue(): empty value of option: %s=%s\n", + name, value); + return NULL; + } + return value; +} + +/** + * Returns integer value of given option; or defaultValue if no such option found. + * If options is specified but has no integer value then complains an error and returns -1. + */ +int nsk_jvmti_findOptionIntValue(const char name[], int defaultValue) { + const char* value; + + if (name == NULL) { + nsk_complain("nsk_jvmti_findOptionIntValue(): option name is NULL\n"); + return -1; + } + + value = nsk_jvmti_findOptionValue(name); + if (value == NULL) { + return defaultValue; + } + + if (strlen(value) <= 0) { + nsk_complain("nsk_jvmti_findOptionIntValue(): empty value of option: %s=%s\n", + name, value); + return -1; + } + + { + char* endptr = NULL; + int n = strtol(value, &endptr, 10); + + if (endptr == NULL || *endptr != '\0') { + nsk_complain("nsk_jvmti_findOptionIntValue(): not integer value of option: %s=%s\n", + name, value); + return -1; + } + return n; + } +} + +/** + * Returns number of parsed options. + */ +int nsk_jvmti_getOptionsCount() { + return context.options.count; +} + +/** + * Returns name of i-th parsed option. + * If no such option then complains an error and returns NULL. + */ +const char* nsk_jvmti_getOptionName(int i) { + if (i < 0 || i >= context.options.count) { + nsk_complain("nsk_jvmti_getOptionName(): option index out of bounds: %d\n", i); + return NULL; + } + return context.options.names[i]; +} + +/** + * Returns value of i-th parsed option. + * If no such option then complains an error and returns NULL. + */ +const char* nsk_jvmti_getOptionValue(int i) { + if (i < 0 || i >= context.options.count) { + nsk_complain("nsk_jvmti_getOptionValue(): option index out of bounds: %d\n", i); + return NULL; + } + return context.options.values[i]; +} + +/*************************************************************/ + +/** + * Returns value of -waittime option or default value if not specified. + */ +int nsk_jvmti_getWaitTime() { + return context.waittime; +} + +/** + * Sets specified waittime value. + */ +void nsk_jvmti_setWaitTime(int waittime) { + context.waittime = waittime; +} + +/*************************************************************/ + +int nsk_jvmti_lverify(int positive, jvmtiError error, jvmtiError expected, + const char file[], int line, const char format[], ...) +{ + int failure=0; + int negative = !positive; + int errorCode = (int)error; + const char* errorName = TranslateError(error); + va_list ap; + va_start(ap,format); + nsk_lvtrace(NSK_TRACE_AFTER,file,line,format,ap); + if (negative || expected != JVMTI_ERROR_NONE) + nsk_ltrace(NSK_TRACE_AFTER,file,line, + " jvmti error: code=%d, name=%s\n",errorCode,errorName); + if ((error == expected) == negative) { + nsk_lvcomplain(file,line,format,ap); + nsk_printf("# jvmti error: code=%d, name=%s\n",errorCode,errorName); + if (expected != JVMTI_ERROR_NONE) + nsk_printf("# error expected: code=%d, name=%s\n", + expected, TranslateError(expected)); + failure=1; + }; + va_end(ap); + return !failure; +} + +/*************************************************************/ + +JNIEXPORT jstring JNICALL +Java_nsk_share_jvmti_ArgumentHandler_getAgentOptionsString(JNIEnv *jni, jobject obj) { + jstring str_obj = NULL; + + if (!NSK_JNI_VERIFY(jni, (str_obj = + NSK_CPP_STUB2(NewStringUTF, jni, context.options.string)) != NULL)) { + return NULL; + } + return str_obj; +} + +/*************************************************************/ + +/** + * This method will try to redefine the class (classToRedefine) by loading + * physical file. pathToNewByteCode option which is passed + * on OnLoad Phase also used. + * + * So This method will do a file read pathToByteCode+fileName+.class (total path). + * Constrcuts a class objects and does a redefine of the class. + * On successfull redefine this method will return eaither JNI_TRUE or JNI_FALSE + * + * Hint:: + * 1) + * If there are many redefine on same testcase, then please try to use + * integer value (newclass00, newclass01, newclass02 , ....) way. + * + * 2) When you compile these please do keep, a metatag on testcase as + * # build : native classes classes.redef + * + * 3) When you do build these classes are psysically located in build as. + * + * TESTBASE/bin/newclass0* directory. + * eg: for nks/jvmti/scenarios/hotswap/HS204/hs204t001 you should see + * TESTBASE/bin/newclass0* /nsk/hotswap/HS204/hs204t001/MyClass.class + * + */ + +int nsk_jvmti_redefineClass(jvmtiEnv * jvmti, + jclass classToRedefine, + const char * fileName) { + redefineAttempted = NSK_TRUE; + if ( nsk_jvmti_findOptionValue(NSK_JVMTI_OPT_PATH_TO_NEW_BYTE_CODE) + == NULL ) { + nsk_printf("# error expected: %s \n", + NSK_JVMTI_OPT_PATH_TO_NEW_BYTE_CODE ); + nsk_printf("Hint :: missing java -agentlib:agentlib=%s=DirName, ($TESTBASE/bin) \n", + NSK_JVMTI_OPT_PATH_TO_NEW_BYTE_CODE ); + return NSK_FALSE; + } + if ( fileName == NULL) { + nsk_printf("# error file name expected did not found \n"); + return NSK_FALSE; + } + { + char file [1024]; + //= "DEFAULT"; + sprintf(file,"%s/%s.class", + nsk_jvmti_findOptionValue(NSK_JVMTI_OPT_PATH_TO_NEW_BYTE_CODE), + fileName); + nsk_printf("# info :: File = %s \n",file); + + { + FILE *bytecode; + unsigned char * classBytes; + jvmtiError error; + jint size; + + bytecode = fopen(file, "rb"); + error= JVMTI_ERROR_NONE; + if ( bytecode == NULL ) { + nsk_printf("# error **Agent::error opening file %s \n",file); + return NSK_FALSE; + } + + nsk_printf("# info **Agent:: opening file %s \n",file); + fseek(bytecode, 0, SEEK_END); + size = ftell(bytecode); + nsk_printf("# info file size= %ld\n",ftell(bytecode)); + rewind(bytecode); + error = (*jvmti)->Allocate(jvmti, size,&classBytes); + if ( error != JVMTI_ERROR_NONE) { + nsk_printf(" Failed to create memory %s \n",TranslateError(error)); + return NSK_FALSE; + } + + if ( ((jint) fread( classBytes, 1,size,bytecode )) != size ) { + nsk_printf(" # error failed to read all the bytes , could be less or more \n"); + return NSK_FALSE; + } else { + nsk_printf(" File red completely \n"); + } + fclose(bytecode); + { + jvmtiClassDefinition classDef; + classDef.klass = classToRedefine; + classDef.class_byte_count= size; + classDef.class_bytes = classBytes; + error = (*jvmti)->RedefineClasses(jvmti,1,&classDef); + if ( error != JVMTI_ERROR_NONE ) { + nsk_printf("# error occured while redefining %s ", + TranslateError(error) ); + return NSK_FALSE; + } + } + } + } + redefineSucceed= NSK_TRUE; + return NSK_TRUE; +} + +JNIEXPORT jboolean JNICALL +Java_nsk_share_jvmti_RedefineAgent_redefineAttempted(JNIEnv *jni, jobject obj) { + + if (redefineAttempted == NSK_TRUE) { + return JNI_TRUE; + }else { + return JNI_FALSE; + } +} + + +JNIEXPORT jboolean JNICALL +Java_nsk_share_jvmti_RedefineAgent_isRedefined(JNIEnv * jni, jobject obj ) { + + if (redefineSucceed == NSK_TRUE) { + return JNI_TRUE; + }else { + return JNI_FALSE; + } +} +/** + * This jni method is a Java wrapper for agent status. + */ +JNIEXPORT jboolean JNICALL +Java_nsk_share_jvmti_RedefineAgent_agentStatus(JNIEnv * jni, jobject obj ) { + if ( agentFailed == NSK_TRUE) { + return JNI_FALSE; + } else { + return JNI_TRUE; + } +} + +void nsk_jvmti_getFileName(int redefineCnt, const char * dir, char * buf, size_t bufsize) { + snprintf(buf, bufsize, PATH_FORMAT, DIR_NAME, redefineCnt, dir); + buf[bufsize-1] = '\0'; +} + +int nsk_jvmti_enableNotification(jvmtiEnv *jvmti,jvmtiEvent event, jthread thread) { + jvmtiError rc=JVMTI_ERROR_NONE; + rc = (*jvmti)->SetEventNotificationMode(jvmti,JVMTI_ENABLE, event, thread); + if (rc != JVMTI_ERROR_NONE) { + nsk_printf("# error Failed to set Notification for Event \n "); + return NSK_FALSE; + } + return NSK_TRUE; +} + +int nsk_jvmti_disableNotification(jvmtiEnv *jvmti,jvmtiEvent event, jthread thread) { + jvmtiError rc=JVMTI_ERROR_NONE; + rc = (*jvmti)->SetEventNotificationMode(jvmti,JVMTI_DISABLE, event, thread); + if (rc != JVMTI_ERROR_NONE) { + nsk_printf(" Failed to disaable Notification for Event "); + return NSK_FALSE; + } + return NSK_TRUE; +} + +void nsk_jvmti_agentFailed() { + agentFailed = NSK_TRUE; +} + +int isThreadExpected(jvmtiEnv *jvmti, jthread thread) { + static const char *vm_jfr_buffer_thread_name = "VM JFR Buffer Thread"; + static const char *jfr_request_timer_thread_name = "JFR request timer"; + + jvmtiThreadInfo threadinfo; + NSK_JVMTI_VERIFY((*jvmti)->GetThreadInfo(jvmti, thread, &threadinfo)); + + if (strcmp(threadinfo.name, vm_jfr_buffer_thread_name) == 0) + return 0; + + if (strcmp(threadinfo.name, jfr_request_timer_thread_name) == 0) + return 0; + + return 1; +} + +jint createRawMonitor(jvmtiEnv *env, const char *name, jrawMonitorID *monitor) { + jvmtiError error = NSK_CPP_STUB3(CreateRawMonitor, env, name, monitor); + if (!NSK_JVMTI_VERIFY(error)) { + return JNI_ERR; + } + return JNI_OK; +} + +void exitOnError(jvmtiError error) { + if (!NSK_JVMTI_VERIFY(error)) { + exit(error); + } +} + +void rawMonitorEnter(jvmtiEnv *env, jrawMonitorID monitor) { + jvmtiError error = NSK_CPP_STUB2(RawMonitorEnter, env, monitor); + exitOnError(error); +} + +void rawMonitorExit(jvmtiEnv *env, jrawMonitorID monitor) { + jvmtiError error = NSK_CPP_STUB2(RawMonitorExit, env, monitor); + exitOnError(error); +} + +void rawMonitorNotify(jvmtiEnv *env, jrawMonitorID monitor) { + jvmtiError error = NSK_CPP_STUB2(RawMonitorNotify, env, monitor); + exitOnError(error); +} + +void rawMonitorWait(jvmtiEnv *env, jrawMonitorID monitor, jlong millis) { + jvmtiError error = NSK_CPP_STUB3(RawMonitorWait, env, monitor, millis); + exitOnError(error); +} + +void getPhase(jvmtiEnv *env, jvmtiPhase *phase) { + jvmtiError error = NSK_CPP_STUB2(GetPhase, env, phase); + exitOnError(error); +} + +/*************************************************************/ + +#ifdef __cplusplus +} +#endif diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_tools.h b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_tools.h new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_tools.h @@ -0,0 +1,400 @@ +/* + * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef NSK_JVMTI_TOOLS_DEFINED +#define NSK_JVMTI_TOOLS_DEFINED + +/*************************************************************/ + +#include "jvmti.h" + +/*************************************************************/ + +#include "nsk_tools.h" +#include "jni_tools.h" +#include "JVMTITools.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +/******************** Diagnostics errors *********************/ + +/** + * Call JVMTI function in action, check error code to be + * JVMTI_ERROR_NONE and complain error otherwise. + * Also trace action execution if tracing mode is on. + */ +#define NSK_JVMTI_VERIFY(action) \ + (nsk_ltrace(NSK_TRACE_BEFORE,__FILE__,__LINE__,"%s\n",#action), \ + nsk_jvmti_lverify(NSK_TRUE,action,JVMTI_ERROR_NONE, \ + __FILE__,__LINE__,"%s\n",#action)) + +/** + * Call JVMTI function in action, check error code to be + * not JVMTI_ERROR_NONE and complain error otherwise. + * Also trace action execution if tracing mode is on. + */ +#define NSK_JVMTI_VERIFY_NEGATIVE(action) \ + (nsk_ltrace(NSK_TRACE_BEFORE,__FILE__,__LINE__,"%s\n",#action), \ + nsk_jvmti_lverify(NSK_FALSE,action,JVMTI_ERROR_NONE, \ + __FILE__,__LINE__,"%s\n",#action)) + +/** + * Call JVMTI function in action, check error code to be + * equal to 'code' and complain error otherwise. + * Also trace action execution if tracing mode is on. + */ +#define NSK_JVMTI_VERIFY_CODE(code, action) \ + (nsk_ltrace(NSK_TRACE_BEFORE,__FILE__,__LINE__,"%s\n",#action), \ + nsk_jvmti_lverify(NSK_TRUE,action,code,__FILE__,__LINE__,"%s\n",#action)) + + +/********************* Initialization ************************/ + +/** + * Initialize framework and setup command line options for the JVMTI test. + * If something fails, complains an error and returns 0 (NSK_FALSE). + * On success returns 1 (NSK_TRUE). + */ +int nsk_jvmti_parseOptions(const char options[]); + +/** + * Creates JVMTI environment for the JVMTI test. + * If something fails, complains an error and returns NULL. + */ +jvmtiEnv* nsk_jvmti_createJVMTIEnv(JavaVM* jvm, void* reserved); + +/** + * Register function to be run in agent thread. + * If something fails, complains an error and returns 0 (NSK_FALSE). + * On success returns 1 (NSK_TRUE). + */ +int nsk_jvmti_setAgentProc(jvmtiStartFunction proc, void* arg); + +/** + * Initialize multiple agent + */ +int nsk_jvmti_init_MA(jvmtiEventCallbacks* callbacks); + + +/********************** Agent thread *************************/ + +/** + * Returns thread object associated with agent thread.. + * If something fails, complains an error and returns NULL. + */ +jthread nsk_jvmti_getAgentThread(); + +/** + * Returns JNI environment constructed for agent thread. + * If something fails, complains an error and returns NULL. + */ +JNIEnv* nsk_jvmti_getAgentJNIEnv(); + +/** + * Returns JVMTI environment constructed for agent. + * If something fails, complains an error and returns NULL. + */ +jvmtiEnv* nsk_jvmti_getAgentJVMTIEnv(); + +/** + * Waits for next synchronization point with debuggee class, + * Then synchronizes current status and pauses debuggee thread. + * If something fails, complains an error and returns 0 (NSK_FALSE). + * On success returns 1 (NSK_TRUE). + */ +int nsk_jvmti_waitForSync(jlong timeout); + +/** + * Allow debuggee thread to continue execution after pausing on synchronization. + * If something fails, complains an error and returns 0 (NSK_FALSE). + * On success returns 1 (NSK_TRUE). + */ +int nsk_jvmti_resumeSync(); + +/** + * Sleep current thread for given timeout in milliseconds. + */ +void nsk_jvmti_sleep(jlong timeout); + +/** + * Reset agent data to prepare for another run. + */ +void nsk_jvmti_resetAgentData(); + +/*********************** Agent status ************************/ + +#define NSK_STATUS_PASSED 0 +#define NSK_STATUS_FAILED 2 +#define NSK_STATUS_BASE 95 + +/** + * Sets NSK_STATUS_FAILED as current agent status. + */ +void nsk_jvmti_setFailStatus(); + +/** + * Returns 1 (NSK_TRUE) is current agent status is not NSK_STATUS_PASSED. + * Returns 0 (NSK_FALSE) otherwise. + */ +int nsk_jvmti_isFailStatus(); + +/** + * Returns current agent status. + */ +jint nsk_jvmti_getStatus(); + + +/********************* Classes and threads ******************/ + +/** + * Finds first class with given signatire among loaded classes. + * If no class found or something fails, complains an error and returns NULL. + * On success creates and returns global reference to the found class. + */ +jclass nsk_jvmti_classBySignature(const char signature[]); + +/** + * Finds first thread with given name among alive threads. + * If no thread found or something fails, complains an error and returns NULL. + * On success creates and returns global reference to the found thread. + */ +jthread nsk_jvmti_threadByName(const char name[]); + + +/******************* Breakpoints and locations ***************/ + +/** + * Requests all capabilities needed for finding line location. + * If something fails, complains an error and returns 0 (NSK_FALSE). + * On success returns 1 (NSK_TRUE). + */ +int nsk_jvmti_addLocationCapabilities(); + +/** + * Requests all capabilities needed for setting breakpoints. + * If something fails, complains an error and returns 0 (NSK_FALSE). + * On success returns 1 (NSK_TRUE). + */ +int nsk_jvmti_addBreakpointCapabilities(); + +#define NSK_JVMTI_INVALID_JLOCATION -2 + +/** + * Returns jlocation for given method line. + * If something fails, complains an error and returns NSK_JVMTI_INVALID_JLOCATION. + */ +jlocation nsk_jvmti_getLineLocation(jclass cls, jmethodID method, int line); + +/** + * Sets breakpoint to the given method line and return breakpoint location. + * If something fails, complains an error and returns NSK_JVMTI_INVALID_JLOCATION. + */ +jlocation nsk_jvmti_setLineBreakpoint(jclass cls, jmethodID method, int line); + +/** + * Removes breakpoint from the given method line and return breakpoint location. + * If something fails, complains an error and returns NSK_JVMTI_INVALID_JLOCATION. + */ +jlocation nsk_jvmti_clearLineBreakpoint(jclass cls, jmethodID method, int line); + + +/********************* Events management *********************/ + +/** + * Enables or disables all events of given list for given thread or NULL. + * If something fails, complains an error and returns 0 (NSK_FALSE). + */ +int nsk_jvmti_enableEvents(jvmtiEventMode enable, int size, + jvmtiEvent list[], jthread thread); + +/** + * Returns: + * NSK_TRUE if given event is of optional functionality. + * NSK_FALSE if given event is of required functionality. + */ +int nsk_jvmti_isOptionalEvent(jvmtiEvent event); + +/** + * Shows possessed capabilities + */ +void nsk_jvmti_showPossessedCapabilities(jvmtiEnv *jvmti); + +/** + * This method enables a single event + * Return NSK_TRUE when on success and NSK_FALSE on failure. + */ +int nsk_jvmti_enableNotification(jvmtiEnv *jvmti, jvmtiEvent event, jthread thread); + +/** + * This method disables a single event + * Return NSK_TRUE when on success and NSK_FALSE on failure. + */ + +int nsk_jvmti_disableNotification(jvmtiEnv *jvmti, jvmtiEvent event, jthread thread); + + +/******************** Access test options ********************/ + +/** + * Returns value of given option name; or NULL if no such option found. + * If search name is NULL then complains an error and returns NULL. + */ +const char* nsk_jvmti_findOptionValue(const char name[]); + +/** + * Returns string value of given option; or defaultValue if no such option found. + * If options is specified but has empty value then complains an error and returns NULL. + */ +const char* nsk_jvmti_findOptionStringValue(const char name[], const char* defaultValue); + +/** + * Returns integer value of given option; or defaultValue if no such option found. + * If options is specified but has no integer value then complains an error and returns -1. + */ +int nsk_jvmti_findOptionIntValue(const char name[], int defaultValue); + +/** + * Returns number of parsed options. + */ +int nsk_jvmti_getOptionsCount(); + +/** + * Returns name of i-th parsed option. + * If no such option then complains an error and returns NULL. + */ +const char* nsk_jvmti_getOptionName(int i); + +/** + * Returns value of i-th parsed option. + * If no such option then complains an error and returns NULL. + */ +const char* nsk_jvmti_getOptionValue(int i); + + +/******************** Access system options ******************/ + +/** + * Returns value of -waittime option or default value if not specified. + */ +int nsk_jvmti_getWaitTime(); + +/** + * Sets specified waittime value. + */ +void nsk_jvmti_setWaitTime(int waittime); + + +/*************************************************************/ + +/** + * If positive, assert jvmtiError is equal to expected; or + * if !positive, assert jvmtiError is not equal to expected. + * Assert means: complain if the assertion is false. + * Return the assertion value, either NSK_TRUE or NSK_FALSE. + * Anyway, trace if "nsk_tools" mode is verbose. + */ +int nsk_jvmti_lverify(int positive, jvmtiError code, jvmtiError expected, + const char file[], int line, const char format[], ...); + +/************************************************************/ + + +/** + * This method could be useful for hotswap testcases developed under.` + * nsk/jvmti/scenarios/hotswap. + * + */ + /** + * This method will try to redefine the class (classToRedefine) by loading + * physical file. pathToNewByteCode option which is passed + * on OnLoad Phase also used. + * + * So This method will do a file read pathToByteCode+fileName+.class (total path). + * Constrcuts a class objects and does a redefine of the class. + * On successfull redefine this method will return eaither JNI_TRUE or JNI_FALSE + * + * Hint:: + * 1) + * If there are many redefine on same testcase, then please try to use + * integer value (newclass00, newclass01, newclass02 , ....) way. + * + * 2) When you compile these please do keep, a metatag on testcase as + * # build : native classes classes.redef + * + * 3) When you do build these classes are psysically located in build as. + * + * TESTBASE/bin/newclass0* directory. + * eg: for nks/jvmti/scenarios/hotswap/HS204/hs204t001 you should see + * TESTBASE/bin/newclass0* /nsk/hotswap/HS204/hs204t001/MyClass.class + * + */ + +int nsk_jvmti_redefineClass(jvmtiEnv * jvmti, + jclass classToRedefine, + const char * fileName); +/** + * changed this signature with Ekaterina's suggestion to move. + * + */ +void nsk_jvmti_getFileName(int redefineCnt, const char * dir, char * buf, size_t bufsize); + +/** + * This method sets agent status to failed, This would enables native agent to set its status. + * There is nsk_jvmti_setFailStatus() method which is in sync with debugge/debugger combination. + * For non-debugger agents, this method can be used. There is java wrapper for this status, + * defined in java nsk.share.jvmti.RedefineAgent class as boolean : agentStatus(). + * + */ +void nsk_jvmti_agentFailed(); + +int isThreadExpected(jvmtiEnv *jvmti, jthread thread); + +jint createRawMonitor(jvmtiEnv *env, const char *name, jrawMonitorID *monitor); + +void exitOnError(jvmtiError error); + +/** + Wrappers for corresponded JVMTI functions check error code and force exit on error + */ +void rawMonitorEnter(jvmtiEnv *env, jrawMonitorID monitor); +void rawMonitorExit(jvmtiEnv *env, jrawMonitorID monitor); +void rawMonitorNotify(jvmtiEnv *env, jrawMonitorID monitor); +void rawMonitorWait(jvmtiEnv *env, jrawMonitorID monitor, jlong millis); +void getPhase(jvmtiEnv *env, jvmtiPhase *phase); + +/*******************************************************************/ + +#if (defined(WIN32) || defined(_WIN32)) +#define snprintf _snprintf +#endif + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/castToGrandparent/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/castToGrandparent/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/castToGrandparent/Test.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc + * + * @summary converted from VM Testbase vm/mlvm/anonloader/func/castToGrandparent. + * VM Testbase keywords: [feature_mlvm] + * VM Testbase readme: + * DESCRIPTION + * Cast an object loaded with Unsafe.defineAnonymousClass to superclass of its parent class. This cast should succeed. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.func.castToGrandparent.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.anonloader.func.castToGrandparent.Test + */ + +package vm.mlvm.anonloader.func.castToGrandparent; + +import vm.mlvm.anonloader.share.AnonkTestee01; +import vm.mlvm.anonloader.share.AnonkTestee02; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; +import vm.share.FileUtils; +import vm.share.UnsafeAccess; + +public class Test extends MlvmTest { + private static final Class PARENT = AnonkTestee02.class; + + @Override + public boolean run() throws Exception { + byte[] classBytes = FileUtils.readClass(PARENT.getName()); + Class cls = UnsafeAccess.unsafe.defineAnonymousClass( + PARENT, classBytes, null); + Object anonObject = cls.newInstance(); + // Try to cast anonymous class to its grandparent + AnonkTestee01 anonCastToParent = (AnonkTestee01) anonObject; + if ( anonCastToParent.equals(anonObject) ) + Env.traceNormal("Anonymous object can be cast to original one"); + + // Try to cast using another method + new AnonkTestee01().getClass().cast(anonObject); + + Env.traceNormal("Anonymous class can be cast to original one"); + + return true; + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/castToParent/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/castToParent/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/castToParent/Test.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc + * + * @summary converted from VM Testbase vm/mlvm/anonloader/func/castToParent. + * VM Testbase keywords: [feature_mlvm, clarify-spec, exclude] + * VM Testbase comments: 8199227 + * VM Testbase readme: + * DESCRIPTION + * Try to cast an object of a class, which is loaded by Unsafe.defineAnonymousClass to its + * parent (called AnonkTestee01) using the following cast methods: + * - (AnonkTestee01) o + * - o.getClass().cast(new AnonkTestee01()); + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * @ignore 8199227 + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.func.castToParent.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.anonloader.func.castToParent.Test + */ + +package vm.mlvm.anonloader.func.castToParent; + +import vm.mlvm.anonloader.share.AnonkTestee01; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; +import vm.share.FileUtils; +import vm.share.UnsafeAccess; + +public class Test extends MlvmTest { + private static final Class PARENT = AnonkTestee01.class; + + public boolean run() throws Exception { + byte[] classBytes = FileUtils.readClass(PARENT.getName()); + Class cls = UnsafeAccess.unsafe.defineAnonymousClass(PARENT, + classBytes, null); + Object o = cls.newInstance(); + // Try to cast anonymous class to its parent + AnonkTestee01 anonCastToParent = (AnonkTestee01) o; + if ( anonCastToParent.equals(o) ) + Env.traceNormal("Anonymous object can be cast to original one"); + + // Cast the class + new AnonkTestee01().getClass().cast(o); + + Env.traceNormal("Anonymous can be cast to original class"); + + return true; + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/classNameInStackTrace/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/classNameInStackTrace/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/classNameInStackTrace/Test.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc + * + * @summary converted from VM Testbase vm/mlvm/anonloader/func/classNameInStackTrace. + * VM Testbase keywords: [feature_mlvm] + * VM Testbase readme: + * DESCRIPTION + * An exception is thrown by class loaded by Unsafe.defineAnonymousClass. Verify that + * the exception's stack trace contains name of the current test class (i.e., + * verify that the stack trace is not broken) + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.func.classNameInStackTrace.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.anonloader.func.classNameInStackTrace.Test + */ + +package vm.mlvm.anonloader.func.classNameInStackTrace; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +import vm.mlvm.anonloader.share.AnonkTestee01; +import vm.mlvm.share.MlvmTest; +import vm.share.FileUtils; +import vm.share.UnsafeAccess; + +public class Test extends MlvmTest { + private static final Class PARENT = AnonkTestee01.class; + + public boolean run() throws Exception { + byte[] classBytes = FileUtils.readClass(PARENT.getName()); + Class cls = UnsafeAccess.unsafe.defineAnonymousClass(PARENT, + classBytes, null); + try { + // hashCode() in AnonkTestee01 always throws an exception + cls.newInstance().hashCode(); + return false; + + } catch ( RuntimeException e ) { + ByteArrayOutputStream byteOS = new ByteArrayOutputStream(); + PrintStream printStream = new PrintStream(byteOS); + e.printStackTrace(printStream); + printStream.close(); + String stackTrace = byteOS.toString("ASCII"); + getLog().display("Caught exception stack trace: " + stackTrace); + return stackTrace.contains(Test.class.getName()); + } + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/finalSuperclass/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/finalSuperclass/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/finalSuperclass/TestDescription.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc java.base/jdk.internal.org.objectweb.asm + * + * @summary converted from VM Testbase vm/mlvm/anonloader/func/finalSuperclass. + * VM Testbase keywords: [feature_mlvm] + * VM Testbase readme: + * DESCRIPTION + * Try to load anonymous class derived from java.lang.System. The verification + * system (split verifier and system class loader) should reject such attempt and + * throw VerifyError. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.share.ReplaceClassParentTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * vm.mlvm.anonloader.share.ReplaceClassParentTest + * -newParent java/lang/System + * -requireExceptions java.lang.VerifyError + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/findByName/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/findByName/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/findByName/Test.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc + * + * @summary converted from VM Testbase vm/mlvm/anonloader/func/findByName. + * VM Testbase keywords: [feature_mlvm] + * VM Testbase readme: + * DESCRIPTION + * Try to find a class loaded using Unsafe.defineAnonymousClass through the VM system dictionary + * (using Class.forName()). It is an error when the class can be found in this way. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.func.findByName.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.anonloader.func.findByName.Test + */ + +package vm.mlvm.anonloader.func.findByName; + +import vm.mlvm.anonloader.share.AnonkTestee01; +import vm.mlvm.share.MlvmTest; +import vm.share.FileUtils; +import vm.share.UnsafeAccess; + +public class Test extends MlvmTest { + private static final Class PARENT = AnonkTestee01.class; + + public boolean run() throws Exception { + try { + byte[] classBytes = FileUtils.readClass(PARENT.getName()); + Class c = UnsafeAccess.unsafe.defineAnonymousClass(PARENT, + classBytes, null); + getLog().display("Anonymous class name: " + c.getName()); + Class.forName(c.getName()).newInstance(); + return false; + } catch ( ClassNotFoundException e ) { + return true; + } + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/invalidSuperclass/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/invalidSuperclass/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/invalidSuperclass/Test.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc java.base/jdk.internal.org.objectweb.asm + * + * @summary converted from VM Testbase vm/mlvm/anonloader/func/invalidSuperclass. + * VM Testbase keywords: [feature_mlvm] + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.func.invalidSuperclass.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm -Xverify:all vm.mlvm.anonloader.func.invalidSuperclass.Test + */ + +package vm.mlvm.anonloader.func.invalidSuperclass; + +import vm.mlvm.anonloader.share.ReplaceClassParentTest; +import vm.mlvm.share.MlvmTestExecutor; + +/** + * Using Unsafe.defineAnonymousClass to load a class that has a patched superclass name, which is invalid. + * Verify that such class cannot be loaded. + * + */ +public class Test extends ReplaceClassParentTest { + + @Override + protected void initializeTest() throws Throwable { + super.initializeTest(); + setReplaceParent(String.format("%9999s", "Can you find me?")); + setRequiredExceptions(java.lang.NoClassDefFoundError.class); + } + + public static void main(String[] args) { + MlvmTestExecutor.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/isGarbageCollected/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/isGarbageCollected/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/isGarbageCollected/Test.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc + * + * @summary converted from VM Testbase vm/mlvm/anonloader/func/isGarbageCollected. + * VM Testbase keywords: [feature_mlvm] + * VM Testbase readme: + * DESCRIPTION + * Load an anonymous class, drop all references to it and verify that it is collected + * by GC afterwards (call System.gc() just in case). PhantomReference is used to + * check that the anonymous class is gone. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.func.isGarbageCollected.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.anonloader.func.isGarbageCollected.Test + */ + +package vm.mlvm.anonloader.func.isGarbageCollected; + +import java.lang.ref.PhantomReference; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; + +import vm.mlvm.anonloader.share.AnonkTestee01; +import vm.mlvm.share.MlvmTest; +import vm.share.FileUtils; +import vm.share.UnsafeAccess; + +public class Test extends MlvmTest { + private static final Class PARENT = AnonkTestee01.class; + + public boolean run() throws Exception { + ReferenceQueue> refQueue = new ReferenceQueue>(); + PhantomReference> anonClassRef = createClass(refQueue); + System.gc(); + Reference> deletedObject = refQueue.remove(); + return anonClassRef.equals(deletedObject); + } + + // a private method is great to keep anonClass reference local to make it GCed on the next cycle + private PhantomReference> createClass(ReferenceQueue> refQueue) throws Exception { + byte[] classBytes = FileUtils.readClass(PARENT.getName()); + Class anonClass = UnsafeAccess.unsafe.defineAnonymousClass(PARENT, + classBytes, null); + return new PhantomReference>(anonClass, refQueue); + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/uniqueClassAndObject/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/uniqueClassAndObject/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/uniqueClassAndObject/Test.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc java.base/jdk.internal.org.objectweb.asm + * + * @summary converted from VM Testbase vm/mlvm/anonloader/func/uniqueClassAndObject. + * VM Testbase keywords: [feature_mlvm] + * VM Testbase readme: + * DESCRIPTION + * Create two anonymous classes and instantiate an object from each of them. + * Verify that the references to these objects are different and references + * to their classes are not equal too. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.func.uniqueClassAndObject.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.anonloader.func.uniqueClassAndObject.Test + */ + +package vm.mlvm.anonloader.func.uniqueClassAndObject; + +import jdk.internal.org.objectweb.asm.ClassReader; +import vm.mlvm.anonloader.share.AnonkTestee01; +import vm.mlvm.share.MlvmTest; +import vm.share.FileUtils; +import vm.share.UnsafeAccess; + +public class Test extends MlvmTest { + private static final Class PARENT = AnonkTestee01.class; + + @Override + public boolean run() throws Exception { + byte[] classBytes = FileUtils.readClass(PARENT.getName()); + ClassReader reader = new ClassReader(classBytes); + Object o1 = UnsafeAccess.unsafe.defineAnonymousClass(PARENT, + classBytes, null).newInstance(); + int cpLength = reader.getItemCount(); + Object cpPatch[] = new Object[cpLength]; + Object o2 = UnsafeAccess.unsafe.defineAnonymousClass(PARENT, + classBytes, cpPatch).newInstance(); + if ( o1 == o2 ) { + getLog().complain("Error: The objects are equal"); + return false; + } + + if ( o1.getClass() == o2.getClass() ) { + getLog().complain("Error: The classes are equal"); + return false; + } + + return true; + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/AnonkTestee01.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/AnonkTestee01.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/AnonkTestee01.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.anonloader.share; + +import vm.mlvm.share.Env; + +public class AnonkTestee01 { + public final static String muzzy = "BIG \uFFFF\u0000\uFFFE\uFEFF MUZZY"; + public final static String + theDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrum + = String.format("%65500c%X", 'c', Env.getRNG().nextLong()); + + public final String beatingTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrum() { + return theDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrum; + } + + public final String toString() { + return "Something that looks like " + super.toString(); + } + + @Override + public int hashCode() { + throw new RuntimeException("Making fun of errors"); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/AnonkTestee02.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/AnonkTestee02.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/AnonkTestee02.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.anonloader.share; + +public class AnonkTestee02 extends AnonkTestee01 { + public AnonkTestee02() {} +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/ReplaceClassParentTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/ReplaceClassParentTest.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/ReplaceClassParentTest.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.anonloader.share; + +import jdk.internal.org.objectweb.asm.ClassReader; +import vm.mlvm.share.MlvmTest; +import vm.mlvm.share.MlvmTestExecutor; +import vm.mlvm.share.Env; +import vm.share.FileUtils; +import vm.share.UnsafeAccess; +import vm.share.options.Option; + +/** + * This is a base class for kind of tests, which modify the parent class name of test dummy class vm.mlvm.share.AnonkTestee01 + * with an arbitrary string, load the modified class using Unsafe.defineAnonymousClass and instantiate it. + *

+ * The tests can extend this class or use it from command-line to provide the actual data: + *

    + *
  • new parent class name, + *
  • optionally the list of expected exceptions to be thrown during class loading and instantiation + * (see {@link vm.mlvm.share.MlvmTest#setRequiredExceptions(Class... classes)} for details) + *
+ */ + +public class ReplaceClassParentTest extends MlvmTest { + + @Option(name = "newParent", default_value = "", description = "String to replace the name of the parent class of the testee") + private String newParentOpt; + + public void setReplaceParent(String newParent) { + newParentOpt = newParent; + } + + private static final Class TESTEE_CLASS = AnonkTestee01.class; + + public ReplaceClassParentTest() { + } + + public boolean run() throws Throwable { + byte[] classBytes = FileUtils.readClass(TESTEE_CLASS.getName()); + ClassReader reader = new ClassReader(classBytes); + int superclassNameIdx = reader.readUnsignedShort(reader.header + 4); + int cpLength = reader.getItemCount(); + if (superclassNameIdx == 0) { + throw new RuntimeException("Test bug: unable to find super class" + + " name index"); + } + Env.traceDebug("Superclass name CP index: " + superclassNameIdx + + "; replacing CP entry with '" + newParentOpt + "'"); + // now, construction of cp patch + Object cpPatch[] = new Object[cpLength]; + cpPatch[superclassNameIdx] = newParentOpt; + // define and instantiate + UnsafeAccess.unsafe.defineAnonymousClass(TESTEE_CLASS, classBytes, + cpPatch).newInstance(); + // Whether test should pass or fail should be specified via requireExceptions mechanism in MlvmTest + return true; + + } + + public static void main(String[] args) { + MlvmTestExecutor.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/StressClassLoadingTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/StressClassLoadingTest.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/StressClassLoadingTest.java @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.anonloader.share; + +import java.io.File; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; +import java.nio.file.Files; +import java.nio.file.Paths; +import nsk.share.test.Stresser; +import vm.share.options.Option; +import vm.share.options.OptionSupport; +import vm.share.options.IgnoreUnknownArgumentsHandler; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; +import vm.mlvm.share.CustomClassLoaders; +import vm.share.FileUtils; +import vm.share.UnsafeAccess; + +/** + * Does stress-testing of class loading subsystem. + * This class should be subclassed by the tests + * to provide test class data. + * + *

StressClassLoadingTest performs a number of iterations + * (the default value is 100 000). + * Each iteration gets class bytes from the subclass + * and loads it into JVM using either: + *

    + *
  • a custom {@link java.lang.ClassLoader} implementation or + *
  • {@link sun.misc.Unsafe#defineAnonymousClass} call. + *
+ * + *

Loading is done in a separate thread. If this thread is stuck, + * it is killed after some timeout (default is 10 seconds, please see + * -parseTimeout option). The class file is saved as hangXX.class, where XX + * starts at 00 and is increased on every hangup. + * A prefix can be added to the file name using {@link #setFileNamePrefix} + * + *

The test fails, if there were hangups. + * + *

By default, before loading class, the bytes are + * saved to {@code _AnonkTestee01.class} file in the current directory. + * If JVM crashes, the bytecodes can be analysed. + * Class saving is controlled by -saveClassFile option. + * A prefix can be added to the file name using {@link #setFileNamePrefix} + * function. + * + *

There is a tool to load the saved .class file. + * The tool tries to load class using a number of class loaders. For more + * information, please see tool documentation: {@link vm.mlvm.tools.LoadClass}. + * + * @see vm.mlvm.tools.LoadClass + */ +public abstract class StressClassLoadingTest extends MlvmTest { + private static final String RESCUE_FILE_NAME = "_AnonkTestee01.class"; + private static final String HUNG_CLASS_FILE_NAME = "hang%02d.class"; + + @Option(name = "iterations", default_value = "100000", + description = "How many times generate a class and parse it") + private static int iterations; + + @Option(name = "saveClassFile", default_value = "true", + description = "Save generated class file before loading." + + " Useful when VM crashes on loading") + private static boolean saveClassFile; + + @Option(name = "parseTimeout", default_value = "10000", + description = "Timeout in millisectionds to detect hung parser" + + " thread. The parser thread is killed after the timeout") + private static int parseTimeout; + + @Option(name = "unsafeLoad", default_value = "false", + description = "An option for adhoc experiments: load class via " + + "Unsafe.defineAnonymousClass(). Since in this way the " + + "loading process skips several security checks, if the " + + "class is not valid, crashes and assertions are normal.") + private static boolean unsafeLoad; + + private String fileNamePrefix = ""; + + private final static AtomicBoolean classFileMessagePrinted + = new AtomicBoolean(false); + + /** + * Sets prefix for names of the files, created by test: + * _AnonkTestee01.class and hangXX.class. + * + * @param p a prefix to add before file name. + * @throws java.lang.NullPointerException if p is null + */ + public void setFileNamePrefix(String p) { + Objects.requireNonNull(p); + fileNamePrefix = p; + } + + static volatile boolean optionsSetup = false; + public static void setupOptions(Object instance) { + if (!optionsSetup) { + synchronized (StressClassLoadingTest.class) { + if (!optionsSetup) { + OptionSupport.setup(instance, Env.getArgParser().getRawArguments(), new IgnoreUnknownArgumentsHandler()); + optionsSetup = true; + + Env.traceNormal("StressClassLoadingTest options: iterations: " + iterations); + Env.traceNormal("StressClassLoadingTest options: unsafeLoad: " + unsafeLoad); + Env.traceNormal("StressClassLoadingTest options: parseTimeout: " + parseTimeout); + Env.traceNormal("StressClassLoadingTest options: saveClassFile: " + saveClassFile); + } + } + } + } + + public boolean run() throws Exception { + setupOptions(this); + + int hangNum = 0; + + Stresser stresser = createStresser(); + stresser.start(iterations); + + while (stresser.continueExecution()) { + stresser.iteration(); + + byte[] classBytes = generateClassBytes(); + Class hostClass = getHostClass(); + String className = hostClass.getName(); + File rescueFile = new File(String.format("%s_%d_%s", + fileNamePrefix, stresser.getIteration(), RESCUE_FILE_NAME)); + if (saveClassFile) { + // Write out the class file being loaded. It's useful + // to have if the JVM crashes. + FileUtils.writeBytesToFile(rescueFile, classBytes); + if (classFileMessagePrinted.compareAndSet(false, true)) { + Env.traceImportant("If the JVM crashes then " + + "the class file causing the crash is saved as *_*_" + + RESCUE_FILE_NAME); + } + } + + Thread parserThread = new Thread() { + public void run() { + try { + Class c; + if (unsafeLoad) { + c = UnsafeAccess.unsafe.defineAnonymousClass(hostClass, classBytes, null); + } else { + c = CustomClassLoaders.makeClassBytesLoader(classBytes, className) + .loadClass(className); + } + c.newInstance(); + } catch (Throwable e) { + Env.traceVerbose(e, "parser caught exception"); + } + } + }; + + parserThread.setDaemon(true); + parserThread.start(); + parserThread.join(parseTimeout); + + if (parserThread.isAlive()) { + Env.complain("Killing parser thread"); + StackTraceElement[] stack = parserThread.getStackTrace(); + Env.traceImportant(parserThread + " stack trace:"); + for (int i = 0; i < stack.length; ++i) { + Env.traceImportant(parserThread + "\tat " + stack[i]); + } + + if (saveClassFile) { + Files.move(rescueFile.toPath(), Paths.get(fileNamePrefix + + String.format(HUNG_CLASS_FILE_NAME, hangNum))); + } + ++hangNum; + } else if (saveClassFile) { + rescueFile.delete(); + } + } + + stresser.finish(); + + if (hangNum > 0) { + Env.complain("There were " + hangNum + " hangups during parsing." + + " The class files, which produced hangup were saved as " + + fileNamePrefix + String.format(HUNG_CLASS_FILE_NAME, 0) + + "... in the test directory. You may want to analyse them." + + " Failing this test because of hangups."); + return false; + } + + return true; + } + + /** + * Generated class bytes. The method is called for each iteration. + * + * @return Byte array with the generated class + */ + protected abstract byte[] generateClassBytes(); + + /** + * Returns a host class for the generated class. + * + * @return A host class that for the generated class + */ + protected abstract Class getHostClass(); +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/byteMutation/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/byteMutation/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/byteMutation/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/byteMutation/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/byteMutation/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/byteMutation/Test.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc + * + * @summary converted from VM Testbase vm/mlvm/anonloader/stress/byteMutation. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.stress.byteMutation.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.anonloader.stress.byteMutation.Test -stressIterationsFactor 100000 + */ + +package vm.mlvm.anonloader.stress.byteMutation; + +import vm.mlvm.anonloader.share.AnonkTestee01; +import vm.mlvm.anonloader.share.StressClassLoadingTest; +import vm.share.FileUtils; +import vm.share.options.Option; + +/** + * The test does the following in a cycle: + * + *

    + *
  1. Takes bytes from a valid class file + *
  2. Sets 1 to 5 bytes in random positions to random values + *
  3. Tries to load such class using: + *
      + *
    • a custom class loader, + *
    • {@link sun.misc.Unsafe#defineAnonymousClass} + * when {@code -unsafeLoad true} option is passed to the test. + *
    + *
+ * + *

In most cases the resulting class file is invalid and rejected by + * the VM verifier. But this test tries to find pathological cases, such + * as infinite loops during verification or VM crashes. + * + *

NB: There is a tool to load invalid classes saved by this test. + * Please see tool documentation at {@link vm.mlvm.tools.LoadClass} + * + */ +public class Test extends StressClassLoadingTest { + private final static Class HOST_CLASS = AnonkTestee01.class; + private final byte[] testeeBytes; + @Option(name = "mutationCount", default_value = "3", + description = "How many bytes to mutate in a class") + private int mutationCount = 3; + + /** + * Constructs the test. + * @throws Exception if there are any errors when + * reading {@link vm.mlvm.anonloader.share.AnonkTestee01} class bytecodes. + */ + public Test() throws Exception { + this.testeeBytes = FileUtils.readClass(AnonkTestee01.class.getName()); + } + + /** + * Returns {@link vm.mlvm.anonloader.share.AnonkTestee01} class to the + * parent. + * @return {@link vm.mlvm.anonloader.share.AnonkTestee01} class. + */ + @Override + protected Class getHostClass() { + return HOST_CLASS; + } + + /** + * Takes {@link vm.mlvm.anonloader.share.AnonkTestee01} class bytecodes + * and modifies mutationCount bytes setting them to random values. + * @return {@link vm.mlvm.anonloader.share.AnonkTestee01} class bytecodes with modified bytes. + */ + @Override + protected byte[] generateClassBytes() { + // TODO: there is non-zero probability that generated bytecode will be + // valid, so it should be a subject of fuzzing mechanism + byte[] alteredBytes = testeeBytes.clone(); + for (int j = 0; j < mutationCount; ++j) { + alteredBytes[getRNG().nextInt(alteredBytes.length)] = (byte) getRNG().nextInt(256); + } + return alteredBytes; + } + + /** + * Runs the test. + * @param args Test arguments. + */ + public static void main(String[] args) { + StressClassLoadingTest.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/heap/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/heap/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/heap/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/heap/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/heap/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/heap/Test.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc + * + * @summary converted from VM Testbase vm/mlvm/anonloader/stress/oome/heap. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.stress.oome.heap.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm -XX:-UseGCOverheadLimit vm.mlvm.anonloader.stress.oome.heap.Test + */ + +package vm.mlvm.anonloader.stress.oome.heap; + +import java.util.List; +import java.io.IOException; + +import vm.mlvm.anonloader.share.AnonkTestee01; +import vm.mlvm.share.MlvmOOMTest; +import vm.mlvm.share.MlvmTestExecutor; +import vm.mlvm.share.Env; +import vm.share.FileUtils; +import vm.share.UnsafeAccess; + +/** + * This test loads a class using Unsafe.defineAnonymousClass, creates instances + * of that class and stores them, expecting Heap OOME. + * + */ + +public class Test extends MlvmOOMTest { + @Override + protected void checkOOME(OutOfMemoryError oome) { + String message = oome.getMessage(); + if (!"Java heap space".equals(message)) { + throw new RuntimeException("TEST FAIL : wrong OOME", oome); + } + } + @Override + protected void eatMemory(List list) { + byte[] classBytes = null; + try { + classBytes = FileUtils.readClass(AnonkTestee01.class.getName()); + } catch (IOException e) { + Env.throwAsUncheckedException(e); + } + try { + while (true) { + list.add(UnsafeAccess.unsafe.defineAnonymousClass(AnonkTestee01.class, + classBytes, null).newInstance()); + } + } catch (InstantiationException | IllegalAccessException e) { + Env.throwAsUncheckedException(e); + } + } + + public static void main(String[] args) { + MlvmTestExecutor.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/Test.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc + * + * @summary converted from VM Testbase vm/mlvm/anonloader/stress/oome/metaspace. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.stress.oome.metaspace.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm -XX:-UseGCOverheadLimit -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=20m vm.mlvm.anonloader.stress.oome.metaspace.Test + */ + +package vm.mlvm.anonloader.stress.oome.metaspace; + +import java.util.List; +import java.io.IOException; + +import vm.mlvm.anonloader.share.AnonkTestee01; +import vm.mlvm.share.MlvmOOMTest; +import vm.mlvm.share.MlvmTestExecutor; +import vm.mlvm.share.Env; +import vm.share.FileUtils; +import vm.share.UnsafeAccess; + +/** + * This test loads classes using Unsafe.defineAnonymousClass and stores them, + * expecting Metaspace OOME. + * + */ +public class Test extends MlvmOOMTest { + @Override + protected void checkOOME(OutOfMemoryError oome) { + String message = oome.getMessage(); + if (!"Metaspace".equals(message) && !"Compressed class space".equals(message)) { + throw new RuntimeException("TEST FAIL : wrong OOME", oome); + } + } + + @Override + protected void eatMemory(List list) { + byte[] classBytes = null; + try { + classBytes = FileUtils.readClass(AnonkTestee01.class.getName()); + } catch (IOException e) { + Env.throwAsUncheckedException(e); + } + while (true) { + list.add(UnsafeAccess.unsafe.defineAnonymousClass(AnonkTestee01.class, + classBytes, null)); + } + } + + public static void main(String[] args) { + MlvmTestExecutor.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/parallelLoad/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/parallelLoad/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/parallelLoad/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/parallelLoad/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/parallelLoad/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/parallelLoad/Test.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc + * + * @summary converted from VM Testbase vm/mlvm/anonloader/stress/parallelLoad. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.stress.parallelLoad.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * -XX:+BytecodeVerificationLocal + * vm.mlvm.anonloader.stress.parallelLoad.Test + * -threadsPerCpu 4 + * -threadsExtra 20 + * -parseTimeout 0 + * -unsafeLoad true + */ + +package vm.mlvm.anonloader.stress.parallelLoad; + +import vm.mlvm.anonloader.share.StressClassLoadingTest; +import vm.mlvm.anonloader.share.AnonkTestee01; +import vm.mlvm.share.MlvmTestExecutor; +import vm.mlvm.share.MultiThreadedTest; +import vm.share.FileUtils; + +/** + * Verifies that loading classes in parallel from several threads using + * {@link sun.misc.Unsafe#defineAnonymousClass} + * does not produce exceptions and crashes. + * + */ +public class Test extends MultiThreadedTest { + private static final Class HOST_CLASS = AnonkTestee01.class; + private static final String NAME_PREFIX = "thread%03d"; + + private final byte[] classBytes; + + private static class SubTest extends StressClassLoadingTest { + private final byte[] classBytes; + + public SubTest(byte[] classBytes) { + this.classBytes = classBytes; + } + + @Override + protected Class getHostClass() { + return HOST_CLASS; + } + + @Override + protected byte[] generateClassBytes() { + return classBytes; + } + } + + public Test() throws Exception { + classBytes = FileUtils.readClass(HOST_CLASS.getName()); + } + + /** + * Constructs a sub-test class and runs it. The sub-test class loads + * {@link vm.mlvm.anonloader.share.AnonkTestee01} class bytecodes + * using {@link sun.misc.Unsafe#defineAnonymousClass} + * @param numThread Number of the thread + * @throws Exception if there any exceptions thrown in the sub-test + */ + @Override + protected boolean runThread(int numThread) throws Exception { + SubTest subTest = new SubTest(classBytes); + subTest.setFileNamePrefix(String.format(NAME_PREFIX, numThread)); + return subTest.run(); + } + + /** + * Runs the test. + * @param args Test arguments. + */ + public static void main(String[] args) { + MlvmTestExecutor.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/randomBytecodes/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/randomBytecodes/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/randomBytecodes/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/randomBytecodes/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/randomBytecodes/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/randomBytecodes/Test.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.misc + * + * @summary converted from VM Testbase vm/mlvm/anonloader/stress/randomBytecodes. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.anonloader.stress.randomBytecodes.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.anonloader.stress.randomBytecodes.Test -stressIterationsFactor 100000 + */ + +package vm.mlvm.anonloader.stress.randomBytecodes; + +import java.util.Arrays; +import vm.mlvm.anonloader.share.StressClassLoadingTest; + +/** + * The test does the following in a cycle: + *
    + *
  1. Creates a class bytecodes that has a valid 12-byte header + * and has totally random bytes after the header + *
  2. Tries to load such class using: + *
      + *
    • a custom class loader, or + *
    • {@link sun.misc.Unsafe#defineAnonymousClass} + * when {@code -unsafeLoad true} is set. + *
    + *
+ * + *

In most cases the resulting class file is invalid and rejected by + * the VM verifier. But this test is looking for pathological cases + * such as infinite loops in the verifier or VM crashes. + * + *

NB: There is a tool to load invalid classes saved by this test. + * Please see tool documentation at {@link vm.mlvm.tools.LoadClass}. + * + */ +public class Test extends StressClassLoadingTest { + private static final Class HOST_CLASS = Test.class; + private static final int MAX_SIZE = 0xFFF7; + private static final byte[] CLASS_HEADER = new byte[] { + (byte)0xCA, (byte)0xFE, (byte)0xBA, (byte)0xBE, + 0x00, 0x00, 0x00, 0x32 + }; + + /** + * Returns {@link vm.mlvm.anonloader.share.AnonkTestee01} class to the + * parent. + * @return {@link vm.mlvm.anonloader.share.AnonkTestee01} class. + */ + @Override + protected Class getHostClass() { + return HOST_CLASS; + } + + /** + * Generates a class with valid header (magic and version fields) and + * random bytes after the header. + *

Class size is random ([8..65527]). + * Byte values are limited to [0..11] range in order to increase + * possiblity that the random class passes the initial (dead-on-arrival) + * stages of the verifier and is rejected + * in more interesting ones, like method bytecode verification. + * Class version is 52. + * + * @return Class with valid Java header (8 bytes) and totally random bytes + * after the header + */ + @Override + protected byte[] generateClassBytes() { + final byte[] classBytes = Arrays.copyOf(CLASS_HEADER, + CLASS_HEADER.length + getRNG().nextInt(MAX_SIZE)); + for (int j = CLASS_HEADER.length; j < classBytes.length; j++) { + classBytes[j] = (byte) getRNG().nextInt(12); + } + + return classBytes; + } + + /** + * Runs the test. + * @param args Test arguments. + */ + public static void main(String[] args) { + StressClassLoadingTest.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenCPFullOfMH.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenCPFullOfMH.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenCPFullOfMH.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.cp.share; + +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.ClassWriterExt; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.org.objectweb.asm.Opcodes; +import jdk.internal.org.objectweb.asm.Handle; + +import vm.mlvm.share.ClassfileGenerator; +import vm.mlvm.share.Env; + +public class GenCPFullOfMH extends GenFullCP { + + public static void main(String[] args) { + ClassfileGenerator.main(args); + } + + @Override + protected void generateCommonData(ClassWriterExt cw) { + cw.setCacheMHandles(false); + + cw.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, + STATIC_FIELD_NAME, + STATIC_FIELD_SIGNATURE, null, false); + + cw.visitField(Opcodes.ACC_PUBLIC, + INSTANCE_FIELD_NAME, + INSTANCE_FIELD_SIGNATURE, null, false); + + createInitMethod(cw); + createTargetMethod(cw); + + MethodVisitor mv = cw.visitMethod( + Opcodes.ACC_PUBLIC, + INSTANCE_TARGET_METHOD_NAME, + INSTANCE_TARGET_METHOD_SIGNATURE, + null, + new String[0]); + finishMethodCode(mv); + } + + @Override + protected void generateCPEntryData(ClassWriter cw, MethodVisitor mw) { + HandleType[] types = HandleType.values(); + HandleType type = types[Env.getRNG().nextInt(types.length)]; + + switch (type) { + case PUTFIELD: + case PUTSTATIC: + mw.visitInsn(Opcodes.ICONST_0); + break; + case INVOKESPECIAL: + case INVOKEVIRTUAL: + case INVOKEINTERFACE: + mw.visitInsn(Opcodes.ACONST_NULL); + break; + } + + Handle handle; + switch (type) { + case GETFIELD: + case PUTFIELD: + handle = new Handle(type.asmTag, + fullClassName, + INSTANCE_FIELD_NAME, + INSTANCE_FIELD_SIGNATURE); + break; + case GETSTATIC: + case PUTSTATIC: + handle = new Handle(type.asmTag, + fullClassName, + STATIC_FIELD_NAME, + STATIC_FIELD_SIGNATURE); + break; + case NEWINVOKESPECIAL: + handle = new Handle(type.asmTag, + fullClassName, + INIT_METHOD_NAME, + INIT_METHOD_SIGNATURE); + break; + case INVOKESTATIC: + handle = new Handle(type.asmTag, + fullClassName, + TARGET_METHOD_NAME, + TARGET_METHOD_SIGNATURE); + break; + case INVOKEINTERFACE: + handle = new Handle(type.asmTag, + getDummyInterfaceClassName(), + INSTANCE_TARGET_METHOD_NAME, + INSTANCE_TARGET_METHOD_SIGNATURE); + break; + case INVOKESPECIAL: + case INVOKEVIRTUAL: + handle = new Handle(type.asmTag, + fullClassName, + INSTANCE_TARGET_METHOD_NAME, + INSTANCE_TARGET_METHOD_SIGNATURE); + break; + default: + throw new Error("Unexpected handle type " + type); + } + mw.visitLdcInsn(handle); + + switch (type) { + case GETFIELD: + case GETSTATIC: + mw.visitInsn(Opcodes.POP); + break; + } + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenCPFullOfMT.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenCPFullOfMT.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenCPFullOfMT.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.cp.share; + +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.ClassWriterExt; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.org.objectweb.asm.Opcodes; +import jdk.internal.org.objectweb.asm.Type; + +import vm.mlvm.share.ClassfileGenerator; + +public class GenCPFullOfMT extends GenFullCP { + + public static void main(String[] args) { + ClassfileGenerator.main(args); + } + + @Override + protected void generateCommonData(ClassWriterExt cw) { + cw.setCacheMTypes(false); + super.generateCommonData(cw); + } + + @Override + protected void generateCPEntryData(ClassWriter cw, MethodVisitor mw) { + mw.visitLdcInsn(Type.getMethodType("(FIZ)V")); + mw.visitInsn(Opcodes.POP); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenFullCP.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenFullCP.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenFullCP.java @@ -0,0 +1,316 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.cp.share; + +import jdk.internal.org.objectweb.asm.ByteVector; +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.ClassWriterExt; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.org.objectweb.asm.Opcodes; +import jdk.internal.org.objectweb.asm.Type; + +import vm.mlvm.share.ClassfileGenerator; +import vm.mlvm.share.Env; + +public abstract class GenFullCP extends ClassfileGenerator { + + /** + * Generate field description for object type from class name: + * return "L" + className + ";"; + * @param className Class name + * @return field descriptor representing the class type + */ + protected static String fd(String className) { + return "L" + className + ";"; + } + + // Universal constants + protected static final String JL_OBJECT = "java/lang/Object"; + protected static final String JL_CLASS = "java/lang/Class"; + protected static final String JL_CLASSLOADER = "java/lang/ClassLoader"; + protected static final String JL_STRING = "java/lang/String"; + protected static final String JL_RUNTIMEEXCEPTION = "java/lang/RuntimeException"; + protected static final String JL_BOOTSTRAPMETHODERROR = "java/lang/BootstrapMethodError"; + protected static final String JL_THROWABLE = "java/lang/Throwable"; + protected static final String JLI_METHODTYPE = "java/lang/invoke/MethodType"; + protected static final String JLI_METHODHANDLE = "java/lang/invoke/MethodHandle"; + protected static final String JLI_METHODHANDLES = "java/lang/invoke/MethodHandles"; + protected static final String JLI_METHODHANDLES_LOOKUP = "java/lang/invoke/MethodHandles$Lookup"; + protected static final String JLI_CALLSITE = "java/lang/invoke/CallSite"; + protected static final String JLI_CONSTANTCALLSITE = "java/lang/invoke/ConstantCallSite"; + + protected static final String VOID_NO_ARG_METHOD_SIGNATURE = "()V"; + + protected static final String NEW_INVOKE_SPECIAL_CLASS_NAME = "java/lang/invoke/NewInvokeSpecialCallSite"; + protected static final String NEW_INVOKE_SPECIAL_BOOTSTRAP_METHOD_SIGNATURE = "(" + fd(JLI_METHODHANDLES_LOOKUP) + fd(JL_STRING) + fd(JLI_METHODTYPE) + ")V"; + + protected static final String INIT_METHOD_NAME = ""; + protected static final String STATIC_INIT_METHOD_NAME = ""; + + // Generated class constants + protected static final int CLASSFILE_VERSION = 51; + + protected static final int CP_CONST_COUNT = 65400; + protected static final int MAX_METHOD_SIZE = 65400; + protected static final int BYTES_PER_LDC = 5; + protected static final int LDC_PER_METHOD = MAX_METHOD_SIZE / BYTES_PER_LDC; + protected static final int METHOD_COUNT = CP_CONST_COUNT / LDC_PER_METHOD; + + protected static final String PARENT_CLASS_NAME = JL_OBJECT; + + protected static final String INIT_METHOD_SIGNATURE = VOID_NO_ARG_METHOD_SIGNATURE; + + protected static final String MAIN_METHOD_NAME = "main"; + protected static final String MAIN_METHOD_SIGNATURE = "(" + "[" + fd(JL_STRING) + ")V"; + + protected static final String TEST_METHOD_NAME = "test"; + protected static final String TEST_METHOD_SIGNATURE = VOID_NO_ARG_METHOD_SIGNATURE; + + protected static final String STATIC_FIELD_NAME = "testStatic"; + protected static final String STATIC_FIELD_SIGNATURE = "Z"; + + protected static final String INSTANCE_FIELD_NAME = "testInstance"; + protected static final String INSTANCE_FIELD_SIGNATURE = "Z"; + + protected static final String STATIC_BOOTSTRAP_FIELD_NAME = "testCSStatic"; + protected static final String STATIC_BOOTSTRAP_FIELD_SIGNATURE = fd(JLI_CALLSITE); + + protected static final String INSTANCE_BOOTSTRAP_FIELD_NAME = "testCSInstance"; + protected static final String INSTANCE_BOOTSTRAP_FIELD_SIGNATURE = fd(JLI_CALLSITE); + + protected static final String BOOTSTRAP_METHOD_NAME = "bootstrap"; + protected static final String BOOTSTRAP_METHOD_SIGNATURE = "(" + fd(JLI_METHODHANDLES_LOOKUP) + fd(JL_STRING) + fd(JLI_METHODTYPE) + ")" + fd(JLI_CALLSITE); + + protected static final String INSTANCE_BOOTSTRAP_METHOD_NAME = "bootstrapInstance"; + protected static final String INSTANCE_BOOTSTRAP_METHOD_SIGNATURE = BOOTSTRAP_METHOD_SIGNATURE; + + protected static final String TARGET_METHOD_NAME = "target"; + protected static final String TARGET_METHOD_SIGNATURE = VOID_NO_ARG_METHOD_SIGNATURE; + + protected static final String INSTANCE_TARGET_METHOD_NAME = "targetInstance"; + protected static final String INSTANCE_TARGET_METHOD_SIGNATURE = VOID_NO_ARG_METHOD_SIGNATURE; + + protected interface DummyInterface { + public void targetInstance(); + } + + // Helper methods + + protected static String getDummyInterfaceClassName() { + return DummyInterface.class.getName().replace('.', '/'); + } + + protected static void createLogMsgCode(MethodVisitor mv, String msg) { + mv.visitLdcInsn(msg); + mv.visitMethodInsn(Opcodes.INVOKESTATIC, "vm/mlvm/share/Env", "traceVerbose", "(Ljava/lang/String;)V"); + } + + protected static void createThrowRuntimeExceptionCode(MethodVisitor mv, String msg) { + createThrowRuntimeExceptionCodeHelper(mv, msg, false); + } + + // Expects a throwable (the cause) to be on top of the stack when called. + protected static void createThrowRuntimeExceptionCodeWithCause(MethodVisitor mv, String msg) { + createThrowRuntimeExceptionCodeHelper(mv, msg, true); + } + + // If set_cause is true it expects a Throwable (the cause) to be on top of the stack when called. + protected static void createThrowRuntimeExceptionCodeHelper(MethodVisitor mv, String msg, boolean set_cause) { + mv.visitTypeInsn(Opcodes.NEW, JL_RUNTIMEEXCEPTION); + mv.visitInsn(Opcodes.DUP); + mv.visitLdcInsn(msg); + mv.visitMethodInsn(Opcodes.INVOKESPECIAL, JL_RUNTIMEEXCEPTION, + INIT_METHOD_NAME, "(" + fd(JL_STRING) + ")V"); + if (set_cause) { + mv.visitInsn(Opcodes.SWAP); + mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JL_RUNTIMEEXCEPTION, + "initCause", "(" + fd(JL_THROWABLE) + ")"+ fd(JL_THROWABLE)); + } + mv.visitInsn(Opcodes.ATHROW); + } + + protected static void createThrowRuntimeExceptionMethod(ClassWriter cw, boolean isStatic, String methodName, String methodSignature) { + MethodVisitor mv = cw.visitMethod( + Opcodes.ACC_PUBLIC | (isStatic ? Opcodes.ACC_STATIC : 0), + methodName, methodSignature, + null, + new String[0]); + + createThrowRuntimeExceptionCode(mv, "Method " + methodName + methodSignature + " should not be called!"); + + mv.visitMaxs(-1, -1); + mv.visitEnd(); + } + + protected static void finishMethodCode(MethodVisitor mv) { + finishMethodCode(mv, Opcodes.RETURN); + } + + protected static void finishMethodCode(MethodVisitor mv, int returnOpcode) { + mv.visitInsn(returnOpcode); + mv.visitMaxs(-1, -1); + mv.visitEnd(); + } + + protected void createClassInitMethod(ClassWriter cw) { + } + + protected void createInitMethod(ClassWriter cw) { + MethodVisitor mv = cw.visitMethod( + Opcodes.ACC_PUBLIC, + INIT_METHOD_NAME, INIT_METHOD_SIGNATURE, + null, + new String[0]); + + mv.visitIntInsn(Opcodes.ALOAD, 0); + mv.visitMethodInsn(Opcodes.INVOKESPECIAL, + PARENT_CLASS_NAME, + INIT_METHOD_NAME, INIT_METHOD_SIGNATURE); + + createLogMsgCode(mv, fullClassName + " constructor called"); + + finishMethodCode(mv); + } + + protected void createTargetMethod(ClassWriter cw) { + MethodVisitor mv = cw.visitMethod( + Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, + TARGET_METHOD_NAME, TARGET_METHOD_SIGNATURE, + null, + new String[0]); + + createLogMsgCode(mv, fullClassName + "." + TARGET_METHOD_NAME + TARGET_METHOD_SIGNATURE + " called"); + + finishMethodCode(mv); + } + + protected void createBootstrapMethod(ClassWriter cw) { + createBootstrapMethod(cw, true, BOOTSTRAP_METHOD_NAME, BOOTSTRAP_METHOD_SIGNATURE); + } + + protected void createBootstrapMethod(ClassWriter cw, boolean isStatic, String methodName, String methodSignature) { + MethodVisitor mv = cw.visitMethod( + (isStatic ? Opcodes.ACC_STATIC : 0) | Opcodes.ACC_PUBLIC, + methodName, methodSignature, + null, new String[0]); + + createLogMsgCode(mv, fullClassName + "." + BOOTSTRAP_METHOD_NAME + BOOTSTRAP_METHOD_SIGNATURE + " called"); + + int argShift = isStatic ? 0 : 1; + + mv.visitTypeInsn(Opcodes.NEW, JLI_CONSTANTCALLSITE); + mv.visitInsn(Opcodes.DUP); + mv.visitVarInsn(Opcodes.ALOAD, 0 + argShift); + mv.visitLdcInsn(Type.getObjectType(fullClassName)); + mv.visitVarInsn(Opcodes.ALOAD, 1 + argShift); + mv.visitVarInsn(Opcodes.ALOAD, 2 + argShift); + mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, + JLI_METHODHANDLES_LOOKUP, "findStatic", + "(" + fd(JL_CLASS) + fd(JL_STRING) + fd(JLI_METHODTYPE) + ")" + fd(JLI_METHODHANDLE)); + mv.visitMethodInsn(Opcodes.INVOKESPECIAL, JLI_CONSTANTCALLSITE, + INIT_METHOD_NAME, "(" + fd(JLI_METHODHANDLE) + ")V"); + + finishMethodCode(mv, Opcodes.ARETURN); + } + + @Override + public Klass[] generateBytecodes() { + + // COMPUTE_FRAMES were disabled due to JDK-8079697 + ClassWriterExt cw = new ClassWriterExt(/*ClassWriter.COMPUTE_FRAMES |*/ ClassWriter.COMPUTE_MAXS); + + String[] interfaces = new String[1]; + interfaces[0] = getDummyInterfaceClassName(); + cw.visit(CLASSFILE_VERSION, Opcodes.ACC_PUBLIC, fullClassName, null, PARENT_CLASS_NAME, interfaces); + + generateCommonData(cw); + + MethodVisitor mainMV = cw.visitMethod( + Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, + MAIN_METHOD_NAME, MAIN_METHOD_SIGNATURE, + null, new String[0]); + + mainMV.visitTypeInsn(Opcodes.NEW, fullClassName); + mainMV.visitInsn(Opcodes.DUP); + mainMV.visitMethodInsn(Opcodes.INVOKESPECIAL, fullClassName, INIT_METHOD_NAME, INIT_METHOD_SIGNATURE); + + int constCount = 0; + int methodNum = 0; + + // TODO: check real CP size and also limit number of iterations in this cycle + while (constCount < CP_CONST_COUNT) { + final String methodName = TEST_METHOD_NAME + String.format("%02d", methodNum); + + MethodVisitor mw = cw.visitMethod( + Opcodes.ACC_PUBLIC, + methodName, TEST_METHOD_SIGNATURE, + null, new String[0]); + + generateTestMethodProlog(mw); + + // TODO: check real CP size and also limit number of iterations in this cycle + while (constCount < CP_CONST_COUNT && cw.getBytecodeLength(mw) < MAX_METHOD_SIZE) { + generateCPEntryData(cw, mw); + ++constCount; + } + + generateTestMethodEpilog(mw); + + mw.visitMaxs(-1, -1); + mw.visitEnd(); + + Env.traceNormal("Method " + fullClassName + "." + methodName + "(): " + + constCount + " constants in CP, " + + cw.getBytecodeLength(mw) + " bytes of code"); + + mainMV.visitInsn(Opcodes.DUP); + mainMV.visitMethodInsn(Opcodes.INVOKEVIRTUAL, fullClassName, methodName, TEST_METHOD_SIGNATURE); + + ++methodNum; + } + + mainMV.visitInsn(Opcodes.POP); + finishMethodCode(mainMV); + + cw.visitEnd(); + return new Klass[] { new Klass(this.pkgName, this.shortClassName, MAIN_METHOD_NAME, MAIN_METHOD_SIGNATURE, cw.toByteArray()) }; + } + + protected void generateCommonData(ClassWriterExt cw) { + createClassInitMethod(cw); + createInitMethod(cw); + createTargetMethod(cw); + createBootstrapMethod(cw); + } + + protected void generateTestMethodProlog(MethodVisitor mw) { + } + + protected abstract void generateCPEntryData(ClassWriter cw, MethodVisitor mw); + + protected void generateTestMethodEpilog(MethodVisitor mw) { + mw.visitInsn(Opcodes.RETURN); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyCorrectBootstrap.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyCorrectBootstrap.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyCorrectBootstrap.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.cp.share; + +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.ClassWriterExt; +import jdk.internal.org.objectweb.asm.Handle; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.org.objectweb.asm.Opcodes; +import jdk.internal.org.objectweb.asm.Type; + +import vm.mlvm.share.ClassfileGenerator; +import vm.mlvm.share.Env; + +public class GenManyIndyCorrectBootstrap extends GenFullCP { + + /** + * Generates a class file and writes it to a file + * @see vm.mlvm.share.ClassfileGenerator + * @param args Parameters for ClassfileGenerator.main() method + */ + public static void main(String[] args) { + ClassfileGenerator.main(args); + } + + /** + * Creates static init method, which constructs a call site object, which refers to the target method + * and invokes Dummy.setMH() on this call site + * @param cw Class writer object + */ + @Override + protected void createClassInitMethod(ClassWriter cw) { + MethodVisitor mw = cw.visitMethod( + Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, + STATIC_INIT_METHOD_NAME, INIT_METHOD_SIGNATURE, + null, + new String[0]); + + mw.visitMethodInsn(Opcodes.INVOKESTATIC, JLI_METHODHANDLES, "lookup", "()" + fd(JLI_METHODHANDLES_LOOKUP)); + mw.visitLdcInsn(Type.getObjectType(fullClassName)); + mw.visitLdcInsn(TARGET_METHOD_NAME); + mw.visitLdcInsn(TARGET_METHOD_SIGNATURE); + mw.visitLdcInsn(Type.getObjectType(fullClassName)); + mw.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JL_CLASS, + "getClassLoader", "()" + fd(JL_CLASSLOADER)); + mw.visitMethodInsn(Opcodes.INVOKESTATIC, JLI_METHODTYPE, + "fromMethodDescriptorString", "(" + fd(JL_STRING) + fd(JL_CLASSLOADER) + ")" + fd(JLI_METHODTYPE)); + mw.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JLI_METHODHANDLES_LOOKUP, + "findStatic", "(" + fd(JL_CLASS) + fd(JL_STRING) + fd(JLI_METHODTYPE) + ")" + fd(JLI_METHODHANDLE)); + mw.visitMethodInsn(Opcodes.INVOKESTATIC, NEW_INVOKE_SPECIAL_CLASS_NAME, + "setMH", "(" + fd(JLI_METHODHANDLE) + ")V"); + + finishMethodCode(mw); + } + + /** + * Disables invoke dynamic CP entry caching and generate default common data + * @param cw Class writer object + */ + @Override + protected void generateCommonData(ClassWriterExt cw) { + cw.setCacheInvokeDynamic(false); + super.generateCommonData(cw); + } + + /** + * Generates an invokedynamic instruction (plus CP entry) + * which has a valid reference kind in the CP method handle entry for the bootstrap method + * @param cw Class writer object + * @param mw Method writer object + */ + @Override + protected void generateCPEntryData(ClassWriter cw, MethodVisitor mw) { + Handle bsm; + if (Env.getRNG().nextBoolean()) { + bsm = new Handle(Opcodes.H_NEWINVOKESPECIAL, + NEW_INVOKE_SPECIAL_CLASS_NAME, + INIT_METHOD_NAME, + NEW_INVOKE_SPECIAL_BOOTSTRAP_METHOD_SIGNATURE); + } else { + bsm = new Handle(Opcodes.H_INVOKESTATIC, + this.fullClassName, + BOOTSTRAP_METHOD_NAME, + BOOTSTRAP_METHOD_SIGNATURE); + } + mw.visitInvokeDynamicInsn(TARGET_METHOD_NAME, + TARGET_METHOD_SIGNATURE, + bsm); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyIncorrectBootstrap.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyIncorrectBootstrap.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyIncorrectBootstrap.java @@ -0,0 +1,274 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.cp.share; + +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.ClassWriterExt; +import jdk.internal.org.objectweb.asm.Handle; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.org.objectweb.asm.Opcodes; +import jdk.internal.org.objectweb.asm.Type; +import jdk.internal.org.objectweb.asm.Label; + +import vm.mlvm.share.ClassfileGenerator; +import vm.mlvm.share.Env; + +public class GenManyIndyIncorrectBootstrap extends GenFullCP { + + /** + * Generates a class file and writes it to a file + * @see vm.mlvm.share.ClassfileGenerator + * @param args Parameters for ClassfileGenerator.main() method + */ + public static void main(String[] args) { + ClassfileGenerator.main(args); + } + + /** + * Create class constructor, which + * create a call site for target method + * and puts it into static and instance fields + * @param cw Class writer object + */ + @Override + protected void createInitMethod(ClassWriter cw) { + MethodVisitor mw = cw.visitMethod( + Opcodes.ACC_PUBLIC, + INIT_METHOD_NAME, INIT_METHOD_SIGNATURE, + null, + new String[0]); + + mw.visitVarInsn(Opcodes.ALOAD, 0); + mw.visitMethodInsn(Opcodes.INVOKESPECIAL, PARENT_CLASS_NAME, + INIT_METHOD_NAME, INIT_METHOD_SIGNATURE); + + // Create a call site for the target method and store it into bootstrap fields + mw.visitVarInsn(Opcodes.ALOAD, 0); + mw.visitTypeInsn(Opcodes.NEW, JLI_CONSTANTCALLSITE); + mw.visitInsn(Opcodes.DUP); + mw.visitMethodInsn(Opcodes.INVOKESTATIC, JLI_METHODHANDLES, + "lookup", "()" + fd(JLI_METHODHANDLES_LOOKUP)); + mw.visitLdcInsn(Type.getObjectType(fullClassName)); + mw.visitLdcInsn(TARGET_METHOD_NAME); + mw.visitLdcInsn(TARGET_METHOD_SIGNATURE); + mw.visitLdcInsn(Type.getObjectType(fullClassName)); + mw.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JL_CLASS, + "getClassLoader", "()" + fd(JL_CLASSLOADER)); + mw.visitMethodInsn(Opcodes.INVOKESTATIC, JLI_METHODTYPE, + "fromMethodDescriptorString", "(" + fd(JL_STRING) + fd(JL_CLASSLOADER) + ")" + fd(JLI_METHODTYPE)); + mw.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JLI_METHODHANDLES_LOOKUP, + "findStatic", "(" + fd(JL_CLASS) + fd(JL_STRING) + fd(JLI_METHODTYPE) + ")" + fd(JLI_METHODHANDLE)); + mw.visitMethodInsn(Opcodes.INVOKESPECIAL, JLI_CONSTANTCALLSITE, + INIT_METHOD_NAME, "(" + fd(JLI_METHODHANDLE) + ")V"); + mw.visitInsn(Opcodes.DUP); + mw.visitFieldInsn(Opcodes.PUTSTATIC, fullClassName, STATIC_BOOTSTRAP_FIELD_NAME, STATIC_BOOTSTRAP_FIELD_SIGNATURE); + mw.visitFieldInsn(Opcodes.PUTFIELD, fullClassName, INSTANCE_BOOTSTRAP_FIELD_NAME, INSTANCE_BOOTSTRAP_FIELD_SIGNATURE); + + finishMethodCode(mw); + } + + /** + * Creates a target method which always throw. It should not be called, + * since all invokedynamic instructions have invalid bootstrap method types + * @param cw Class writer object + */ + @Override + protected void createTargetMethod(ClassWriter cw) { + createThrowRuntimeExceptionMethod(cw, true, TARGET_METHOD_NAME, TARGET_METHOD_SIGNATURE); + } + + /** + * Creates a bootstrap method which always throw. It should not be called, + * since all invokedynamic instructions have invalid bootstrap method types + * @param cw Class writer object + */ + @Override + protected void createBootstrapMethod(ClassWriter cw) { + createThrowRuntimeExceptionMethod(cw, true, BOOTSTRAP_METHOD_NAME, BOOTSTRAP_METHOD_SIGNATURE); + } + + /** + * Generates common data for class plus two fields that hold CallSite + * and used as bootstrap targets + * @param cw Class writer object + */ + @Override + protected void generateCommonData(ClassWriterExt cw) { + cw.setCacheInvokeDynamic(false); + + cw.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, + STATIC_BOOTSTRAP_FIELD_NAME, + STATIC_BOOTSTRAP_FIELD_SIGNATURE, null, null); + + cw.visitField(Opcodes.ACC_PUBLIC, + INSTANCE_BOOTSTRAP_FIELD_NAME, + INSTANCE_BOOTSTRAP_FIELD_SIGNATURE, null, null); + + super.generateCommonData(cw); + + createThrowRuntimeExceptionMethod(cw, false, INSTANCE_BOOTSTRAP_METHOD_NAME, INSTANCE_BOOTSTRAP_METHOD_SIGNATURE); + } + + Label throwMethodLabel; + + // The exception to expect that is wrapped in a BootstrapMethodError + static final String WRAPPED_EXCEPTION = "java/lang/invoke/WrongMethodTypeException"; + + // The error to expect that is not wrapped in a BootstrapMethodError and + // is thrown directly + static final String DIRECT_ERROR = "java/lang/IncompatibleClassChangeError"; + + /** + * Generates an invokedynamic instruction (plus CP entry) + * which has invalid reference kind in the CP method handle entry for the bootstrap method + * @param cw Class writer object + * @param mw Method writer object + */ + @Override + protected void generateCPEntryData(ClassWriter cw, MethodVisitor mw) { + HandleType[] types = HandleType.values(); + HandleType type = types[Env.getRNG().nextInt(types.length)]; + + switch (type) { + case GETFIELD: + case PUTFIELD: + case GETSTATIC: + case PUTSTATIC: + case INVOKESPECIAL: + case INVOKEVIRTUAL: + case INVOKEINTERFACE: + // Handle these cases + break; + default: + // And don't generate code for all other cases + return; + } + + Label indyThrowableBegin = new Label(); + Label indyThrowableEnd = new Label(); + Label catchThrowableLabel = new Label(); + + Label indyBootstrapBegin = new Label(); + Label indyBootstrapEnd = new Label(); + Label catchBootstrapLabel = new Label(); + + mw.visitTryCatchBlock(indyBootstrapBegin, indyBootstrapEnd, catchBootstrapLabel, JL_BOOTSTRAPMETHODERROR); + mw.visitLabel(indyBootstrapBegin); + + mw.visitTryCatchBlock(indyThrowableBegin, indyThrowableEnd, catchThrowableLabel, JL_THROWABLE); + mw.visitLabel(indyThrowableBegin); + + Handle bsm; + switch (type) { + case GETFIELD: + case PUTFIELD: + bsm = new Handle(type.asmTag, + fullClassName, + INSTANCE_BOOTSTRAP_FIELD_NAME, + INSTANCE_BOOTSTRAP_FIELD_SIGNATURE); + break; + case GETSTATIC: + case PUTSTATIC: + bsm = new Handle(type.asmTag, + fullClassName, + STATIC_BOOTSTRAP_FIELD_NAME, + STATIC_BOOTSTRAP_FIELD_SIGNATURE); + break; + case INVOKESPECIAL: + case INVOKEVIRTUAL: + case INVOKEINTERFACE: + bsm = new Handle(type.asmTag, + fullClassName, + INSTANCE_BOOTSTRAP_METHOD_NAME, + INSTANCE_BOOTSTRAP_METHOD_SIGNATURE); + break; + default: + throw new Error("Unexpected handle type " + type); + } + + mw.visitInvokeDynamicInsn(TARGET_METHOD_NAME, + TARGET_METHOD_SIGNATURE, + bsm); + + mw.visitLabel(indyBootstrapEnd); + mw.visitLabel(indyThrowableEnd); + + // No exception at all, throw error + Label throwLabel = new Label(); + mw.visitJumpInsn(Opcodes.GOTO, throwLabel); + + // JDK-8079697 workaround: we have to generate stackmaps manually + mw.visitFrame(Opcodes.F_SAME1, 0, new Object[0], 1, new Object[] { JL_BOOTSTRAPMETHODERROR }); + + // Got a bootstrapmethoderror as expected, check that it is wrapping what we expect + mw.visitLabel(catchBootstrapLabel); + + // Save error in case we need to rethrow it + mw.visitInsn(Opcodes.DUP); + mw.visitVarInsn(Opcodes.ASTORE, 1); + mw.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JL_THROWABLE, "getCause", "()" + fd(JL_THROWABLE)); + + // If it is the expected exception, goto next block + mw.visitTypeInsn(Opcodes.INSTANCEOF, WRAPPED_EXCEPTION); + Label nextBlockLabel = new Label(); + mw.visitJumpInsn(Opcodes.IFNE, nextBlockLabel); + + // Not the exception we were expectiong, throw error + mw.visitVarInsn(Opcodes.ALOAD, 1); // Use full chain as cause + createThrowRuntimeExceptionCodeWithCause(mw, + "invokedynamic got an unexpected wrapped exception (expected " + WRAPPED_EXCEPTION + + ", bootstrap type=" + type + + ", opcode=" + type.asmTag + ")!"); + + // JDK-8079697 workaround: we have to generate stackmaps manually + mw.visitFrame(Opcodes.F_SAME1, 0, new Object[0], 1, new Object[] { JL_THROWABLE }); + mw.visitLabel(catchThrowableLabel); + + // Save error in case we need to rethrow it + mw.visitInsn(Opcodes.DUP); + mw.visitVarInsn(Opcodes.ASTORE, 1); + + // If it is the expected exception, goto next block + mw.visitTypeInsn(Opcodes.INSTANCEOF, DIRECT_ERROR); + mw.visitJumpInsn(Opcodes.IFNE, nextBlockLabel); + + // Not the exception we were expectiong, throw error + mw.visitVarInsn(Opcodes.ALOAD, 1); // Use full chain as cause + createThrowRuntimeExceptionCodeWithCause(mw, + "invokedynamic got an unexpected exception (expected " + DIRECT_ERROR + + ", bootstrap type" + type + + ", opcode=" + type.asmTag + ")!"); + + // JDK-8079697 workaround: we have to generate stackmaps manually + mw.visitFrame(Opcodes.F_CHOP, 0, new Object[0], 0, new Object[0]); + + // Unable to place this code once in the method epilog due to bug in ASM + mw.visitLabel(throwLabel); + createThrowRuntimeExceptionCode(mw, + "invokedynamic should always throw (bootstrap type" + type +", opcode=" + type.asmTag + ")!"); + + mw.visitFrame(Opcodes.F_SAME, 0, new Object[0], 0, new Object[0]); + mw.visitLabel(nextBlockLabel); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyOneCPX.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyOneCPX.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyOneCPX.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.cp.share; + +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.org.objectweb.asm.Opcodes; +import jdk.internal.org.objectweb.asm.Handle; + +import vm.mlvm.share.ClassfileGenerator; + +public class GenManyIndyOneCPX extends GenFullCP { + + public static void main(String[] args) { + ClassfileGenerator.main(args); + } + + @Override + protected void generateCPEntryData(ClassWriter cw, MethodVisitor mw) { + Handle bsm = new Handle(Opcodes.H_INVOKESTATIC, + fullClassName, + BOOTSTRAP_METHOD_NAME, + BOOTSTRAP_METHOD_SIGNATURE); + + mw.visitInvokeDynamicInsn(TARGET_METHOD_NAME, + TARGET_METHOD_SIGNATURE, + bsm); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/HandleType.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/HandleType.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/HandleType.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.cp.share; + +import jdk.internal.org.objectweb.asm.Opcodes; + +public enum HandleType { + GETFIELD(Opcodes.H_GETFIELD), + PUTFIELD(Opcodes.H_PUTFIELD), + GETSTATIC(Opcodes.H_GETSTATIC), + PUTSTATIC(Opcodes.H_PUTSTATIC), + NEWINVOKESPECIAL(Opcodes.H_NEWINVOKESPECIAL), + INVOKESTATIC(Opcodes.H_INVOKESTATIC), + INVOKEINTERFACE(Opcodes.H_INVOKEINTERFACE), + INVOKESPECIAL(Opcodes.H_INVOKESPECIAL), + INVOKEVIRTUAL(Opcodes.H_INVOKEVIRTUAL); + + public final int asmTag; + private HandleType(int asmTag) { + this.asmTag = asmTag; + } +} + + + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/correctBootstrap/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/correctBootstrap/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/correctBootstrap/TestDescription.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.org.objectweb.asm + * + * @summary converted from VM Testbase vm/mlvm/cp/stress/classfmt/correctBootstrap. + * VM Testbase keywords: [feature_mlvm] + * VM Testbase readme: + * DESCRIPTION + * Create a constant pool, which contains maximum number of invokedynamic constants and corresponding + * invokedynamic commands that refer to correct bootstrap method types. Verify that bootstrap/target + * methods are invoked. The maximum number of invokedynamic calls is determined dynamically. + * + * @library /vmTestbase + * /test/lib + * /vmTestbase/vm/mlvm/patches + * + * @comment patch for java.base + * @build java.base/* + * + * @comment build generator + * @build vm.mlvm.cp.share.GenManyIndyCorrectBootstrap + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.share.ClassfileGeneratorTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * vm.mlvm.share.ClassfileGeneratorTest + * -generator vm.mlvm.cp.share.GenManyIndyCorrectBootstrap + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/incorrectBootstrap/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/incorrectBootstrap/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/incorrectBootstrap/TestDescription.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.org.objectweb.asm + * + * @summary converted from VM Testbase vm/mlvm/cp/stress/classfmt/incorrectBootstrap. + * VM Testbase keywords: [feature_mlvm] + * VM Testbase readme: + * DESCRIPTION + * Create a constant pool, which contains maximum number of invokedynamic constants and corresponding + * invokedynamic commands that refer to incorrect bootstrap method types. Verify that appropriate + * exception is thrown for each invokedynamic command and bootstrap/target methods are never invoked. + * The maximum number of invokedynamic calls is determined dynamically. + * + * @library /vmTestbase + * /test/lib + * /vmTestbase/vm/mlvm/patches + * + * @comment patch for java.base + * @build java.base/* + * + * @comment build generator + * @build vm.mlvm.cp.share.GenManyIndyIncorrectBootstrap + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.share.ClassfileGeneratorTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * vm.mlvm.share.ClassfileGeneratorTest + * -generator vm.mlvm.cp.share.GenManyIndyIncorrectBootstrap + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/manyIndyOneCPX/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/manyIndyOneCPX/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/manyIndyOneCPX/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/manyIndyOneCPX/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/manyIndyOneCPX/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/manyIndyOneCPX/TestDescription.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.org.objectweb.asm + * + * @summary converted from VM Testbase vm/mlvm/cp/stress/classfmt/manyIndyOneCPX. + * VM Testbase keywords: [feature_mlvm, hangup, nonconcurrent, exclude] + * VM Testbase comments: 8199227 + * VM Testbase readme: + * DESCRIPTION + * The test creates and executes a class containing lot of invokedynamic instructions + * pointing to just one constant pool CONSTANT_InvokeDynamic entry. + * + * @library /vmTestbase + * /test/lib + * /vmTestbase/vm/mlvm/patches + * + * @comment patch for java.base + * @build java.base/* + * + * @comment build generator + * @build vm.mlvm.cp.share.GenManyIndyOneCPX + * + * @run driver jdk.test.lib.FileInstaller . . + * @ignore 8199227 + * + * @comment build test class and indify classes + * @build vm.mlvm.share.ClassfileGeneratorTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * vm.mlvm.share.ClassfileGeneratorTest + * -generator vm.mlvm.cp.share.GenManyIndyOneCPX + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mh/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mh/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mh/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mh/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mh/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mh/TestDescription.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.org.objectweb.asm + * + * @summary converted from VM Testbase vm/mlvm/cp/stress/classfmt/mh. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * Create a constant pool, which contains maximum number of method handle constants and corresponding + * ldc commands. Verify that the class is loaded without errors. + * The maximum is determined dynamically. + * + * @library /vmTestbase + * /test/lib + * /vmTestbase/vm/mlvm/patches + * + * @comment patch for java.base + * @build java.base/* + * + * @comment build generator + * @build vm.mlvm.cp.share.GenCPFullOfMH + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.share.ClassfileGeneratorTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.share.ClassfileGeneratorTest -generator vm.mlvm.cp.share.GenCPFullOfMH + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mt/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mt/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mt/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mt/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mt/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mt/TestDescription.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.org.objectweb.asm + * + * @summary converted from VM Testbase vm/mlvm/cp/stress/classfmt/mt. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * Create a constant pool, which contains maximum number of method type constants and corresponding + * ldc commands. Verify that the class is loaded without errors. + * The maximum is determined dynamically. + * + * @library /vmTestbase + * /test/lib + * /vmTestbase/vm/mlvm/patches + * + * @comment patch for java.base + * @build java.base/* + * + * @comment build generator + * @build vm.mlvm.cp.share.GenCPFullOfMT + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.share.ClassfileGeneratorTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.share.ClassfileGeneratorTest -generator vm.mlvm.cp.share.GenCPFullOfMT + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/INDIFY_Test6998541.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/INDIFY_Test6998541.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/INDIFY_Test6998541.java @@ -0,0 +1,1935 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// generated from vm/mlvm/indy/func/java/rawRetypes/INDIFY_Test6998541.jmpp + +package vm.mlvm.indy.func.java.rawRetypes; + +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; + + public class INDIFY_Test6998541 { + private static final int N = 100000; + + + public static void main(String[] args) throws Throwable { + doboolean (); + dobyte (); + dochar (); + doshort (); + doint (); + dolong (); + dofloat (); + dodouble (); + } + + private static void doboolean () throws Throwable { + System.out.println("doboolean"); + + for (int i = 0; i < N; i++ ) { + boolean2prim(false); + boolean2prim(true); + + } + } + private static void dobyte () throws Throwable { + System.out.println("dobyte"); + + byte x = Byte.MIN_VALUE; + byte D = Byte.MAX_VALUE / (N / 2); + for (int i = 0; i < N; i++, x += D) { + byte2prim(x); + + + } + } + private static void dochar () throws Throwable { + System.out.println("dochar"); + + char x = Character.MIN_VALUE; + char D = Character.MAX_VALUE / (N / 2); + for (int i = 0; i < N; i++, x += D) { + char2prim(x); + + + } + } + private static void doshort () throws Throwable { + System.out.println("doshort"); + + short x = Short.MIN_VALUE; + short D = Short.MAX_VALUE / (N / 2); + for (int i = 0; i < N; i++, x += D) { + short2prim(x); + + + } + } + private static void doint () throws Throwable { + System.out.println("doint"); + + int x = Integer.MIN_VALUE; + int D = Integer.MAX_VALUE / (N / 2); + for (int i = 0; i < N; i++, x += D) { + int2prim(x); + + void2prim(x); + prim2void(x); + prim2prim(x); + + } + } + private static void dolong () throws Throwable { + System.out.println("dolong"); + + long x = Long.MIN_VALUE; + long D = Long.MAX_VALUE / (N / 2); + for (int i = 0; i < N; i++, x += D) { + long2prim(x); + + + } + } + private static void dofloat () throws Throwable { + System.out.println("dofloat"); + + float x = Float.MIN_VALUE; + float D = Float.MAX_VALUE / (N / 2); + for (int i = 0; i < N; i++, x += D) { + float2prim(x); + + + } + } + private static void dodouble () throws Throwable { + System.out.println("dodouble"); + + double x = Double.MIN_VALUE; + double D = Double.MAX_VALUE / (N / 2); + for (int i = 0; i < N; i++, x += D) { + double2prim(x); + + + } + } + + private static void void2prim(int i) throws Throwable { + assertEquals( false, (boolean) INDY_boolean_foo_void().invokeExact()); // void -> boolean + assertEquals( 0, (byte) INDY_byte_foo_void().invokeExact()); // void -> byte + assertEquals( 0, (char) INDY_char_foo_void().invokeExact()); // void -> char + assertEquals( 0, (short) INDY_short_foo_void().invokeExact()); // void -> short + assertEquals( 0, (int) INDY_int_foo_void().invokeExact()); // void -> int + assertEquals( 0L, (long) INDY_long_foo_void().invokeExact()); // void -> long + assertEquals( 0f, (float) INDY_float_foo_void().invokeExact()); // void -> float + assertEquals( 0d, (double) INDY_double_foo_void().invokeExact()); // void -> double + } + + private static void boolean2prim(boolean x) throws Throwable { + int i = x ? 1 : 0; + boolean z = x; + assertEquals(z, (boolean) INDY_boolean_foo_boolean().invokeExact(x)); // boolean -> boolean + assertEquals((byte) i, (byte) INDY_byte_foo_boolean().invokeExact(x)); // boolean -> byte + assertEquals((char) i, (char) INDY_char_foo_boolean().invokeExact(x)); // boolean -> char + assertEquals((short) i, (short) INDY_short_foo_boolean().invokeExact(x)); // boolean -> short + assertEquals((int) i, (int) INDY_int_foo_boolean().invokeExact(x)); // boolean -> int + assertEquals((long) i, (long) INDY_long_foo_boolean().invokeExact(x)); // boolean -> long + assertEquals((float) i, (float) INDY_float_foo_boolean().invokeExact(x)); // boolean -> float + assertEquals((double) i, (double) INDY_double_foo_boolean().invokeExact(x)); // boolean -> double + } + private static void byte2prim(byte x) throws Throwable { + byte i = x; + boolean z = (x != 0); + assertEquals(z, (boolean) INDY_boolean_foo_byte().invokeExact(x)); // byte -> boolean + assertEquals((byte) i, (byte) INDY_byte_foo_byte().invokeExact(x)); // byte -> byte + assertEquals((char) i, (char) INDY_char_foo_byte().invokeExact(x)); // byte -> char + assertEquals((short) i, (short) INDY_short_foo_byte().invokeExact(x)); // byte -> short + assertEquals((int) i, (int) INDY_int_foo_byte().invokeExact(x)); // byte -> int + assertEquals((long) i, (long) INDY_long_foo_byte().invokeExact(x)); // byte -> long + assertEquals((float) i, (float) INDY_float_foo_byte().invokeExact(x)); // byte -> float + assertEquals((double) i, (double) INDY_double_foo_byte().invokeExact(x)); // byte -> double + } + private static void char2prim(char x) throws Throwable { + char i = x; + boolean z = (x != 0); + assertEquals(z, (boolean) INDY_boolean_foo_char().invokeExact(x)); // char -> boolean + assertEquals((byte) i, (byte) INDY_byte_foo_char().invokeExact(x)); // char -> byte + assertEquals((char) i, (char) INDY_char_foo_char().invokeExact(x)); // char -> char + assertEquals((short) i, (short) INDY_short_foo_char().invokeExact(x)); // char -> short + assertEquals((int) i, (int) INDY_int_foo_char().invokeExact(x)); // char -> int + assertEquals((long) i, (long) INDY_long_foo_char().invokeExact(x)); // char -> long + assertEquals((float) i, (float) INDY_float_foo_char().invokeExact(x)); // char -> float + assertEquals((double) i, (double) INDY_double_foo_char().invokeExact(x)); // char -> double + } + private static void short2prim(short x) throws Throwable { + short i = x; + boolean z = (x != 0); + assertEquals(z, (boolean) INDY_boolean_foo_short().invokeExact(x)); // short -> boolean + assertEquals((byte) i, (byte) INDY_byte_foo_short().invokeExact(x)); // short -> byte + assertEquals((char) i, (char) INDY_char_foo_short().invokeExact(x)); // short -> char + assertEquals((short) i, (short) INDY_short_foo_short().invokeExact(x)); // short -> short + assertEquals((int) i, (int) INDY_int_foo_short().invokeExact(x)); // short -> int + assertEquals((long) i, (long) INDY_long_foo_short().invokeExact(x)); // short -> long + assertEquals((float) i, (float) INDY_float_foo_short().invokeExact(x)); // short -> float + assertEquals((double) i, (double) INDY_double_foo_short().invokeExact(x)); // short -> double + } + private static void int2prim(int x) throws Throwable { + int i = x; + boolean z = (x != 0); + assertEquals(z, (boolean) INDY_boolean_foo_int().invokeExact(x)); // int -> boolean + assertEquals((byte) i, (byte) INDY_byte_foo_int().invokeExact(x)); // int -> byte + assertEquals((char) i, (char) INDY_char_foo_int().invokeExact(x)); // int -> char + assertEquals((short) i, (short) INDY_short_foo_int().invokeExact(x)); // int -> short + assertEquals((int) i, (int) INDY_int_foo_int().invokeExact(x)); // int -> int + assertEquals((long) i, (long) INDY_long_foo_int().invokeExact(x)); // int -> long + assertEquals((float) i, (float) INDY_float_foo_int().invokeExact(x)); // int -> float + assertEquals((double) i, (double) INDY_double_foo_int().invokeExact(x)); // int -> double + } + private static void long2prim(long x) throws Throwable { + long i = x; + boolean z = (x != 0); + assertEquals(z, (boolean) INDY_boolean_foo_long().invokeExact(x)); // long -> boolean + assertEquals((byte) i, (byte) INDY_byte_foo_long().invokeExact(x)); // long -> byte + assertEquals((char) i, (char) INDY_char_foo_long().invokeExact(x)); // long -> char + assertEquals((short) i, (short) INDY_short_foo_long().invokeExact(x)); // long -> short + assertEquals((int) i, (int) INDY_int_foo_long().invokeExact(x)); // long -> int + assertEquals((long) i, (long) INDY_long_foo_long().invokeExact(x)); // long -> long + assertEquals((float) i, (float) INDY_float_foo_long().invokeExact(x)); // long -> float + assertEquals((double) i, (double) INDY_double_foo_long().invokeExact(x)); // long -> double + } + private static void float2prim(float x) throws Throwable { + float i = x; + boolean z = (x != 0); + assertEquals(z, (boolean) INDY_boolean_foo_float().invokeExact(x)); // float -> boolean + assertEquals((byte) i, (byte) INDY_byte_foo_float().invokeExact(x)); // float -> byte + assertEquals((char) i, (char) INDY_char_foo_float().invokeExact(x)); // float -> char + assertEquals((short) i, (short) INDY_short_foo_float().invokeExact(x)); // float -> short + assertEquals((int) i, (int) INDY_int_foo_float().invokeExact(x)); // float -> int + assertEquals((long) i, (long) INDY_long_foo_float().invokeExact(x)); // float -> long + assertEquals((float) i, (float) INDY_float_foo_float().invokeExact(x)); // float -> float + assertEquals((double) i, (double) INDY_double_foo_float().invokeExact(x)); // float -> double + } + private static void double2prim(double x) throws Throwable { + double i = x; + boolean z = (x != 0); + assertEquals(z, (boolean) INDY_boolean_foo_double().invokeExact(x)); // double -> boolean + assertEquals((byte) i, (byte) INDY_byte_foo_double().invokeExact(x)); // double -> byte + assertEquals((char) i, (char) INDY_char_foo_double().invokeExact(x)); // double -> char + assertEquals((short) i, (short) INDY_short_foo_double().invokeExact(x)); // double -> short + assertEquals((int) i, (int) INDY_int_foo_double().invokeExact(x)); // double -> int + assertEquals((long) i, (long) INDY_long_foo_double().invokeExact(x)); // double -> long + assertEquals((float) i, (float) INDY_float_foo_double().invokeExact(x)); // double -> float + assertEquals((double) i, (double) INDY_double_foo_double().invokeExact(x)); // double -> double + } + + private static void prim2void(int x) throws Throwable { + boolean z = (x != 0); + INDY_void_foo_boolean().invokeExact(z); // boolean -> void + INDY_void_foo_byte().invokeExact((byte) x); // byte -> void + INDY_void_foo_char().invokeExact((char) x); // char -> void + INDY_void_foo_short().invokeExact((short) x); // short -> void + INDY_void_foo_int().invokeExact((int) x); // int -> void + INDY_void_foo_long().invokeExact((long) x); // long -> void + INDY_void_foo_float().invokeExact((float) x); // float -> void + INDY_void_foo_double().invokeExact((double) x); // double -> void + } + + private static void void2void() throws Throwable { + INDY_void_foo_void().invokeExact(); // void -> void + } + + private static void prim2prim(int x) throws Throwable { + boolean z = (x != 0); + assertEquals( z, (boolean) INDY_boolean_spread_boolean().invokeExact(z)); // spread: boolean -> boolean + assertEquals((byte) x, (byte) INDY_byte_spread_byte().invokeExact((byte) x)); // spread: byte -> byte + assertEquals((char) x, (char) INDY_char_spread_char().invokeExact((char) x)); // spread: char -> char + assertEquals((short) x, (short) INDY_short_spread_short().invokeExact((short) x)); // spread: short -> short + assertEquals((int) x, (int) INDY_int_spread_int().invokeExact((int) x)); // spread: int -> int + assertEquals((long) x, (long) INDY_long_spread_long().invokeExact((long) x)); // spread: long -> long + assertEquals((float) x, (float) INDY_float_spread_float().invokeExact((float) x)); // spread: float -> float + assertEquals((double) x, (double) INDY_double_spread_double().invokeExact((double) x)); // spread: double -> double + } + + private static void assertEquals(Object o, Object o2) { + if (!o.equals(o2)) + throw new AssertionError("expected: " + o + ", found: " + o2); + } + + + private static MethodHandle INDY_void_foo_void; + private static MethodHandle INDY_void_foo_void () throws Throwable { + if ( INDY_void_foo_void != null ) return INDY_void_foo_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(void .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_spread_void; + private static MethodHandle INDY_void_spread_void () throws Throwable { + if ( INDY_void_spread_void != null ) return INDY_void_spread_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(void .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_foo_boolean; + private static MethodHandle INDY_void_foo_boolean () throws Throwable { + if ( INDY_void_foo_boolean != null ) return INDY_void_foo_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(void .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_spread_boolean; + private static MethodHandle INDY_void_spread_boolean () throws Throwable { + if ( INDY_void_spread_boolean != null ) return INDY_void_spread_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(void .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_foo_byte; + private static MethodHandle INDY_void_foo_byte () throws Throwable { + if ( INDY_void_foo_byte != null ) return INDY_void_foo_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(void .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_spread_byte; + private static MethodHandle INDY_void_spread_byte () throws Throwable { + if ( INDY_void_spread_byte != null ) return INDY_void_spread_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(void .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_foo_char; + private static MethodHandle INDY_void_foo_char () throws Throwable { + if ( INDY_void_foo_char != null ) return INDY_void_foo_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(void .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_spread_char; + private static MethodHandle INDY_void_spread_char () throws Throwable { + if ( INDY_void_spread_char != null ) return INDY_void_spread_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(void .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_foo_short; + private static MethodHandle INDY_void_foo_short () throws Throwable { + if ( INDY_void_foo_short != null ) return INDY_void_foo_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(void .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_spread_short; + private static MethodHandle INDY_void_spread_short () throws Throwable { + if ( INDY_void_spread_short != null ) return INDY_void_spread_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(void .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_foo_int; + private static MethodHandle INDY_void_foo_int () throws Throwable { + if ( INDY_void_foo_int != null ) return INDY_void_foo_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(void .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_spread_int; + private static MethodHandle INDY_void_spread_int () throws Throwable { + if ( INDY_void_spread_int != null ) return INDY_void_spread_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(void .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_foo_long; + private static MethodHandle INDY_void_foo_long () throws Throwable { + if ( INDY_void_foo_long != null ) return INDY_void_foo_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(void .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_spread_long; + private static MethodHandle INDY_void_spread_long () throws Throwable { + if ( INDY_void_spread_long != null ) return INDY_void_spread_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(void .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_foo_float; + private static MethodHandle INDY_void_foo_float () throws Throwable { + if ( INDY_void_foo_float != null ) return INDY_void_foo_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(void .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_spread_float; + private static MethodHandle INDY_void_spread_float () throws Throwable { + if ( INDY_void_spread_float != null ) return INDY_void_spread_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(void .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_foo_double; + private static MethodHandle INDY_void_foo_double () throws Throwable { + if ( INDY_void_foo_double != null ) return INDY_void_foo_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(void .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_void_spread_double; + private static MethodHandle INDY_void_spread_double () throws Throwable { + if ( INDY_void_spread_double != null ) return INDY_void_spread_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(void .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_foo_void; + private static MethodHandle INDY_boolean_foo_void () throws Throwable { + if ( INDY_boolean_foo_void != null ) return INDY_boolean_foo_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(boolean .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_spread_void; + private static MethodHandle INDY_boolean_spread_void () throws Throwable { + if ( INDY_boolean_spread_void != null ) return INDY_boolean_spread_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(boolean .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_foo_boolean; + private static MethodHandle INDY_boolean_foo_boolean () throws Throwable { + if ( INDY_boolean_foo_boolean != null ) return INDY_boolean_foo_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(boolean .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_spread_boolean; + private static MethodHandle INDY_boolean_spread_boolean () throws Throwable { + if ( INDY_boolean_spread_boolean != null ) return INDY_boolean_spread_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(boolean .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_foo_byte; + private static MethodHandle INDY_boolean_foo_byte () throws Throwable { + if ( INDY_boolean_foo_byte != null ) return INDY_boolean_foo_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(boolean .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_spread_byte; + private static MethodHandle INDY_boolean_spread_byte () throws Throwable { + if ( INDY_boolean_spread_byte != null ) return INDY_boolean_spread_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(boolean .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_foo_char; + private static MethodHandle INDY_boolean_foo_char () throws Throwable { + if ( INDY_boolean_foo_char != null ) return INDY_boolean_foo_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(boolean .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_spread_char; + private static MethodHandle INDY_boolean_spread_char () throws Throwable { + if ( INDY_boolean_spread_char != null ) return INDY_boolean_spread_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(boolean .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_foo_short; + private static MethodHandle INDY_boolean_foo_short () throws Throwable { + if ( INDY_boolean_foo_short != null ) return INDY_boolean_foo_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(boolean .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_spread_short; + private static MethodHandle INDY_boolean_spread_short () throws Throwable { + if ( INDY_boolean_spread_short != null ) return INDY_boolean_spread_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(boolean .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_foo_int; + private static MethodHandle INDY_boolean_foo_int () throws Throwable { + if ( INDY_boolean_foo_int != null ) return INDY_boolean_foo_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(boolean .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_spread_int; + private static MethodHandle INDY_boolean_spread_int () throws Throwable { + if ( INDY_boolean_spread_int != null ) return INDY_boolean_spread_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(boolean .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_foo_long; + private static MethodHandle INDY_boolean_foo_long () throws Throwable { + if ( INDY_boolean_foo_long != null ) return INDY_boolean_foo_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(boolean .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_spread_long; + private static MethodHandle INDY_boolean_spread_long () throws Throwable { + if ( INDY_boolean_spread_long != null ) return INDY_boolean_spread_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(boolean .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_foo_float; + private static MethodHandle INDY_boolean_foo_float () throws Throwable { + if ( INDY_boolean_foo_float != null ) return INDY_boolean_foo_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(boolean .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_spread_float; + private static MethodHandle INDY_boolean_spread_float () throws Throwable { + if ( INDY_boolean_spread_float != null ) return INDY_boolean_spread_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(boolean .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_foo_double; + private static MethodHandle INDY_boolean_foo_double () throws Throwable { + if ( INDY_boolean_foo_double != null ) return INDY_boolean_foo_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(boolean .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_boolean_spread_double; + private static MethodHandle INDY_boolean_spread_double () throws Throwable { + if ( INDY_boolean_spread_double != null ) return INDY_boolean_spread_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(boolean .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_foo_void; + private static MethodHandle INDY_byte_foo_void () throws Throwable { + if ( INDY_byte_foo_void != null ) return INDY_byte_foo_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(byte .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_spread_void; + private static MethodHandle INDY_byte_spread_void () throws Throwable { + if ( INDY_byte_spread_void != null ) return INDY_byte_spread_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(byte .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_foo_boolean; + private static MethodHandle INDY_byte_foo_boolean () throws Throwable { + if ( INDY_byte_foo_boolean != null ) return INDY_byte_foo_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(byte .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_spread_boolean; + private static MethodHandle INDY_byte_spread_boolean () throws Throwable { + if ( INDY_byte_spread_boolean != null ) return INDY_byte_spread_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(byte .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_foo_byte; + private static MethodHandle INDY_byte_foo_byte () throws Throwable { + if ( INDY_byte_foo_byte != null ) return INDY_byte_foo_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(byte .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_spread_byte; + private static MethodHandle INDY_byte_spread_byte () throws Throwable { + if ( INDY_byte_spread_byte != null ) return INDY_byte_spread_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(byte .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_foo_char; + private static MethodHandle INDY_byte_foo_char () throws Throwable { + if ( INDY_byte_foo_char != null ) return INDY_byte_foo_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(byte .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_spread_char; + private static MethodHandle INDY_byte_spread_char () throws Throwable { + if ( INDY_byte_spread_char != null ) return INDY_byte_spread_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(byte .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_foo_short; + private static MethodHandle INDY_byte_foo_short () throws Throwable { + if ( INDY_byte_foo_short != null ) return INDY_byte_foo_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(byte .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_spread_short; + private static MethodHandle INDY_byte_spread_short () throws Throwable { + if ( INDY_byte_spread_short != null ) return INDY_byte_spread_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(byte .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_foo_int; + private static MethodHandle INDY_byte_foo_int () throws Throwable { + if ( INDY_byte_foo_int != null ) return INDY_byte_foo_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(byte .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_spread_int; + private static MethodHandle INDY_byte_spread_int () throws Throwable { + if ( INDY_byte_spread_int != null ) return INDY_byte_spread_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(byte .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_foo_long; + private static MethodHandle INDY_byte_foo_long () throws Throwable { + if ( INDY_byte_foo_long != null ) return INDY_byte_foo_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(byte .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_spread_long; + private static MethodHandle INDY_byte_spread_long () throws Throwable { + if ( INDY_byte_spread_long != null ) return INDY_byte_spread_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(byte .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_foo_float; + private static MethodHandle INDY_byte_foo_float () throws Throwable { + if ( INDY_byte_foo_float != null ) return INDY_byte_foo_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(byte .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_spread_float; + private static MethodHandle INDY_byte_spread_float () throws Throwable { + if ( INDY_byte_spread_float != null ) return INDY_byte_spread_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(byte .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_foo_double; + private static MethodHandle INDY_byte_foo_double () throws Throwable { + if ( INDY_byte_foo_double != null ) return INDY_byte_foo_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(byte .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_byte_spread_double; + private static MethodHandle INDY_byte_spread_double () throws Throwable { + if ( INDY_byte_spread_double != null ) return INDY_byte_spread_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(byte .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_foo_void; + private static MethodHandle INDY_char_foo_void () throws Throwable { + if ( INDY_char_foo_void != null ) return INDY_char_foo_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(char .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_spread_void; + private static MethodHandle INDY_char_spread_void () throws Throwable { + if ( INDY_char_spread_void != null ) return INDY_char_spread_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(char .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_foo_boolean; + private static MethodHandle INDY_char_foo_boolean () throws Throwable { + if ( INDY_char_foo_boolean != null ) return INDY_char_foo_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(char .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_spread_boolean; + private static MethodHandle INDY_char_spread_boolean () throws Throwable { + if ( INDY_char_spread_boolean != null ) return INDY_char_spread_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(char .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_foo_byte; + private static MethodHandle INDY_char_foo_byte () throws Throwable { + if ( INDY_char_foo_byte != null ) return INDY_char_foo_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(char .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_spread_byte; + private static MethodHandle INDY_char_spread_byte () throws Throwable { + if ( INDY_char_spread_byte != null ) return INDY_char_spread_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(char .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_foo_char; + private static MethodHandle INDY_char_foo_char () throws Throwable { + if ( INDY_char_foo_char != null ) return INDY_char_foo_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(char .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_spread_char; + private static MethodHandle INDY_char_spread_char () throws Throwable { + if ( INDY_char_spread_char != null ) return INDY_char_spread_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(char .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_foo_short; + private static MethodHandle INDY_char_foo_short () throws Throwable { + if ( INDY_char_foo_short != null ) return INDY_char_foo_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(char .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_spread_short; + private static MethodHandle INDY_char_spread_short () throws Throwable { + if ( INDY_char_spread_short != null ) return INDY_char_spread_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(char .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_foo_int; + private static MethodHandle INDY_char_foo_int () throws Throwable { + if ( INDY_char_foo_int != null ) return INDY_char_foo_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(char .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_spread_int; + private static MethodHandle INDY_char_spread_int () throws Throwable { + if ( INDY_char_spread_int != null ) return INDY_char_spread_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(char .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_foo_long; + private static MethodHandle INDY_char_foo_long () throws Throwable { + if ( INDY_char_foo_long != null ) return INDY_char_foo_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(char .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_spread_long; + private static MethodHandle INDY_char_spread_long () throws Throwable { + if ( INDY_char_spread_long != null ) return INDY_char_spread_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(char .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_foo_float; + private static MethodHandle INDY_char_foo_float () throws Throwable { + if ( INDY_char_foo_float != null ) return INDY_char_foo_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(char .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_spread_float; + private static MethodHandle INDY_char_spread_float () throws Throwable { + if ( INDY_char_spread_float != null ) return INDY_char_spread_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(char .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_foo_double; + private static MethodHandle INDY_char_foo_double () throws Throwable { + if ( INDY_char_foo_double != null ) return INDY_char_foo_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(char .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_char_spread_double; + private static MethodHandle INDY_char_spread_double () throws Throwable { + if ( INDY_char_spread_double != null ) return INDY_char_spread_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(char .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_foo_void; + private static MethodHandle INDY_short_foo_void () throws Throwable { + if ( INDY_short_foo_void != null ) return INDY_short_foo_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(short .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_spread_void; + private static MethodHandle INDY_short_spread_void () throws Throwable { + if ( INDY_short_spread_void != null ) return INDY_short_spread_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(short .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_foo_boolean; + private static MethodHandle INDY_short_foo_boolean () throws Throwable { + if ( INDY_short_foo_boolean != null ) return INDY_short_foo_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(short .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_spread_boolean; + private static MethodHandle INDY_short_spread_boolean () throws Throwable { + if ( INDY_short_spread_boolean != null ) return INDY_short_spread_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(short .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_foo_byte; + private static MethodHandle INDY_short_foo_byte () throws Throwable { + if ( INDY_short_foo_byte != null ) return INDY_short_foo_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(short .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_spread_byte; + private static MethodHandle INDY_short_spread_byte () throws Throwable { + if ( INDY_short_spread_byte != null ) return INDY_short_spread_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(short .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_foo_char; + private static MethodHandle INDY_short_foo_char () throws Throwable { + if ( INDY_short_foo_char != null ) return INDY_short_foo_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(short .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_spread_char; + private static MethodHandle INDY_short_spread_char () throws Throwable { + if ( INDY_short_spread_char != null ) return INDY_short_spread_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(short .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_foo_short; + private static MethodHandle INDY_short_foo_short () throws Throwable { + if ( INDY_short_foo_short != null ) return INDY_short_foo_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(short .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_spread_short; + private static MethodHandle INDY_short_spread_short () throws Throwable { + if ( INDY_short_spread_short != null ) return INDY_short_spread_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(short .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_foo_int; + private static MethodHandle INDY_short_foo_int () throws Throwable { + if ( INDY_short_foo_int != null ) return INDY_short_foo_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(short .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_spread_int; + private static MethodHandle INDY_short_spread_int () throws Throwable { + if ( INDY_short_spread_int != null ) return INDY_short_spread_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(short .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_foo_long; + private static MethodHandle INDY_short_foo_long () throws Throwable { + if ( INDY_short_foo_long != null ) return INDY_short_foo_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(short .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_spread_long; + private static MethodHandle INDY_short_spread_long () throws Throwable { + if ( INDY_short_spread_long != null ) return INDY_short_spread_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(short .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_foo_float; + private static MethodHandle INDY_short_foo_float () throws Throwable { + if ( INDY_short_foo_float != null ) return INDY_short_foo_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(short .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_spread_float; + private static MethodHandle INDY_short_spread_float () throws Throwable { + if ( INDY_short_spread_float != null ) return INDY_short_spread_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(short .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_foo_double; + private static MethodHandle INDY_short_foo_double () throws Throwable { + if ( INDY_short_foo_double != null ) return INDY_short_foo_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(short .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_short_spread_double; + private static MethodHandle INDY_short_spread_double () throws Throwable { + if ( INDY_short_spread_double != null ) return INDY_short_spread_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(short .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_foo_void; + private static MethodHandle INDY_int_foo_void () throws Throwable { + if ( INDY_int_foo_void != null ) return INDY_int_foo_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(int .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_spread_void; + private static MethodHandle INDY_int_spread_void () throws Throwable { + if ( INDY_int_spread_void != null ) return INDY_int_spread_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(int .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_foo_boolean; + private static MethodHandle INDY_int_foo_boolean () throws Throwable { + if ( INDY_int_foo_boolean != null ) return INDY_int_foo_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(int .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_spread_boolean; + private static MethodHandle INDY_int_spread_boolean () throws Throwable { + if ( INDY_int_spread_boolean != null ) return INDY_int_spread_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(int .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_foo_byte; + private static MethodHandle INDY_int_foo_byte () throws Throwable { + if ( INDY_int_foo_byte != null ) return INDY_int_foo_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(int .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_spread_byte; + private static MethodHandle INDY_int_spread_byte () throws Throwable { + if ( INDY_int_spread_byte != null ) return INDY_int_spread_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(int .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_foo_char; + private static MethodHandle INDY_int_foo_char () throws Throwable { + if ( INDY_int_foo_char != null ) return INDY_int_foo_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(int .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_spread_char; + private static MethodHandle INDY_int_spread_char () throws Throwable { + if ( INDY_int_spread_char != null ) return INDY_int_spread_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(int .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_foo_short; + private static MethodHandle INDY_int_foo_short () throws Throwable { + if ( INDY_int_foo_short != null ) return INDY_int_foo_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(int .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_spread_short; + private static MethodHandle INDY_int_spread_short () throws Throwable { + if ( INDY_int_spread_short != null ) return INDY_int_spread_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(int .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_foo_int; + private static MethodHandle INDY_int_foo_int () throws Throwable { + if ( INDY_int_foo_int != null ) return INDY_int_foo_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(int .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_spread_int; + private static MethodHandle INDY_int_spread_int () throws Throwable { + if ( INDY_int_spread_int != null ) return INDY_int_spread_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(int .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_foo_long; + private static MethodHandle INDY_int_foo_long () throws Throwable { + if ( INDY_int_foo_long != null ) return INDY_int_foo_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(int .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_spread_long; + private static MethodHandle INDY_int_spread_long () throws Throwable { + if ( INDY_int_spread_long != null ) return INDY_int_spread_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(int .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_foo_float; + private static MethodHandle INDY_int_foo_float () throws Throwable { + if ( INDY_int_foo_float != null ) return INDY_int_foo_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(int .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_spread_float; + private static MethodHandle INDY_int_spread_float () throws Throwable { + if ( INDY_int_spread_float != null ) return INDY_int_spread_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(int .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_foo_double; + private static MethodHandle INDY_int_foo_double () throws Throwable { + if ( INDY_int_foo_double != null ) return INDY_int_foo_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(int .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_int_spread_double; + private static MethodHandle INDY_int_spread_double () throws Throwable { + if ( INDY_int_spread_double != null ) return INDY_int_spread_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(int .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_foo_void; + private static MethodHandle INDY_long_foo_void () throws Throwable { + if ( INDY_long_foo_void != null ) return INDY_long_foo_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(long .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_spread_void; + private static MethodHandle INDY_long_spread_void () throws Throwable { + if ( INDY_long_spread_void != null ) return INDY_long_spread_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(long .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_foo_boolean; + private static MethodHandle INDY_long_foo_boolean () throws Throwable { + if ( INDY_long_foo_boolean != null ) return INDY_long_foo_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(long .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_spread_boolean; + private static MethodHandle INDY_long_spread_boolean () throws Throwable { + if ( INDY_long_spread_boolean != null ) return INDY_long_spread_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(long .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_foo_byte; + private static MethodHandle INDY_long_foo_byte () throws Throwable { + if ( INDY_long_foo_byte != null ) return INDY_long_foo_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(long .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_spread_byte; + private static MethodHandle INDY_long_spread_byte () throws Throwable { + if ( INDY_long_spread_byte != null ) return INDY_long_spread_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(long .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_foo_char; + private static MethodHandle INDY_long_foo_char () throws Throwable { + if ( INDY_long_foo_char != null ) return INDY_long_foo_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(long .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_spread_char; + private static MethodHandle INDY_long_spread_char () throws Throwable { + if ( INDY_long_spread_char != null ) return INDY_long_spread_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(long .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_foo_short; + private static MethodHandle INDY_long_foo_short () throws Throwable { + if ( INDY_long_foo_short != null ) return INDY_long_foo_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(long .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_spread_short; + private static MethodHandle INDY_long_spread_short () throws Throwable { + if ( INDY_long_spread_short != null ) return INDY_long_spread_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(long .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_foo_int; + private static MethodHandle INDY_long_foo_int () throws Throwable { + if ( INDY_long_foo_int != null ) return INDY_long_foo_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(long .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_spread_int; + private static MethodHandle INDY_long_spread_int () throws Throwable { + if ( INDY_long_spread_int != null ) return INDY_long_spread_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(long .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_foo_long; + private static MethodHandle INDY_long_foo_long () throws Throwable { + if ( INDY_long_foo_long != null ) return INDY_long_foo_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(long .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_spread_long; + private static MethodHandle INDY_long_spread_long () throws Throwable { + if ( INDY_long_spread_long != null ) return INDY_long_spread_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(long .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_foo_float; + private static MethodHandle INDY_long_foo_float () throws Throwable { + if ( INDY_long_foo_float != null ) return INDY_long_foo_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(long .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_spread_float; + private static MethodHandle INDY_long_spread_float () throws Throwable { + if ( INDY_long_spread_float != null ) return INDY_long_spread_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(long .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_foo_double; + private static MethodHandle INDY_long_foo_double () throws Throwable { + if ( INDY_long_foo_double != null ) return INDY_long_foo_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(long .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_long_spread_double; + private static MethodHandle INDY_long_spread_double () throws Throwable { + if ( INDY_long_spread_double != null ) return INDY_long_spread_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(long .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_foo_void; + private static MethodHandle INDY_float_foo_void () throws Throwable { + if ( INDY_float_foo_void != null ) return INDY_float_foo_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(float .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_spread_void; + private static MethodHandle INDY_float_spread_void () throws Throwable { + if ( INDY_float_spread_void != null ) return INDY_float_spread_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(float .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_foo_boolean; + private static MethodHandle INDY_float_foo_boolean () throws Throwable { + if ( INDY_float_foo_boolean != null ) return INDY_float_foo_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(float .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_spread_boolean; + private static MethodHandle INDY_float_spread_boolean () throws Throwable { + if ( INDY_float_spread_boolean != null ) return INDY_float_spread_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(float .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_foo_byte; + private static MethodHandle INDY_float_foo_byte () throws Throwable { + if ( INDY_float_foo_byte != null ) return INDY_float_foo_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(float .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_spread_byte; + private static MethodHandle INDY_float_spread_byte () throws Throwable { + if ( INDY_float_spread_byte != null ) return INDY_float_spread_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(float .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_foo_char; + private static MethodHandle INDY_float_foo_char () throws Throwable { + if ( INDY_float_foo_char != null ) return INDY_float_foo_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(float .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_spread_char; + private static MethodHandle INDY_float_spread_char () throws Throwable { + if ( INDY_float_spread_char != null ) return INDY_float_spread_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(float .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_foo_short; + private static MethodHandle INDY_float_foo_short () throws Throwable { + if ( INDY_float_foo_short != null ) return INDY_float_foo_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(float .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_spread_short; + private static MethodHandle INDY_float_spread_short () throws Throwable { + if ( INDY_float_spread_short != null ) return INDY_float_spread_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(float .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_foo_int; + private static MethodHandle INDY_float_foo_int () throws Throwable { + if ( INDY_float_foo_int != null ) return INDY_float_foo_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(float .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_spread_int; + private static MethodHandle INDY_float_spread_int () throws Throwable { + if ( INDY_float_spread_int != null ) return INDY_float_spread_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(float .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_foo_long; + private static MethodHandle INDY_float_foo_long () throws Throwable { + if ( INDY_float_foo_long != null ) return INDY_float_foo_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(float .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_spread_long; + private static MethodHandle INDY_float_spread_long () throws Throwable { + if ( INDY_float_spread_long != null ) return INDY_float_spread_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(float .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_foo_float; + private static MethodHandle INDY_float_foo_float () throws Throwable { + if ( INDY_float_foo_float != null ) return INDY_float_foo_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(float .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_spread_float; + private static MethodHandle INDY_float_spread_float () throws Throwable { + if ( INDY_float_spread_float != null ) return INDY_float_spread_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(float .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_foo_double; + private static MethodHandle INDY_float_foo_double () throws Throwable { + if ( INDY_float_foo_double != null ) return INDY_float_foo_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(float .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_float_spread_double; + private static MethodHandle INDY_float_spread_double () throws Throwable { + if ( INDY_float_spread_double != null ) return INDY_float_spread_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(float .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_foo_void; + private static MethodHandle INDY_double_foo_void () throws Throwable { + if ( INDY_double_foo_void != null ) return INDY_double_foo_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(double .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_spread_void; + private static MethodHandle INDY_double_spread_void () throws Throwable { + if ( INDY_double_spread_void != null ) return INDY_double_spread_void; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(double .class ))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_foo_boolean; + private static MethodHandle INDY_double_foo_boolean () throws Throwable { + if ( INDY_double_foo_boolean != null ) return INDY_double_foo_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(double .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_spread_boolean; + private static MethodHandle INDY_double_spread_boolean () throws Throwable { + if ( INDY_double_spread_boolean != null ) return INDY_double_spread_boolean; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(double .class , boolean.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_foo_byte; + private static MethodHandle INDY_double_foo_byte () throws Throwable { + if ( INDY_double_foo_byte != null ) return INDY_double_foo_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(double .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_spread_byte; + private static MethodHandle INDY_double_spread_byte () throws Throwable { + if ( INDY_double_spread_byte != null ) return INDY_double_spread_byte; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(double .class , byte.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_foo_char; + private static MethodHandle INDY_double_foo_char () throws Throwable { + if ( INDY_double_foo_char != null ) return INDY_double_foo_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(double .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_spread_char; + private static MethodHandle INDY_double_spread_char () throws Throwable { + if ( INDY_double_spread_char != null ) return INDY_double_spread_char; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(double .class , char.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_foo_short; + private static MethodHandle INDY_double_foo_short () throws Throwable { + if ( INDY_double_foo_short != null ) return INDY_double_foo_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(double .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_spread_short; + private static MethodHandle INDY_double_spread_short () throws Throwable { + if ( INDY_double_spread_short != null ) return INDY_double_spread_short; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(double .class , short.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_foo_int; + private static MethodHandle INDY_double_foo_int () throws Throwable { + if ( INDY_double_foo_int != null ) return INDY_double_foo_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(double .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_spread_int; + private static MethodHandle INDY_double_spread_int () throws Throwable { + if ( INDY_double_spread_int != null ) return INDY_double_spread_int; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(double .class , int.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_foo_long; + private static MethodHandle INDY_double_foo_long () throws Throwable { + if ( INDY_double_foo_long != null ) return INDY_double_foo_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(double .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_spread_long; + private static MethodHandle INDY_double_spread_long () throws Throwable { + if ( INDY_double_spread_long != null ) return INDY_double_spread_long; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(double .class , long.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_foo_float; + private static MethodHandle INDY_double_foo_float () throws Throwable { + if ( INDY_double_foo_float != null ) return INDY_double_foo_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(double .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_spread_float; + private static MethodHandle INDY_double_spread_float () throws Throwable { + if ( INDY_double_spread_float != null ) return INDY_double_spread_float; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(double .class , float.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_foo_double; + private static MethodHandle INDY_double_foo_double () throws Throwable { + if ( INDY_double_foo_double != null ) return INDY_double_foo_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "foo", + MethodType.methodType(double .class , double.class))).dynamicInvoker(); + } + + + private static MethodHandle INDY_double_spread_double; + private static MethodHandle INDY_double_spread_double () throws Throwable { + if ( INDY_double_spread_double != null ) return INDY_double_spread_double; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "spread", + MethodType.methodType(double .class , double.class))).dynamicInvoker(); + } + + + + private static MethodType MT_bootstrap () { return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); } + + private static MethodHandle MH_bootstrap () throws Throwable { + return MethodHandles.lookup().findStatic(INDIFY_Test6998541.class, "bootstrap", MT_bootstrap()); + } + + private static CallSite bootstrap(MethodHandles.Lookup declaring, String name, MethodType methodType) throws Throwable { + MethodHandles.Lookup lookup = MethodHandles.lookup(); + MethodHandle mh; + if (methodType.parameterCount() == 0) { + mh = lookup.findStatic(INDIFY_Test6998541.class, "identity", MethodType.methodType(void.class)); + } else { + Class type = methodType.parameterType(0); + mh = lookup.findStatic(INDIFY_Test6998541.class, "identity", MethodType.methodType(type, type)); + + if ("spread".equals(name)) { + int paramCount = mh.type().parameterCount(); + mh = mh.asSpreader(Object[].class, paramCount).asCollector(Object[].class, paramCount); + } + } + mh = mh.asType(methodType); + return new ConstantCallSite(mh); + } + + private static boolean identity(boolean v) { return v; } + private static byte identity(byte v) { return v; } + private static char identity(char v) { return v; } + private static short identity(short v) { return v; } + private static int identity(int v) { return v; } + private static long identity(long v) { return v; } + private static float identity(float v) { return v; } + private static double identity(double v) { return v; } + private static void identity() {} +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/INDIFY_Test6998541.jmpp b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/INDIFY_Test6998541.jmpp new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/INDIFY_Test6998541.jmpp @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.java.rawRetypes; + +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; + + public class INDIFY_Test6998541 { + private static final int N = 100000; + +# +# String[] types = new String[] { "void", "boolean", "byte", "char", "short", "int", "long", "float", "double" }; +# +# String[][] primTypes = new String[][] { +# new String[] { "boolean", "Boolean", "false" }, +# new String[] { "byte", "Byte", "0" }, +# new String[] { "char", "Character", "0" }, +# new String[] { "short", "Short", "0" }, +# new String[] { "int", "Integer", "0" }, +# new String[] { "long", "Long", "0L" }, +# new String[] { "float", "Float", "0f" }, +# new String[] { "double", "Double", "0d" } +# }; +# + + public static void main(String[] args) throws Throwable { +# +# for ( String[] t : primTypes ) { +# + @("do" + t[0]) (); +# +# } +# + } + +# +# for ( String[] t : primTypes ) { +# + private static void @("do" + t[0]) () throws Throwable { + System.out.println(@("\"do" + t[0] + "\"")); + +# if ( t[0].equals("boolean") ) { +# + for (int i = 0; i < N; i++ ) { + @(t[0])2prim(false); + @(t[0])2prim(true); +# +# } else { +# + @(t[0]) x = @(t[1]).MIN_VALUE; + @(t[0]) D = @(t[1]).MAX_VALUE / (N / 2); + for (int i = 0; i < N; i++, x += D) { +# + @(t[0])2prim(x); + +# if ( t[0].equals("int") ) { + void2prim(x); + prim2void(x); + prim2prim(x); +# } +# } + +# + } + } +# } +# + + private static void void2prim(int i) throws Throwable { +# +# for ( String[] t : primTypes ) { +# + assertEquals( @(t[2]), (@(t[0])) INDY_@(t[0])_foo_void().invokeExact()); // void -> @(t[0]) +# +# } +# + } + +# +# for ( String[] f : primTypes ) { +# + private static void @(f[0])2prim(@(f[0]) x) throws Throwable { +# if ( f[0].equals("boolean") ) { + int i = x ? 1 : 0; +# } else { + @(f[0]) i = x; +# } +# +# for ( String[] t : primTypes ) { +# if ( t[0].equals("boolean") ) { +# if ( f[0].equals("boolean") ) { + boolean z = x; +# } else { + boolean z = (x != 0); +# } + assertEquals(z, (@(t[0])) INDY_@(t[0])_foo_@(f[0])().invokeExact(x)); // @(f[0]) -> @(t[0]) +# } else { + assertEquals((@(t[0])) i, (@(t[0])) INDY_@(t[0])_foo_@(f[0])().invokeExact(x)); // @(f[0]) -> @(t[0]) +# } +# } +# + } +# +# } +# + + private static void prim2void(int x) throws Throwable { +# +# for ( String[] f : primTypes ) { +# if ( f[0].equals("boolean") ) { + boolean z = (x != 0); + INDY_void_foo_@(f[0])().invokeExact(z); // @(f[0]) -> void +# } else { + INDY_void_foo_@(f[0])().invokeExact((@(f[0])) x); // @(f[0]) -> void +# } +# } +# + } + + private static void void2void() throws Throwable { + INDY_void_foo_void().invokeExact(); // void -> void + } + + private static void prim2prim(int x) throws Throwable { +# +# for ( String[] f : primTypes ) { +# if ( f[0].equals("boolean") ) { + boolean z = (x != 0); + assertEquals( z, (@(f[0])) INDY_@(f[0])_spread_@(f[0])().invokeExact(z)); // spread: @(f[0]) -> @(f[0]) +# } else { + assertEquals((@(f[0])) x, (@(f[0])) INDY_@(f[0])_spread_@(f[0])().invokeExact((@(f[0])) x)); // spread: @(f[0]) -> @(f[0]) +# } +# } + } + + private static void assertEquals(Object o, Object o2) { + if (!o.equals(o2)) + throw new AssertionError("expected: " + o + ", found: " + o2); + } + +# +# String[] names = new String[] { "foo", "spread" }; +# +# for ( String ret : types ) { +# for ( String arg : types ) { +# +# String argParam, argTypeParam, methodTypeArg; +# if ( ! arg.equals("void") ) { +# argParam = "x"; +# argTypeParam = arg + " x"; +# methodTypeArg = ", " + arg + ".class"; +# } else { +# argTypeParam = argParam = methodTypeArg = ""; +# } +# +# for ( String name : names ) { +# String methodName = "INDY_" + ret + "_" + name + "_" + arg; +# String wrapperName = "indyWrapper_" + ret + "_" + name; + + private static MethodHandle @methodName; + private static MethodHandle @methodName () throws Throwable { + if ( @methodName != null ) return @methodName; + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + @("\"" + name + "\""), + MethodType.methodType(@ret .class @methodTypeArg))).dynamicInvoker(); + } + +# +# } +# } +# } +# + + + private static MethodType MT_bootstrap () { return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); } + + private static MethodHandle MH_bootstrap () throws Throwable { + return MethodHandles.lookup().findStatic(INDIFY_Test6998541.class, "bootstrap", MT_bootstrap()); + } + + private static CallSite bootstrap(MethodHandles.Lookup declaring, String name, MethodType methodType) throws Throwable { + MethodHandles.Lookup lookup = MethodHandles.lookup(); + MethodHandle mh; + if (methodType.parameterCount() == 0) { + mh = lookup.findStatic(INDIFY_Test6998541.class, "identity", MethodType.methodType(void.class)); + } else { + Class type = methodType.parameterType(0); + mh = lookup.findStatic(INDIFY_Test6998541.class, "identity", MethodType.methodType(type, type)); + + if ("spread".equals(name)) { + int paramCount = mh.type().parameterCount(); + mh = mh.asSpreader(Object[].class, paramCount).asCollector(Object[].class, paramCount); + } + } + mh = mh.asType(methodType); + return new ConstantCallSite(mh); + } + +# for ( String t : types ) { +# if ( t.equals("void") ) continue; + private static @t identity(@t v) { return v; } +# } + private static void identity() {} +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/TestDescription.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @bug 6998541 + * + * @summary converted from VM Testbase vm/mlvm/indy/func/java/rawRetypes. + * VM Testbase keywords: [feature_mlvm, duplicate-of-jtreg-test, exclude] + * VM Testbase comments: 8199227 + * VM Testbase readme: + * DESCRIPTION + * This is test for raw retypes (conversions between primitive types) + * TODO: This test is clearly JCK one, so it has to be modified to be a stress test. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * @ignore 8199227 + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.java.rawRetypes.INDIFY_Test6998541 + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.indy.func.java.rawRetypes.INDIFY_Test6998541 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/thisAsArgument/INDIFY_Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/thisAsArgument/INDIFY_Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/thisAsArgument/INDIFY_Test.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/java/thisAsArgument. + * VM Testbase keywords: [feature_mlvm] + * VM Testbase readme: + * DESCRIPTION + * The test is written for a CR 6927831: + * InvokeDynamic throws NoClassDefFoundError in the following test: + * package test; + * import java.dyn.InvokeDynamic; + * import java.dyn.InvokeDynamicBootstrapError; + * public class Self { + * public static void main(String[] args) { + * try { + * InvokeDynamic.greet(new Self()); + * } catch ( InvokeDynamicBootstrapError e ) { + * System.out.println("TEST PASSED"); + * } catch ( Throwable t ) { + * System.err.println("Oops!"); + * t.printStackTrace(); + * } + * } + * } + * ...when it is launched with -classpath: + * $ java -classpath bin test.Self + * Oops! + * java.lang.NoClassDefFoundError: test/Self + * at test.Self.main(Self.java:10) + * If we replace -classpath with -Xbootclasspath: + * $ java -Xbootclasspath/a:bin test.Self + * TEST PASSED + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.java.thisAsArgument.INDIFY_Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.indy.func.java.thisAsArgument.INDIFY_Test + */ + +package vm.mlvm.indy.func.java.thisAsArgument; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.util.Arrays; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Test extends MlvmTest { + + public static void main(String[] args) { MlvmTest.launch(args); } + + // Indify-specific bootstrap trampoline + private static MethodType MT_bootstrap() { + return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); + } + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Test.class, + "bootstrap", + MT_bootstrap()); + } + + public static Object bootstrap(Object lookup, Object name, Object type) throws Throwable { + getLog().trace(0, "bootstrap(" + + Arrays.asList(lookup.getClass(), lookup, + name.getClass(), name, + type.getClass(), type) + ") called"); + + return new Object(); + } + + public static void target(INDIFY_Test arg) { + getLog().trace(0, "target called: arg=" + arg); + new Throwable("Stack trace").printStackTrace(getLog().getOutStream()); + } + + // Indify-specific invokedynamic call substitution + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "target", + MethodType.methodType(void.class, INDIFY_Test.class)); + + return cs.dynamicInvoker(); + } + + @Override + public boolean run() throws Throwable { + try { + // Substitution for: + // InvokeDynamic.target(new INDIFY_Test()); + INDIFY_Test test = new INDIFY_Test(); + INDY_call().invokeExact(test); + getLog().complain("Target method should not be called"); + return false; + } catch ( BootstrapMethodError e ) { + getLog().trace(0, "Caught exception as expected:"); + e.printStackTrace(getLog().getOutStream()); + return true; + } catch ( Throwable t ) { + getLog().complain("Wrong exception caught!"); + t.printStackTrace(getLog().getOutStream()); + return false; + } + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/thisAsArgument/Test.java.jdk8 b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/thisAsArgument/Test.java.jdk8 new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/thisAsArgument/Test.java.jdk8 @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.java.thisAsArgument; + +import vm.mlvm.share.MlvmTest; + +public class Test extends MlvmTest { + + public static void main(String[] args) { MlvmTest.launch(args); } + + @Override + public boolean run() throws Throwable { + try { + InvokeDynamic.greet(new Test()); + return false; + } catch ( InvokeDynamicBootstrapError e ) { + return true; + } + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/verifyStackTrace/INDIFY_Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/verifyStackTrace/INDIFY_Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/verifyStackTrace/INDIFY_Test.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/java/verifyStackTrace. + * VM Testbase keywords: [feature_mlvm] + * VM Testbase readme: + * DESCRIPTION + * The test verifies that a stack trace is readable and contains a correct stack in a bootstrap and a target methods + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.java.verifyStackTrace.INDIFY_Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.indy.func.java.verifyStackTrace.INDIFY_Test + */ + +package vm.mlvm.indy.func.java.verifyStackTrace; + +import java.lang.invoke.CallSite; +import java.lang.invoke.ConstantCallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodHandles.Lookup; +import java.lang.invoke.MethodType; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Test extends MlvmTest { + + private static final String METHOD_NAME = "runFunky"; + private static final int MAX_FRAME = 10; + + public INDIFY_Test() {} + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Test.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(Lookup c, String name, MethodType mt) throws Throwable { + getLog().trace(0, "Lookup " + c + "; method name = " + name + "; method type = " + mt); + + boolean found = false; + StackTraceElement trace[] = new Throwable().getStackTrace(); + for ( int i = 1; i < MAX_FRAME; i++ ) { + StackTraceElement stackFrame = trace[i]; + getLog().trace(0, "Caller " + i + " stack frame: " + stackFrame); + if ( stackFrame.getMethodName().equals(METHOD_NAME) ) { + getLog().trace(0, "Required stack frame found"); + found = true; + break; + } + } + + if ( ! found ) + throw new RuntimeException("Can't find caller method name (" + METHOD_NAME + ") in a bootstrap method stack"); + + return new ConstantCallSite(MethodHandles.lookup().findStatic(INDIFY_Test.class, "target", mt)); + } + + public static Throwable target(Object o, String s, int i) { + getLog().trace(0, "Target called! Object = " + o + "; string = " + s + "; int = " + i); + return new Throwable(); + } + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Throwable.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public boolean runFunky() throws Throwable { + // Throwable t = (Throwable) InvokeDynamic.greet(new Object(), "world", 123); + Object o = new Object(); + String s = "world"; + int i = 123; + Throwable t = (Throwable) INDY_call().invokeExact(o, s, i); + + StackTraceElement stackFrame = t.getStackTrace()[1]; + getLog().trace(0, "Stack trace element from target call: " + stackFrame); + if ( ! stackFrame.getMethodName().equals(METHOD_NAME) ) + throw new Exception("Wrong method name in a bootstrap method: " + stackFrame); + + return true; + } + + public boolean run() throws Throwable { return runFunky(); } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/verifyStackTrace/Test.java.jdk8 b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/verifyStackTrace/Test.java.jdk8 new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/verifyStackTrace/Test.java.jdk8 @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.java.verifyStackTrace; + +import java.dyn.CallSite; +import java.dyn.InvokeDynamic; +import java.dyn.Linkage; +import java.dyn.MethodHandles; +import java.dyn.MethodType; + +import vm.mlvm.share.MlvmTest; + +public class Test extends MlvmTest { + + private static final String METHOD_NAME = "runFunky"; + private static final int MAX_FRAME = 10; + + public Test() {} + + public static CallSite bootstrap(Class c, String name, MethodType mt) { + getLog().trace(0, "Class " + c + "; method name = " + name + "; method type = " + mt); + + boolean found = false; + StackTraceElement trace[] = new Throwable().getStackTrace(); + for ( int i = 1; i < MAX_FRAME; i++ ) { + StackTraceElement stackFrame = trace[3]; + getLog().trace(0, "Caller " + i + " stack frame: " + stackFrame); + if ( stackFrame.getMethodName().equals(METHOD_NAME) ) { + found = true; + break; + } + } + + if ( ! found ) + throw new RuntimeException("Can't find caller method name (" + METHOD_NAME + ") in a bootstrap method stack"); + + return new CallSite(MethodHandles.publicLookup().findStatic(Test.class, "target", mt)); + } + + public static Throwable target(Object o, String s, int i) { + getLog().trace(0, "Target called! Object = " + o + "; string = " + s + "; int = " + i); + return new Throwable(); + } + + public boolean runFunky() throws Throwable { + Throwable t = (Throwable) InvokeDynamic.greet(new Object(), "world", 123); + + StackTraceElement stackFrame = t.getStackTrace()[1]; + if ( ! stackFrame.getMethodName().equals(METHOD_NAME) ) + throw new RuntimeException("Wrong method name in a bootstrap method: " + stackFrame); + + return true; + } + + public boolean run() throws Throwable { return runFunky(); } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpoint/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpoint/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpoint/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpoint/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpoint/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpoint/Test.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jdi/breakpoint. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine] + * VM Testbase comments: 8199578 + * VM Testbase readme: + * DESCRIPTION + * Using JDI set a debugger breakpoint on invokedynamic instruction. + * Go few steps, obtaining various information from JVM. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build debuggee class + * @build vm.mlvm.share.jdi.IndyDebuggee + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jdi.breakpoint.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm PropertyResolvingWrapper + * vm.mlvm.indy.func.jdi.breakpoint.Test + * -verbose + * -arch=${os.family}-${os.simpleArch} + * -waittime=5 + * -debugee.vmkind=java + * -transport.address=dynamic + * -debugger.debuggeeClass vm.mlvm.share.jdi.IndyDebuggee + */ + +package vm.mlvm.indy.func.jdi.breakpoint; + +import vm.mlvm.share.jdi.ArgumentHandler; +import vm.mlvm.share.jdi.BreakpointInfo; +import vm.mlvm.share.jdi.JDIBreakpointTest; + +import java.util.ArrayList; +import java.util.List; + +public class Test extends JDIBreakpointTest { + // indyWrapper:S8000,bootstrap,target,stop + @Override + protected List getBreakpoints(String debuggeeClassName) { + List result = new ArrayList<>(); + { + BreakpointInfo info = new BreakpointInfo("indyWrapper"); + info.stepsToTrace = 8000; + result.add(info); + } + result.add(new BreakpointInfo("bootstrap")); + result.add(new BreakpointInfo("target")); + result.add(new BreakpointInfo("stop")); + return result; + } + + + public static void main(String[] args) { + launch(new ArgumentHandler(args)); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpointOtherStratum/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpointOtherStratum/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpointOtherStratum/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpointOtherStratum/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpointOtherStratum/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpointOtherStratum/Test.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jdi/breakpointOtherStratum. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine] + * VM Testbase comments: 8199578 + * VM Testbase readme: + * DESCRIPTION + * Performs debugging of invokedynamic call in vm.mlvm.share.jdi.INDIFY_Debuggee (with added + * source debug information) and verifies that JDI reports correct SDE locations. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build debuggee class + * @build vm.mlvm.share.jdi.IndyDebuggee + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jdi.breakpointOtherStratum.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @comment recompile INDIFY_SDE_DebuggeeBase with Stratum annotation processor + * @clean vm.mlvm.share.jpda.INDIFY_SDE_DebuggeeBase + * @run driver + * vm.mlvm.share.StratumClassesBuilder + * vmTestbase/vm/mlvm/share/jpda/INDIFY_SDE_DebuggeeBase.java + * + * @run main/othervm PropertyResolvingWrapper + * vm.mlvm.indy.func.jdi.breakpointOtherStratum.Test + * -verbose + * -arch=${os.family}-${os.simpleArch} + * -waittime=5 + * -debugee.vmkind=java + * -debugee.vmkeys="-cp ./bin/classes${path.separator}${test.class.path}" + * -transport.address=dynamic + * -debugger.debuggeeClass vm.mlvm.share.jdi.IndyDebuggee + */ + +package vm.mlvm.indy.func.jdi.breakpointOtherStratum; + +import vm.mlvm.share.jdi.ArgumentHandler; +import vm.mlvm.share.jdi.BreakpointInfo; +import vm.mlvm.share.jdi.JDIBreakpointTest; +import vm.mlvm.share.jpda.StratumInfo; + +import java.util.ArrayList; +import java.util.List; + +public class Test extends JDIBreakpointTest { + + @Override + protected List getBreakpoints(String debuggeeClassName) { + List result = new ArrayList<>(); + // indyWrapper:S8000/Logo=INDIFY_SDE_DebuggeeBase.logo:2 + { + BreakpointInfo info = new BreakpointInfo("indyWrapper"); + info.stepsToTrace = 8000; + info.stratumInfo = new StratumInfo("Logo", "INDIFY_SDE_DebuggeeBase.logo", 2); + result.add(info); + } + // bootstrap/Logo=INDIFY_SDE_DebuggeeBase.logo:3 + { + BreakpointInfo info = new BreakpointInfo("bootstrap"); + info.stratumInfo = new StratumInfo("Logo", "INDIFY_SDE_DebuggeeBase.logo", 3); + result.add(info); + } + // target/Logo=INDIFY_SDE_DebuggeeBase.logo:4 + { + BreakpointInfo info = new BreakpointInfo("target"); + info.stratumInfo = new StratumInfo("Logo", "INDIFY_SDE_DebuggeeBase.logo", 4); + result.add(info); + } + // stop/Logo=INDIFY_SDE_DebuggeeBase.logo:5 + { + BreakpointInfo info = new BreakpointInfo("stop"); + info.stratumInfo = new StratumInfo("Logo", "INDIFY_SDE_DebuggeeBase.logo", 5); + result.add(info); + } + return result; + } + + public static void main(String[] args) { + launch(new ArgumentHandler(args)); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/INDIFY_Dummy0.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_a; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Original target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return false; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Original"; + int i = 456; + boolean b = (Boolean) INDY_call().invokeExact(o, s, i); + redefineNow(); + throw new RuntimeException("Original invokeTarget() method is executed after redefinition. Test failed."); + } + + public static boolean isRedefinedClass() { + return false; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/TestDescription.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR] + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that + * a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done + * via MethodEntry event). After calling the target method, Dummy0 class is redefined + * using RedefineClasses function to another Dummy0 class and PopFrame function + * is called to reenter the method. + * To verify logic of merging constant pools with regard to JSR 292, the original class has just + * one invokedynamic call and the new Dummy0 has several invokedynamic calls with different arguments. + * The test verifies that when class is redefined and frame is popped, + * the new target method is executed and the site is relinked. + * + * @library /vmTestbase + * /test/lib + * + * @comment build dummy class + * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_a.INDIFY_Dummy0 + * + * @comment compile newclass to bin/newclass + * @run driver nsk.share.ExtraClassesBuilder newclass + * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass + * vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_a.INDIFY_Dummy0 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/newclass/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/newclass/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/newclass/INDIFY_Dummy0.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_a; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return true; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Redefined"; + int i = 456; + boolean b = (Boolean) INDY_call().invokeExact(o, s, i); + b ^= (Boolean) INDY_call().invokeExact(o, s, i); + o = new Object(); + s = s + s; + i = i + i; + b ^= (Boolean) INDY_call().invokeExact(o, s, i); + b ^= (Boolean) INDY_call().invokeExact(o, s, i); + b ^= (Boolean) INDY_call().invokeExact(o, s, i); + return b; + } + + public static boolean isRedefinedClass() { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/INDIFY_Dummy0.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_b; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + redefineNow(); + throw new RuntimeException("Bootstrap method has not been redefined. Test failed."); + } + + public static Boolean target(Object o, String s, int i) { + throw new RuntimeException("Original target method was called. Test failed."); + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Original"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return false; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TestDescription.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, quarantine, noJFR] + * VM Testbase comments: 8013267 + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that + * a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done + * via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses + * function to another Dummy0 class and PopFrame function is called to reenter the method. + * To verify logic of merging constant pools with regard to JSR 292, the original class has just + * one invokedynamic call and the new Dummy0 has several invokedynamic calls with different arguments. + * The test verifies that when class is redefined in a target method (at that moment, + * the call site is linked) and frame is popped, the new target method is executed and + * the site is relinked. + * + * @library /vmTestbase + * /test/lib + * + * @comment build dummy class + * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_b.INDIFY_Dummy0 + * + * @comment compile newclass to bin/newclass + * @run driver nsk.share.ExtraClassesBuilder newclass + * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass + * vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_b.INDIFY_Dummy0 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/newclass/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/newclass/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/newclass/INDIFY_Dummy0.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_b; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + //in the original file: redefineNow(); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return true; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Redefined"; + int i = 456; + boolean b = (Boolean) INDY_call().invokeExact(o, s, i); + b ^= (Boolean) INDY_call().invokeExact(o, s, i); + o = new Object(); + s = s + s; + i = i + i; + b ^= (Boolean) INDY_call().invokeExact(o, s, i); + b ^= (Boolean) INDY_call().invokeExact(o, s, i); + b ^= (Boolean) INDY_call().invokeExact(o, s, i); + return b; + } + + public static boolean isRedefinedClass() { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/INDIFY_Dummy0.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_a; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Original target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return false; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Original"; + int i = 456; + boolean b = (Boolean) INDY_call().invokeExact(o, s, i); + redefineNow(); + throw new RuntimeException("Original invokeTarget() method is executed after redefinition. Test failed."); + } + + public static boolean isRedefinedClass() { + return false; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/TestDescription.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR] + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that + * a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done + * via MethodEntry event). After calling the target method, Dummy0 class is redefined + * using RedefineClasses function to another Dummy0 class and PopFrame function + * is called to reenter the method. + * To verify logic of merging constant pools with regard to JSR 292, the original class has just + * one invokedynamic call and the new Dummy0 has several identical invokedynamic calls. + * The test verifies that when class is redefined and frame is popped, + * the new target method is executed and the site is relinked. + * + * @library /vmTestbase + * /test/lib + * + * @comment build dummy class + * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_a.INDIFY_Dummy0 + * + * @comment compile newclass to bin/newclass + * @run driver nsk.share.ExtraClassesBuilder newclass + * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass + * vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_a.INDIFY_Dummy0 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/newclass/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/newclass/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/newclass/INDIFY_Dummy0.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_a; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return true; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Redefined"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i) + && (Boolean) INDY_call().invokeExact(o, s, i) + && (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/INDIFY_Dummy0.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_b; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + redefineNow(); + throw new RuntimeException("Bootstrap method has not been redefined. Test failed."); + } + + public static Boolean target(Object o, String s, int i) { + throw new RuntimeException("Original target method was called. Test failed."); + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Original"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return false; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TestDescription.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, quarantine, noJFR] + * VM Testbase comments: 8013267 + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that + * a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done + * via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses + * function to another Dummy0 class and PopFrame function is called to reenter the method. + * To verify logic of merging constant pools with regard to JSR 292, the original class has just + * one invokedynamic call and the new Dummy0 has several identical invokedynamic calls. + * The test verifies that when class is redefined in a target method (at that moment, + * the call site is linked) and frame is popped, the new target method is executed and + * the site is relinked. + * + * @library /vmTestbase + * /test/lib + * + * @comment build dummy class + * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_b.INDIFY_Dummy0 + * + * @comment compile newclass to bin/newclass + * @run driver nsk.share.ExtraClassesBuilder newclass + * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass + * vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_b.INDIFY_Dummy0 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/newclass/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/newclass/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/newclass/INDIFY_Dummy0.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_b; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + //in the original file: redefineNow(); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return true; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Redefined"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i) + && (Boolean) INDY_call().invokeExact(o, s, i) + && (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/INDIFY_Dummy0.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2none_a; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + redefineNow(); + throw new RuntimeException("Bootstrap method has not been redefined. Test failed."); + } + + public static Boolean target(Object o, String s, int i) { + throw new RuntimeException("Original target method was called. Test failed."); + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Original"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return false; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TestDescription.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, quarantine, noJFR] + * VM Testbase comments: 8013267 + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that + * a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done + * via MethodEntry event). After calling the target method, Dummy0 class is redefined + * using RedefineClasses function to another Dummy0 class and PopFrame function + * is called to reenter the method. + * To verify logic of merging constant pools with regard to JSR 292, the original class has + * a invokedynamic call and the new Dummy0 does not have invokedynamic at all. + * The test verifies that when class is redefined and frame is popped, + * the new target method is executed and the site is relinked. + * + * @library /vmTestbase + * /test/lib + * + * @comment build dummy class + * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2none_a.INDIFY_Dummy0 + * + * @comment compile newclass to bin/newclass + * @run driver nsk.share.ExtraClassesBuilder newclass + * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass + * vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2none_a.INDIFY_Dummy0 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/newclass/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/newclass/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/newclass/INDIFY_Dummy0.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2none_a; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + //In the original class: redefineNow(); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return true; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Redefined"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/INDIFY_Dummy0.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2none_b; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + redefineNow(); + throw new RuntimeException("Original target method was called. Test failed."); + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Original"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return false; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/TestDescription.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR] + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that + * a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done + * via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses + * function to another Dummy0 class and PopFrame function is called to reenter the method. + * To verify logic of merging constant pools with regard to JSR 292, the original class has + * a invokedynamic call and the new Dummy0 does not have invokedynamic at all. + * The test verifies that when class is redefined in a target method (at that moment, + * the call site is linked) and frame is popped, the new target method is executed and + * the site is relinked. + * + * @library /vmTestbase + * /test/lib + * + * @comment build dummy class + * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2none_b.INDIFY_Dummy0 + * + * @comment compile newclass to bin/newclass + * @run driver nsk.share.ExtraClassesBuilder newclass + * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass + * vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2none_b.INDIFY_Dummy0 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/newclass/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/newclass/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/newclass/INDIFY_Dummy0.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2none_b; + +import vm.mlvm.share.MlvmTest; + +import java.lang.invoke.*; + +public class INDIFY_Dummy0 { + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return true; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Redefined"; + int i = 456; + return (Boolean) target(o, s, i); + } + + public static boolean isRedefinedClass() { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/INDIFY_Dummy0.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2same_a; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return false; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = ""; + int i = 456; + boolean b = (Boolean) INDY_call().invokeExact(o, s, i); + redefineNow(); + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return false; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/TestDescription.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR] + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that + * a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done + * via MethodEntry event). After calling the target method, Dummy0 class is redefined + * using RedefineClasses function to another Dummy0 class and PopFrame function + * is called to reenter the method. + * To verify logic of merging constant pools with regard to JSR 292, the original class + * and the target one have the nearly the same code and the same CP. + * The test verifies that when class is redefined and frame is popped, + * the new target method is executed and the site is relinked. + * + * @library /vmTestbase + * /test/lib + * + * @comment build dummy class + * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2same_a.INDIFY_Dummy0 + * + * @comment compile newclass to bin/newclass + * @run driver nsk.share.ExtraClassesBuilder newclass + * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass + * vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2same_a.INDIFY_Dummy0 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/newclass/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/newclass/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/newclass/INDIFY_Dummy0.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2same_a; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return true; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = ""; + int i = 456; + boolean b = (Boolean) INDY_call().invokeExact(o, s, i); + // In the original class here goes: redefineNow(); + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/INDIFY_Dummy0.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2same_b; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + redefineNow(); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return false; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = ""; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return false; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/TestDescription.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR] + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that + * a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done + * via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses + * function to another Dummy0 class and PopFrame function is called to reenter the method. + * To verify logic of merging constant pools with regard to JSR 292, the original class + * and the target one have the nearly the same code and the same CP. + * The test verifies that when class is redefined in a target method (at that moment, + * the call site is linked) and frame is popped, the new target method is executed and + * the site is relinked. + * + * @library /vmTestbase + * /test/lib + * + * @comment build dummy class + * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2same_b.INDIFY_Dummy0 + * + * @comment compile newclass to bin/newclass + * @run driver nsk.share.ExtraClassesBuilder newclass + * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass + * vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2same_b.INDIFY_Dummy0 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/newclass/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/newclass/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/newclass/INDIFY_Dummy0.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_indy2same_b; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return true; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = ""; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/INDIFY_Dummy0.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_none2indy_a; + +import vm.mlvm.share.MlvmTest; + +import java.lang.invoke.*; + + +public class INDIFY_Dummy0 { + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Original target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return false; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Original"; + int i = 456; + boolean b = target(o, s, i); + redefineNow(); + throw new RuntimeException("Original invokeTarget() method is executed after redefinition. Test failed."); + } + + public static boolean isRedefinedClass() { + return false; + } + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/TestDescription.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR] + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that + * a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done + * via MethodEntry event). After calling the target method, Dummy0 class is redefined + * using RedefineClasses function to another Dummy0 class and PopFrame function + * is called to reenter the method. + * To verify logic of merging constant pools with regard to JSR 292, the original class + * does not have a invokedynamic call at all and the new Dummy0 does have one. + * The test verifies that when class is redefined and frame is popped, + * the new target method is executed and the site is relinked. + * + * @library /vmTestbase + * /test/lib + * + * @comment build dummy class + * @build vm.mlvm.indy.func.jvmti.mergeCP_none2indy_a.INDIFY_Dummy0 + * + * @comment compile newclass to bin/newclass + * @run driver nsk.share.ExtraClassesBuilder newclass + * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass + * vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_none2indy_a.INDIFY_Dummy0 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/newclass/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/newclass/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/newclass/INDIFY_Dummy0.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_none2indy_a; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return true; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Redefined"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/INDIFY_Dummy0.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_none2indy_b; + +import vm.mlvm.share.MlvmTest; + +import java.lang.invoke.*; + +public class INDIFY_Dummy0 { + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + redefineNow(); + throw new RuntimeException("Original target method was called instead of the redefined one. Test failed."); + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, + int.class)); + + return cs.dynamicInvoker(); + } + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Original"; + int i = 456; + return target(o, s, i); + } + + public static boolean isRedefinedClass() { + return false; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/TestDescription.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR] + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that + * a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done + * via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses + * function to another Dummy0 class and PopFrame function is called to reenter the method. + * To verify logic of merging constant pools with regard to JSR 292, the original class + * does not have a invokedynamic call at all and the new Dummy0 does have one. + * The test verifies that when class is redefined in a target method (at that moment, + * the call site is linked) and frame is popped, the new target method is executed and + * the site is relinked. + * + * @library /vmTestbase + * /test/lib + * + * @comment build dummy class + * @build vm.mlvm.indy.func.jvmti.mergeCP_none2indy_b.INDIFY_Dummy0 + * + * @comment compile newclass to bin/newclass + * @run driver nsk.share.ExtraClassesBuilder newclass + * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass + * vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_none2indy_b.INDIFY_Dummy0 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/newclass/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/newclass/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/newclass/INDIFY_Dummy0.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.mergeCP_none2indy_b; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return true; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + Object o = new Object(); + String s = "Redefined"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/INDIFY_Dummy0.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.redefineClassInBootstrap; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + redefineNow(); + throw new RuntimeException("Bootstrap method has not been redefined. Test failed."); + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Original target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return false; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + //return (boolean) InvokeDynamic.greet(new Object(), "Redefined", 456); + Object o = new Object(); + String s = "Original"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return false; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/TestDescription.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/redefineClassInBootstrap. + * VM Testbase keywords: [feature_mlvm, jvmti, redefine, quarantine, noJFR] + * VM Testbase comments: 8013267 + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that + * a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done + * via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses + * function to Dummy1 class (in its classfile every occurence of "Dummy1" is replaced with + * "Dummy0") and PopFrame function is called to reenter the method. + * The test verifies that: + * - When class is redefined in bootstrap method frame, a new bootstrap method is called after PopFrame() + * CR 6929027 + * + * @library /vmTestbase + * /test/lib + * + * @comment build dummy class + * @build vm.mlvm.indy.func.jvmti.redefineClassInBootstrap.INDIFY_Dummy0 + * + * @comment compile newclass to bin/newclass + * @run driver nsk.share.ExtraClassesBuilder newclass + * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass + * vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * -dummyClassName=vm.mlvm.indy.func.jvmti.redefineClassInBootstrap.INDIFY_Dummy0 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/newclass/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/newclass/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/newclass/INDIFY_Dummy0.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.redefineClassInBootstrap; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws Throwable { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return true; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + //return (boolean) InvokeDynamic.greet(new Object(), "Redefined", 456); + Object o = new Object(); + String s = "Redefined"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/INDIFY_Dummy0.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.redefineClassInTarget; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Original target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + redefineNow(); + return false; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + //return (boolean) InvokeDynamic.greet(new Object(), "Redefined", 456); + Object o = new Object(); + String s = "Original"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return false; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/TestDescription.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/redefineClassInTarget. + * VM Testbase keywords: [feature_mlvm, jvmti, redefine, jdk, noJFR] + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that + * a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done + * via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses + * function to Dummy1 class (in its classfile every occurence of "Dummy1" is replaced with + * "Dummy0") and PopFrame function is called to reenter the method. + * The test verifies that when class is redefined in a target method (at that moment, + * the call site is linked) and frame is popped, the new target method is executed and + * the site is relinked. + * CR 6929027 + * + * @library /vmTestbase + * /test/lib + * + * @comment build dummy class + * @build vm.mlvm.indy.func.jvmti.redefineClassInTarget.INDIFY_Dummy0 + * + * @comment compile newclass to bin/newclass + * @run driver nsk.share.ExtraClassesBuilder newclass + * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass + * vm.mlvm.indy.func.jvmti.share.IndyRedefineTest + * -dummyClassName=vm.mlvm.indy.func.jvmti.redefineClassInTarget.INDIFY_Dummy0 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/newclass/INDIFY_Dummy0.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/newclass/INDIFY_Dummy0.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/newclass/INDIFY_Dummy0.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.redefineClassInTarget; + +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; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Dummy0 { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws Throwable { + return MethodHandles.lookup().findStatic( + INDIFY_Dummy0.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable { + MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt)); + return cs; + } + + public static Boolean target(Object o, String s, int i) { + MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i); + MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class"); + return true; + } + + public static void redefineNow() {} + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Boolean.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public static boolean invokeTarget() throws Throwable { + return invokeTarget0(); + } + + private static boolean invokeTarget0() throws Throwable { + //return (boolean) InvokeDynamic.greet(new Object(), "Redefined", 456); + Object o = new Object(); + String s = "Redefined"; + int i = 456; + return (Boolean) INDY_call().invokeExact(o, s, i); + } + + public static boolean isRedefinedClass() { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineClass.c b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineClass.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineClass.c @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include +#include "jvmti.h" +#include "agent_common.h" +#include "JVMTITools.h" +#include "jvmti_tools.h" +#include "mlvmJvmtiUtils.h" + +static jvmtiEnv* gJvmtiEnv = NULL; + +static jboolean gIsMethodEntryWorking = JNI_FALSE; +static jboolean gIsSingleStepWorking = JNI_FALSE; +static jboolean gIsErrorOccured = JNI_FALSE; + +static jboolean gIsDebuggerCompatible = JNI_FALSE; + +static jint gPopFrameDepth = 2; + +typedef struct TLS { + jint countOfFramesToPop; +} TLSStruct; + +static char * gszRedefineTriggerMethodName = "NONE"; +static char * gszRedefinedClassFileName = "NONE"; +static jboolean gIsClassRedefined = JNI_FALSE; + +JNIEXPORT void JNICALL +Java_vm_mlvm_indy_func_jvmti_share_IndyRedefineClass_setRedefineTriggerMethodName(JNIEnv * pEnv, jclass clazz, jstring name) { + copyFromJString(pEnv, name, &gszRedefineTriggerMethodName); + NSK_DISPLAY1("Setting redefine trigger method name to %s\n", gszRedefineTriggerMethodName); +} + +JNIEXPORT void JNICALL +Java_vm_mlvm_indy_func_jvmti_share_IndyRedefineClass_setRedefinedClassFileName(JNIEnv * pEnv, jclass clazz, jstring name) { + copyFromJString(pEnv, name, &gszRedefinedClassFileName); + NSK_DISPLAY1("Setting redefined class name to %s\n", gszRedefinedClassFileName); + gIsClassRedefined = JNI_FALSE; +} + +JNIEXPORT void JNICALL +Java_vm_mlvm_indy_func_jvmti_share_IndyRedefineClass_setPopFrameDepthAfterRedefine(JNIEnv * pEnv, jclass clazz, jint depth) { + gPopFrameDepth = depth; +} + +JNIEXPORT jboolean JNICALL +Java_vm_mlvm_indy_func_jvmti_share_IndyRedefineClass_checkStatus(JNIEnv * pEnv, jclass clazz) { + NSK_DISPLAY0("The following values should be non-zero for test to pass:\n"); + NSK_DISPLAY1("Method entry event fired? %i\n", gIsMethodEntryWorking); + NSK_DISPLAY1("Single step event fired? %i\n", gIsSingleStepWorking); + NSK_DISPLAY0("The following value should be zero for test to pass:\n"); + NSK_DISPLAY1("Any other error occured? %i\n", gIsErrorOccured); + return gIsMethodEntryWorking && gIsSingleStepWorking && ! gIsErrorOccured; +} + +static void popFrameLogic(jvmtiEnv * jvmti_env, jthread thread) { + + TLSStruct * tls = (TLSStruct *) getTLS(jvmti_env, thread, sizeof(TLSStruct)); + + if ( ! tls ) + return; + + if ( tls->countOfFramesToPop <= 0 ) { + + NSK_DISPLAY0("Disabling single step\n"); + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, JVMTI_DISABLE, JVMTI_EVENT_SINGLE_STEP, NULL)) ) + gIsErrorOccured = JNI_TRUE; + + } else { + + NSK_DISPLAY0("Enabling single step\n"); + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, JVMTI_ENABLE, JVMTI_EVENT_SINGLE_STEP, NULL)) ) + gIsErrorOccured = JNI_TRUE; + + if ( tls->countOfFramesToPop == 1 ) { + NSK_DISPLAY0("Popping a frame\n"); + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB2(PopFrame, jvmti_env, thread)) ) + gIsErrorOccured = JNI_TRUE; + } else { + NSK_DISPLAY0("Forcing early return\n"); + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB2(ForceEarlyReturnVoid, jvmti_env, thread)) ) + gIsErrorOccured = JNI_TRUE; + } + + --tls->countOfFramesToPop; + } +} + +static void JNICALL +MethodEntry(jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method) { + + struct MethodName * mn; + TLSStruct * tls; + jclass clazz; + + gIsMethodEntryWorking = JNI_TRUE; + mn = getMethodName(jvmti_env, method); + if ( ! mn ) + return; + + if ( strcmp(mn->methodName, gszRedefineTriggerMethodName) != 0 ) { + free(mn); + return; + } + + NSK_DISPLAY2("Entering redefine tigger method: %s.%s\n", mn->classSig, mn->methodName); + free(mn); mn = NULL; + + if ( gIsClassRedefined ) { + NSK_DISPLAY0("Class is already redefined.\n"); + return; + } + + NSK_DISPLAY1("Redefining class %s\n", gszRedefinedClassFileName); + + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(GetMethodDeclaringClass, jvmti_env, method, &clazz)) ) + return; + + if ( ! NSK_VERIFY(nsk_jvmti_redefineClass(jvmti_env, clazz, gszRedefinedClassFileName)) ) { + gIsErrorOccured = JNI_TRUE; + return; + } + + gIsClassRedefined = JNI_TRUE; + + tls = (TLSStruct *) getTLS(jvmti_env, thread, sizeof(TLSStruct)); + tls->countOfFramesToPop = gPopFrameDepth; + + popFrameLogic(jvmti_env, thread); +} + +static void JNICALL +SingleStep(jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method, + jlocation location) { + + char * locStr; + gIsSingleStepWorking = JNI_TRUE; + locStr = locationToString(jvmti_env, method, location); + NSK_DISPLAY1("Single step event: %s\n", locStr); + free(locStr); + + popFrameLogic(jvmti_env, thread); +} + +jint Agent_Initialize(JavaVM * vm, char * options, void * reserved) { + jvmtiEventCallbacks callbacks; + jvmtiCapabilities caps; + + if ( ! NSK_VERIFY(nsk_jvmti_parseOptions(options)) ) + return JNI_ERR; + + if ( ! NSK_VERIFY((gJvmtiEnv = nsk_jvmti_createJVMTIEnv(vm, reserved)) != NULL) ) + return JNI_ERR; + + if ( nsk_jvmti_findOptionValue("debuggerCompatible") ) { + gIsDebuggerCompatible = JNI_TRUE; + } + + memset(&caps, 0, sizeof(caps)); + caps.can_generate_method_entry_events = 1; + caps.can_generate_single_step_events = 1; + caps.can_pop_frame = 1; + caps.can_force_early_return = 1; + caps.can_redefine_classes = 1; + + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB2(AddCapabilities, gJvmtiEnv, &caps)) ) + return JNI_ERR; + + memset(&callbacks, 0, sizeof(callbacks)); + callbacks.MethodEntry = &MethodEntry; + callbacks.SingleStep = &SingleStep; + + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetEventCallbacks, gJvmtiEnv, &callbacks, sizeof(callbacks))) ) + return JNI_ERR; + + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, gJvmtiEnv, JVMTI_ENABLE, JVMTI_EVENT_METHOD_ENTRY, NULL) ) ) + return JNI_ERR; + + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, gJvmtiEnv, JVMTI_DISABLE, JVMTI_EVENT_SINGLE_STEP, NULL) ) ) + return JNI_ERR; + + return JNI_OK; +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineClass.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineClass.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineClass.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.share; + +public class IndyRedefineClass { + + public static native void setRedefineTriggerMethodName(String name); + public static native void setRedefinedClassFileName(String name); + public static native void setPopFrameDepthAfterRedefine(int depth); + + public static native boolean checkStatus(); + + static { + System.loadLibrary(IndyRedefineClass.class.getSimpleName()); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineTest.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineTest.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.func.jvmti.share; + +import java.io.File; +import java.lang.reflect.Method; + +import vm.mlvm.share.MlvmTest; +import vm.share.options.Option; + +public class IndyRedefineTest extends MlvmTest { + + @Option(name="dummyClassName", description="Redefined class FQDN") + private String dummyClassName = null; + + private static final int CYCLES_COUNT = 2; + + public boolean run() throws Throwable { + IndyRedefineClass.setRedefinedClassFileName(dummyClassName.replace('.', File.separatorChar)); + IndyRedefineClass.setRedefineTriggerMethodName("redefineNow"); + + Class dummyClass = Class.forName(dummyClassName); + Method mInvokeTarget = dummyClass.getDeclaredMethod("invokeTarget"); + Method mIsRedefinedClass = dummyClass.getDeclaredMethod("isRedefinedClass"); + + for ( int i = 0; i < CYCLES_COUNT; i++ ) { + if ( ! (Boolean) mInvokeTarget.invoke(null) ) + markTestFailed("Error: the original target method was called\n"); + + if ( ! (Boolean) mIsRedefinedClass.invoke(null) ) + markTestFailed("Error: the class was not redefined\n"); + } + + if ( ! IndyRedefineClass.checkStatus() ) + markTestFailed("Error: failures in native code. Please see verbose log"); + + return true; + } + + public static void main(String[] args) { + MlvmTest.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/libIndyRedefineClass.c b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/libIndyRedefineClass.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/libIndyRedefineClass.c @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include "agent_common.c" +#include "JVMTITools.c" +#include "nsk_tools.c" +#include "jni_tools.c" +#include "native_thread.c" +#include "agent_tools.c" +#include "jvmti_tools.c" +#include "mlvmJvmtiUtils.c" +#include "IndyRedefineClass.c" diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/INDIFY_Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/INDIFY_Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/INDIFY_Test.java @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/stepBreakPopReturn. + * VM Testbase keywords: [feature_mlvm, jvmti, noJFR] + * VM Testbase readme: + * DESCRIPTION + * Test calls a boostrap and a target methods via InvokeDynamic call, verifying that the + * following JVMTI events are firing: + * - MethodEntry + * - SingleStep + * - Breakpoint + * Also it calls JVMTI function PopFrame() from the bootstrap method + * and ForceEarlyReturn() function from the target method + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.func.jvmti.stepBreakPopReturn.INDIFY_Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * -agentlib:stepBreakPopReturn=verbose= + * vm.mlvm.indy.func.jvmti.stepBreakPopReturn.INDIFY_Test + */ + +package vm.mlvm.indy.func.jvmti.stepBreakPopReturn; + +import java.lang.invoke.CallSite; +import java.lang.invoke.ConstantCallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodHandles.Lookup; +import java.lang.invoke.MethodType; + +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Test extends MlvmTest { + + public static native void setDebuggeeMethodName(String name); + public static native void setDebuggeeClassName(String name); + public static native boolean checkStatus(); + + static { + System.loadLibrary("stepBreakPopReturn"); + } + + private static MethodType MT_bootstrap() { + return MethodType.methodType(CallSite.class, Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_Test.class, + "bootstrap", + MT_bootstrap()); + } + + public static CallSite bootstrap(Lookup c, String name, MethodType mt) throws Throwable { + int i = 0; // For single step + getLog().trace(i, "Lookup " + c + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite(MethodHandles.lookup().findStatic( + INDIFY_Test.class, + "target", + MethodType.methodType(int.class, Object.class, String.class, int.class))); + return cs; + } + + public static int target(Object o, String s, int i) { + int j = 0; // For single step event + getLog().trace(0, "Target called! Object = " + o + "; string = " + s + "; int = " + i); + return i; + } + + private static MethodHandle INDY_call1; + private static MethodHandle INDY_call1() throws Throwable { + if (INDY_call1 != null) + return INDY_call1; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(int.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + private static MethodHandle INDY_call2; + private static MethodHandle INDY_call2() throws Throwable { + if (INDY_call2 != null) + return INDY_call2; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(int.class, Object.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public boolean run() throws Throwable { + setDebuggeeClassName("L" + INDIFY_Test.class.getName().replace('.', '/') + ";"); + setDebuggeeMethodName("target"); + + Object o = new Object(); + String s = "heaven"; + int i = 789; + + // When agent is loaded and correctly working, every call to target() should return 0 + // (without agent target() returns 3rd argument) + // so the sum variable should be 0 at every moment + getLog().trace(0, "Call site 1"); + int sum = (int) INDY_call1().invokeExact(o, s, i); + for ( i = 0; i < 5; i++ ) { + getLog().trace(0, "Call site 2, sum=" + sum); + sum += (int) INDY_call2().invokeExact(o, s, i + 789); + } + getLog().trace(0, "Direct call, sum=" + sum); + sum += target(new Object(), "hell", 123); + + getLog().trace(0, "Done, sum=" + sum + " (should be 0)"); + + return checkStatus() && sum == 0; + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/libstepBreakPopReturn.c b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/libstepBreakPopReturn.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/libstepBreakPopReturn.c @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include "agent_common.c" +#include "native_thread.c" +#include "agent_tools.c" +#include "JVMTITools.c" +#include "nsk_tools.c" +#include "jni_tools.c" +#include "jvmti_tools.c" +#include "mlvmJvmtiUtils.c" +#include "stepBreakPopReturn.c" diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/stepBreakPopReturn.c b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/stepBreakPopReturn.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/stepBreakPopReturn.c @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include +#include "jvmti.h" +#include "agent_common.h" +#include "JVMTITools.h" +#include "jvmti_tools.h" +#include "mlvmJvmtiUtils.h" + +static jvmtiEnv* gJvmtiEnv = NULL; + +static char * gszDebuggeeMethodName = "NONE"; +static char * gszDebuggeeClassName = "NONE"; +static jboolean gIsMethodEntryWorking = JNI_FALSE; +static jboolean gIsSingleStepWorking = JNI_FALSE; +static jboolean gIsBreakpointWorking = JNI_FALSE; + +static jboolean gIsBreakpointSet = JNI_FALSE; +static jboolean gIsFirstCall = JNI_TRUE; +static jboolean gIsDebuggerCompatible = JNI_FALSE; + +JNIEXPORT void JNICALL +Java_vm_mlvm_indy_func_jvmti_stepBreakPopReturn_INDIFY_1Test_setDebuggeeMethodName(JNIEnv * pEnv, jclass clazz, jstring name) { + copyFromJString(pEnv, name, &gszDebuggeeMethodName); + NSK_DISPLAY1("Setting debuggee method name to %s\n", gszDebuggeeMethodName); +} + +JNIEXPORT void JNICALL +Java_vm_mlvm_indy_func_jvmti_stepBreakPopReturn_INDIFY_1Test_setDebuggeeClassName(JNIEnv * pEnv, jclass clazz, jstring name) { + copyFromJString(pEnv, name, &gszDebuggeeClassName); + NSK_DISPLAY1("Setting debuggee class name to %s\n", gszDebuggeeClassName); +} + +JNIEXPORT jboolean JNICALL +Java_vm_mlvm_indy_func_jvmti_stepBreakPopReturn_INDIFY_1Test_checkStatus(JNIEnv * pEnv, jclass clazz) { + NSK_DISPLAY1("Are we running in debugger-compatible mode? %i\n", gIsDebuggerCompatible); + NSK_DISPLAY0("The following values should be non-zero for test to pass:\n"); + NSK_DISPLAY1("Method entry event fired? %i\n", gIsMethodEntryWorking); + NSK_DISPLAY1("Single step event fired? %i\n", gIsSingleStepWorking); + if ( ! gIsDebuggerCompatible ) + NSK_DISPLAY1("Breakpoint event fired? %i\n", gIsBreakpointWorking); + + return gIsMethodEntryWorking && gIsSingleStepWorking && (gIsBreakpointWorking || gIsDebuggerCompatible); +} + +static void JNICALL +MethodEntry(jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method) { + + struct MethodName * mn; + + mn = getMethodName(jvmti_env, method); + if ( ! mn ) + return; + + if ( strcmp(mn->classSig, gszDebuggeeClassName) == 0 ) { + NSK_DISPLAY2("Entering method: %s.%s\n", mn->classSig, mn->methodName); + + if ( strcmp(mn->methodName, gszDebuggeeMethodName) == 0 ) { + gIsMethodEntryWorking = JNI_TRUE; + + if ( ! gIsBreakpointSet ) + NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, JVMTI_ENABLE, JVMTI_EVENT_SINGLE_STEP, NULL)); + } + } + + free(mn); +} + +static void JNICALL +SingleStep(jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method, + jlocation location) { + + char * locStr; + gIsSingleStepWorking = JNI_TRUE; + + locStr = locationToString(jvmti_env, method, location); + NSK_DISPLAY1("Single step event: %s\n", locStr); + free(locStr); + + NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, gJvmtiEnv, JVMTI_DISABLE, JVMTI_EVENT_SINGLE_STEP, NULL)); + + if ( ! gIsDebuggerCompatible ) { + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetBreakpoint, jvmti_env, method, location)) ) + return; + + NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, gJvmtiEnv, JVMTI_ENABLE, JVMTI_EVENT_BREAKPOINT, NULL)); + gIsBreakpointSet = JNI_TRUE; + + NSK_DISPLAY0("Pop a frame\n"); + NSK_JVMTI_VERIFY(NSK_CPP_STUB2(PopFrame, gJvmtiEnv, thread)); + } else { + if ( gIsFirstCall ) { + NSK_DISPLAY0("Pop a frame\n"); + NSK_JVMTI_VERIFY(NSK_CPP_STUB2(PopFrame, gJvmtiEnv, thread)); + gIsFirstCall = JNI_FALSE; + } else { + gIsFirstCall = JNI_TRUE; + } + } +} + +static void JNICALL +Breakpoint(jvmtiEnv *jvmti_env, + JNIEnv* jni_env, + jthread thread, + jmethodID method, + jlocation location) { + + + char * locStr; + gIsBreakpointWorking = JNI_TRUE; + + locStr = locationToString(jvmti_env, method, location); + NSK_DISPLAY1("Breakpoint event at: %s\n", locStr); + free(locStr); + + NSK_JVMTI_VERIFY(NSK_CPP_STUB3(ClearBreakpoint, jvmti_env, method, location)); + NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, gJvmtiEnv, JVMTI_DISABLE, JVMTI_EVENT_BREAKPOINT, NULL)); + gIsBreakpointSet = JNI_FALSE; + + NSK_DISPLAY0("Forcing early return.\n"); + NSK_JVMTI_VERIFY(NSK_CPP_STUB3(ForceEarlyReturnInt, jvmti_env, thread, 0)); +} + +jint Agent_Initialize(JavaVM * vm, char * options, void * reserved) { + jvmtiEventCallbacks callbacks; + jvmtiCapabilities caps; + + if ( ! NSK_VERIFY(nsk_jvmti_parseOptions(options)) ) + return JNI_ERR; + + if ( ! NSK_VERIFY((gJvmtiEnv = nsk_jvmti_createJVMTIEnv(vm, reserved)) != NULL) ) + return JNI_ERR; + + if ( nsk_jvmti_findOptionValue("debuggerCompatible") ) { + gIsDebuggerCompatible = JNI_TRUE; + } + + memset(&caps, 0, sizeof(caps)); + caps.can_generate_method_entry_events = 1; + caps.can_generate_single_step_events = 1; + caps.can_generate_breakpoint_events = ! gIsDebuggerCompatible; + caps.can_pop_frame = 1; + caps.can_force_early_return = 1; + + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB2(AddCapabilities, gJvmtiEnv, &caps)) ) + return JNI_ERR; + + memset(&callbacks, 0, sizeof(callbacks)); + callbacks.MethodEntry = &MethodEntry; + callbacks.SingleStep = &SingleStep; + callbacks.Breakpoint = &Breakpoint; + + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetEventCallbacks, gJvmtiEnv, &callbacks, sizeof(callbacks))) ) + return JNI_ERR; + + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, gJvmtiEnv, JVMTI_ENABLE, JVMTI_EVENT_METHOD_ENTRY, NULL) ) ) + return JNI_ERR; + + return JNI_OK; +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/CallSiteDekkerActor.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/CallSiteDekkerActor.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/CallSiteDekkerActor.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.share; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.CallSite; +import vm.mlvm.share.DekkerTest; + +/** + * The class implements Actor for {@link vm.mlvm.share.DekkerTest}. + *

+ * This Actor switches targets for CallSite objects supplied in constructor. + * Targets are method handles, generated with MethodHandle.constant(), which return true or false. + * CallSite.setTarget() is used for setting appropriate target. + * CallSite.dynamicInvoker().invokeExact() is used to detect which target is currently set. + * No synchronization is used between setter and getter (see {@link vm.mlvm.share.DekkerTest} for details). + * + * @see vm.mlvm.share.DekkerTest + */ +public class CallSiteDekkerActor implements DekkerTest.Actor { + + public static final MethodHandle MH_FALSE = MethodHandles.constant(Boolean.class, false); + public static final MethodHandle MH_TRUE = MethodHandles.constant(Boolean.class, true); + + private final CallSite a; + private final CallSite b; + + public CallSiteDekkerActor(CallSite csa, CallSite csb) { + a = csa; + b = csb; + } + + @Override + public void reset() { + a.setTarget(MH_FALSE); + b.setTarget(MH_FALSE); + } + + @Override + public boolean actorA() throws Throwable { + a.setTarget(MH_TRUE); + return (Boolean) b.dynamicInvoker().invokeExact(); + } + + @Override + public boolean actorB() throws Throwable { + b.setTarget(MH_TRUE); + return (Boolean) a.dynamicInvoker().invokeExact(); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/INDIFY_RelinkCallSiteFreqTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/INDIFY_RelinkCallSiteFreqTest.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/INDIFY_RelinkCallSiteFreqTest.java @@ -0,0 +1,243 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.share; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.CyclicBarrier; + +import nsk.share.test.Stresser; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; +import vm.share.options.Option; + +/** + * The test creates a call site (the call site is supplied by subclass) + * and relinks it from one thread while calling the current + * target from the other one. Currently there are 6 targets. + + * The test verifies that target changes in the call site are eventually seen by target calling + * thread by measuring a frequency of calls for each target and comparing it with theoretical frequency. + * + */ +public abstract class INDIFY_RelinkCallSiteFreqTest extends MlvmTest { + private static final int MEASUREMENT_THREADS = Math.max(2, Runtime.getRuntime().availableProcessors() - 1); + private static final double MAX_FREQ_DIFFERENCE = 0.01; + private static CallSite cs; + + private volatile boolean testDone = false; + + @Option(name = "iterations", default_value = "100000", description = "Iterations, each iteration does call site relinking") + private int iterations = 100_000; + + /** + * Provides a call site to test. + * @param mh MethodHandle to link the new call site to + * @return CallSite A new call site linked to MethodHandle supplied in the argument + */ + protected abstract CallSite createCallSite(MethodHandle mh); + + @Override + public boolean run() throws Throwable { + // Create targets and call site + Target[] targets = Target.createTargets(MethodHandles.lookup(), this); + // TODO: find a way to make cs a non-static field + cs = createCallSite(targets[0].mh); + + // Call BSM + indyWrapper(); + + // Start call site altering thread + final FreqMeasurementThread[] csaThread = new FreqMeasurementThread[MEASUREMENT_THREADS]; + final CyclicBarrier startBarrier = new CyclicBarrier(MEASUREMENT_THREADS + 1); + for (int i = 0; i < MEASUREMENT_THREADS; ++i) { + csaThread[i] = new FreqMeasurementThread(startBarrier, this, targets.length); + csaThread[i].start(); + } + + // Start calling invokedynamic + Stresser stresser = createStresser(); + stresser.start(iterations); + try { + int curTarget = 0; + startBarrier.await(); + + while (stresser.continueExecution()) { + stresser.iteration(); + + Env.traceDebug("Setting new target: " + curTarget); + targets[curTarget].run(cs); + if (++curTarget >= targets.length) { + curTarget = 0; + } + } + + } finally { + stresser.finish(); + testDone = true; + } + + long totalCalls = 0L; + long[] callHistogram = new long[targets.length]; + for (int i = 0; i < csaThread.length; ++i) { + csaThread[i].join(); + totalCalls += csaThread[i].totalCalls; + long[] threadCallHistogram = csaThread[i].callHistogram; + assert threadCallHistogram.length == callHistogram.length; + for (int t = 0; t < callHistogram.length; ++t) { + callHistogram[t] += threadCallHistogram[t]; + } + } + + Env.traceNormal("Targets called " + totalCalls + " times"); + + for (int i = 0; i < callHistogram.length; ++i) { + float measuredFreq = (float) callHistogram[i] / totalCalls; + float theoreticalFreq = (float) targets[i].delay / Target.TOTAL_DELAY; + + boolean freqIsOK = Math.abs(measuredFreq - theoreticalFreq) < MAX_FREQ_DIFFERENCE; + String msg = String.format("Target %d: theoretical freq=%f; measured freq=%f; called %d times %s", + i, theoreticalFreq, measuredFreq, callHistogram[i], freqIsOK ? " [OK]" : " [BAD, but acceptable: difference is too big]"); + + // This test used to fail due to OS scheduler + // so it was refactored to just a stress test which doesn't fail if the frequency is wrong + if (!freqIsOK) { + Env.complain(msg); + } else { + Env.traceNormal(msg); + } + } + + return true; + } + + private static class Target { + // TODO: nanosleep? + private static final long[] DELAYS = new long[] { 1L, 3L, 5L, 7L, 9L, 11L }; + public static final long TOTAL_DELAY; + static { + long total = 0L; + for (long i : DELAYS) { + total += i; + } + TOTAL_DELAY = total; + } + public static Target[] createTargets(MethodHandles.Lookup lookup, INDIFY_RelinkCallSiteFreqTest test) { + Target[] result = new Target[DELAYS.length]; + MethodHandle targetMH; + try { + targetMH = lookup.findVirtual(INDIFY_RelinkCallSiteFreqTest.class, "target", MethodType.methodType(int.class, int.class)); + } catch (NoSuchMethodException | IllegalAccessException e) { + throw new Error(e); + } + for (int i = 0; i < result.length; ++i) { + result[i] = new Target(DELAYS[i], MethodHandles.insertArguments(targetMH, 0, test, i)); + } + return result; + } + + public final long delay; + public final MethodHandle mh; + public Target(long delay, MethodHandle mh) { + this.delay = delay; + this.mh = mh; + } + public void run(CallSite cs) throws InterruptedException { + cs.setTarget(mh); + Thread.sleep(delay); + } + } + + private static class FreqMeasurementThread extends Thread { + final long[] callHistogram; + long totalCalls = 0L; + + private final CyclicBarrier startBarrier; + private final INDIFY_RelinkCallSiteFreqTest test; + + public FreqMeasurementThread(CyclicBarrier startBarrier, INDIFY_RelinkCallSiteFreqTest test, int targetCount) { + setName(getClass().getSimpleName()); + this.startBarrier = startBarrier; + this.test = test; + callHistogram = new long[targetCount]; + } + + @Override + public void run() { + try { + startBarrier.await(); + + while (!test.testDone) { + int n = indyWrapper(); + ++callHistogram[n]; + ++totalCalls; + Env.traceDebug("Called target: " + n); + + Thread.yield(); + } + } catch (BrokenBarrierException e) { + test.markTestFailed("TEST BUG: start barrier is not working", e); + } catch (Throwable t) { + test.markTestFailed("Exception in thread " + getName(), t); + } + } + } + + // BSM + target + + private static MethodType MT_bootstrap() { + return MethodType.methodType(Object.class, MethodHandles.Lookup.class, String.class, MethodType.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic(INDIFY_RelinkCallSiteFreqTest.class, "bootstrap", MT_bootstrap()); + } + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) { + return INDY_call; + } + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MethodType.methodType(int.class)); + return cs.dynamicInvoker(); + } + + public static int indyWrapper() throws Throwable { + return (int) INDY_call().invokeExact(); + } + + private static Object bootstrap(MethodHandles.Lookup l, String n, MethodType t) throws Throwable { + Env.traceVerbose("Bootstrap called"); + return INDIFY_RelinkCallSiteFreqTest.cs; + } + + private int target(int n) { + return n; + } + + // End BSM + target +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/INDIFY_RelinkCallSiteTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/INDIFY_RelinkCallSiteTest.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/INDIFY_RelinkCallSiteTest.java @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.share; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.CyclicBarrier; + +import nsk.share.test.Stresser; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; + +public abstract class INDIFY_RelinkCallSiteTest extends MlvmTest { + + private static final int TARGET_COUNT = 1000000; + private static final int ARTIFICALLY_LOST_SYNC_PERIOD = 1000; + private static final CyclicBarrier startBarrier = new CyclicBarrier(2); + + /** + * This class is used for synchronization between threads during relinking. + * + * We don't use volatile, synchronized(), or java.util.concurrent stuff + * to avoid artificial ordering across threads, except the one introduced by java.lang.invoke + * package itself. + * + * The variable is placed inside an array to make sure that it would occupy + * a separate CPU cache line than the CallSite. + * + * value < 0 and -value == previous-call-site-num: test in call site changing thread + * value > 0 and value == current-call-site-num: test in target (invokedynamic) calling thread + * value == 0: test is done, all threads must exit + */ + static class Sync { + int[] sync = new int[64]; + + int get() { + return this.sync[32]; + } + + void put (int v) { + this.sync[32] = v; + } + } + + static Sync syncTargetNum = new Sync(); + static CallSite cs; + static MethodHandle[] targets = new MethodHandle[TARGET_COUNT]; + + protected abstract CallSite createCallSite(MethodHandle mh); + + @Override + public boolean run() throws Throwable { + // Create targets + MethodHandle targetMH = MethodHandles.lookup().findVirtual(INDIFY_RelinkCallSiteTest.class, "target", MethodType.methodType(int.class, int.class)); + for (int i = 0; i < TARGET_COUNT; i++) + INDIFY_RelinkCallSiteTest.targets[i] = MethodHandles.insertArguments(targetMH, 0, this, i); + + // Set current target number + INDIFY_RelinkCallSiteTest.syncTargetNum.put(1); + + // Create call site + INDIFY_RelinkCallSiteTest.cs = createCallSite(INDIFY_RelinkCallSiteTest.targets[INDIFY_RelinkCallSiteTest.syncTargetNum.get()]); + + // Call BSM + indyWrapper(); + + // Start call site altering thread + CallSiteAlteringThread csaThread = new CallSiteAlteringThread(); + csaThread.setDaemon(true); + csaThread.start(); + + try { + // Start calling invokedynamic + Stresser stresser = createStresser(); + stresser.start(1); + try { + int lastTargetNum = INDIFY_RelinkCallSiteTest.syncTargetNum.get(); + int curTargetNum; + + INDIFY_RelinkCallSiteTest.startBarrier.await(); + + while (stresser.continueExecution()) { + stresser.iteration(); + + curTargetNum = indyWrapper(); + + // This test used to fail due to OS scheduler + // so it was refactored to just a stress test which doesn't fail if the frequency is wrong + boolean artificallyLostSync = lastTargetNum % ARTIFICALLY_LOST_SYNC_PERIOD == 0; + if (lastTargetNum == curTargetNum) { + Env.traceDebug("Target " + curTargetNum + " called: OK"); + if (artificallyLostSync) { + Env.complain("Test bug: invoked target (" + curTargetNum + ") should not match the one in CallSite (" + lastTargetNum + ")"); + } + } else { + if (artificallyLostSync) { + // That's OK + } else { + Env.complain("Invoked target number (" + curTargetNum + ") does not match the one in CallSite (" + lastTargetNum + ")"); + } + + // OK, let's continue anyway + lastTargetNum = INDIFY_RelinkCallSiteTest.syncTargetNum.get(); + } + + // Synchronize without any "special" synchronization means + int syncCycles = 0; + INDIFY_RelinkCallSiteTest.syncTargetNum.put(-lastTargetNum); + while (INDIFY_RelinkCallSiteTest.syncTargetNum.get() < 0) { + Thread.yield(); + curTargetNum = indyWrapper(); + syncCycles++; + + if (syncCycles % 100000 == 0) { + Env.traceDebug("Waiting for change: target " + curTargetNum + " called " + syncCycles + " times"); + } + + if (curTargetNum > lastTargetNum) { + Env.traceDebug("Target changed but not yet signalled to me: curTargetNum (" + curTargetNum + ") > lastTargetNum (" + lastTargetNum + ")"); + } else if (curTargetNum < lastTargetNum && !artificallyLostSync) { + Env.complain("Synchronization lost again: curTargetNum (" + curTargetNum + ") < lastTargetNum (" + lastTargetNum + ")"); + } + } + + lastTargetNum = INDIFY_RelinkCallSiteTest.syncTargetNum.get(); + if (lastTargetNum == 0) { + stresser.forceFinish(); + } + } + + } finally { + stresser.finish(); + } + } finally { + INDIFY_RelinkCallSiteTest.syncTargetNum.put(0); + } + + // Return false + return true; + // (Never trust comments :) + } + + static class CallSiteAlteringThread extends Thread { + @Override + public void run() { + int curTargetNum = INDIFY_RelinkCallSiteTest.syncTargetNum.get(); + + try { + INDIFY_RelinkCallSiteTest.startBarrier.await(); + } catch ( BrokenBarrierException e ) { + Env.complain(e, "Test bug: start barrier is not working"); + } catch ( InterruptedException leave ) { + return; + } + + while ( INDIFY_RelinkCallSiteTest.syncTargetNum.get() != 0 ) { + while ( INDIFY_RelinkCallSiteTest.syncTargetNum.get() != -curTargetNum ) + Thread.yield(); + + curTargetNum++; + if ( curTargetNum >= TARGET_COUNT ) { + INDIFY_RelinkCallSiteTest.syncTargetNum.put(0); + break; + } + + Env.traceDebug("Setting new target: " + curTargetNum); + // TODO: Check this and next line ordering in JMM + if ( curTargetNum % ARTIFICALLY_LOST_SYNC_PERIOD != 0 ) + INDIFY_RelinkCallSiteTest.cs.setTarget(INDIFY_RelinkCallSiteTest.targets[curTargetNum]); + INDIFY_RelinkCallSiteTest.syncTargetNum.put(curTargetNum); + } + } + } + + // BSM + target + + private static MethodType MT_bootstrap() { + return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic(INDIFY_RelinkCallSiteTest.class, "bootstrap", MT_bootstrap()); + } + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) { + return INDY_call; + } + CallSite cs = (CallSite) MH_bootstrap ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MethodType.methodType(int.class)); + return cs.dynamicInvoker(); + } + + public static int indyWrapper() throws Throwable { + return (int) INDY_call().invokeExact(); + } + + private static Object bootstrap (Object l, Object n, Object t) throws Throwable { + Env.traceVerbose("Bootstrap called"); + return INDIFY_RelinkCallSiteTest.cs; + } + + private int target(int n) { + return n; + } + + // End BSM + target +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/INDIFY_Testee.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/INDIFY_Testee.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/INDIFY_Testee.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.stress.gc.lotsOfCallSites; + +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; +import java.lang.ref.PhantomReference; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.util.HashSet; + +import vm.mlvm.share.Env; + +/** + * Testee class, which records calls to bootstrap, target methods and adds callsite created + * in the bootstrap to reference queue {@link #objQueue} and references set {@link #references} + */ +public class INDIFY_Testee { + /** + * Set to true, when bootstrap method is called + */ + public static boolean bootstrapCalled = false; + /** + * Set to true when target method is called + */ + public static boolean targetCalled = false; + + /** + * Should be set by the test before call to {@link #indyWrapper()} + * A reference to the call site created in bootstrap method is added to this set. + */ + public static HashSet> references; + + /** + * Should be set by the test before call to {@link #indyWrapper()} + * A reference to the call site created in bootstrap method is added to this queue. + */ + public static ReferenceQueue objQueue; + + private static MethodType MT_bootstrap() { + return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic(INDIFY_Testee.class, "bootstrap", MT_bootstrap()); + } + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) { + return INDY_call; + } + CallSite cs = (CallSite) MH_bootstrap ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_target()); + return cs.dynamicInvoker(); + } + + /** + * Calls invokedynamic instruction + */ + public static void indyWrapper() throws Throwable { + INDY_call().invokeExact(); + } + + private static Object bootstrap(Object l, Object n, Object t) throws Throwable { + Env.traceDebug("Bootstrap called"); + bootstrapCalled = true; + CallSite cs = new ConstantCallSite(MethodHandles.lookup().findStatic(INDIFY_Testee.class, "target", MT_target())); + references.add(new PhantomReference(cs, objQueue)); + return cs; + } + + private static MethodType MT_target() { + return MethodType.methodType(void.class); + } + + private static void target() { + Env.traceDebug("Target called"); + targetCalled = true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/Test.java @@ -0,0 +1,247 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/stress/gc/lotsOfCallSites. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * @build sun.hotspot.WhiteBox + * @run driver ClassFileInstaller sun.hotspot.WhiteBox + * sun.hotspot.WhiteBox$WhiteBoxPermission + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.stress.gc.lotsOfCallSites.Test + * vm.mlvm.indy.stress.gc.lotsOfCallSites.INDIFY_Testee + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm -Xbootclasspath/a:. + * -XX:+UnlockDiagnosticVMOptions + * -XX:+WhiteBoxAPI + * vm.mlvm.indy.stress.gc.lotsOfCallSites.Test + */ + +package vm.mlvm.indy.stress.gc.lotsOfCallSites; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodType; +import java.lang.ref.PhantomReference; +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; +import java.lang.management.MemoryMXBean; +import java.lang.management.MemoryPoolMXBean; +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryUsage; +import java.util.HashSet; + +import nsk.share.test.Stresser; +import vm.mlvm.share.CustomClassLoaders; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; +import vm.mlvm.share.WhiteBoxHelper; +import vm.share.FileUtils; +import vm.share.options.Option; + +/** + * The test creates a lot of CallSites by loading a class with a bootstrap method and invokedynamic + * via a custom classloader in a loop. + * + * The test verifies that all CallSites are "delivered to heaven" by creating a PhantomReference per + * a CallSite and checking the number of references put into a queue. + * + */ +public class Test extends MlvmTest { + + // TODO (separate bug should be filed): move this option to MlvmTest level + @Option(name = "heapdump", default_value = "false", description = "Dump heap after test has finished") + private boolean heapDumpOpt = false; + + @Option(name = "iterations", default_value = "100000", description = "Iterations: each iteration loads one new class") + private int iterations = 100_000; + + private static final int GC_COUNT = 6; + private static final boolean TERMINATE_ON_FULL_METASPACE = false; + + private static final ReferenceQueue objQueue = new ReferenceQueue(); + private static final HashSet> references = new HashSet>(); + private static long loadedClassCount = 0; + + // We avoid direct references to the testee class to avoid loading it by application class loader + // Otherwise the testee class is loaded both by the custom and the application class loaders, + // and when java.lang.invoke.MH.COMPILE_THRESHOLD={0,1} is defined, the test fails with + // "java.lang.IncompatibleClassChangeError: disagree on InnerClasses attribute" + private static final String TESTEE_CLASS_NAME = Test.class.getPackage().getName() + "." + "INDIFY_Testee"; + private static final String TESTEE_REFERENCES_FIELD = "references"; + private static final String TESTEE_OBJQUEUE_FIELD = "objQueue"; + private static final String TESTEE_BOOTSTRAP_CALLED_FIELD = "bootstrapCalled"; + private static final String TESTEE_TARGET_CALLED_FIELD = "targetCalled"; + private static final String TESTEE_INDY_METHOD = "indyWrapper"; + + private static int removeQueuedReferences() { + int count = 0; + Reference r; + while ((r = objQueue.poll()) != null) { + if (!references.remove(r)) { + Env.traceNormal("Reference " + r + " was not registered!"); + } + ++count; + } + if (count > 0) { + Env.traceVerbose("Removed " + count + " phantom references"); + } else { + Env.traceDebug("Removed " + count + " phantom references"); + } + return count; + } + + private MemoryPoolMXBean getClassMetadataMemoryPoolMXBean() { + MemoryMXBean mbean = ManagementFactory.getMemoryMXBean(); + for (MemoryPoolMXBean memPool : ManagementFactory.getMemoryPoolMXBeans()) { + String name = memPool.getName(); + if ((name.contains("Compressed class space") || name.contains("Metaspace")) && memPool.getUsage() != null) { + return memPool; + } + } + return null; + } + + private MethodHandle getFullGCMethod() throws NoSuchMethodException, IllegalAccessException { + try { + return WhiteBoxHelper.getMethod("fullGC", MethodType.methodType(void.class)); + } catch (NoSuchMethodException | ClassNotFoundException | InvocationTargetException e) { + Env.traceDebug(e, "No WhiteBox API. Will use System.gc() instead of WhiteBox.fullGC()"); + return MethodHandles.lookup().findStatic(System.class, "gc", MethodType.methodType(void.class)); + } + } + + @Override + public boolean run() throws Throwable { + setHeapDumpAfter(heapDumpOpt); + + final byte[] classBytes = FileUtils.readClass(TESTEE_CLASS_NAME); + final MemoryPoolMXBean classMetadataPoolMXB = getClassMetadataMemoryPoolMXBean(); + final String memPoolName = classMetadataPoolMXB == null ? "" : classMetadataPoolMXB.getName(); + + MethodHandle mhCollectHeap = getFullGCMethod(); + + int removedEntries = 0; + + Stresser stresser = createStresser(); + stresser.start(iterations); + try { + while (stresser.continueExecution()) { + stresser.iteration(); + + iteration(classBytes, TESTEE_CLASS_NAME); + removedEntries += removeQueuedReferences(); + + if (stresser.getIteration() % 1000 == 0) { + Env.traceNormal("Iterations: " + stresser.getIteration() + " removed entries: " + removedEntries); + if (TERMINATE_ON_FULL_METASPACE && classMetadataPoolMXB != null) { + MemoryUsage mu = classMetadataPoolMXB.getUsage(); + Env.traceNormal(memPoolName + " usage: " + mu); + if (mu.getUsed() >= mu.getMax() * 9 / 10) { + Env.traceNormal(memPoolName + " is nearly out of space: " + mu + ". Terminating."); + break; + } + } + } + } + + } catch (OutOfMemoryError e) { + Env.traceNormal(e, "Out of memory. This is OK"); + } finally { + stresser.finish(); + } + + for (int i = 0; i < GC_COUNT; ++i) { + mhCollectHeap.invoke(); + Thread.sleep(500); + removedEntries += removeQueuedReferences(); + } + + removedEntries += removeQueuedReferences(); + + Env.traceNormal("Loaded classes: " + loadedClassCount + + "; References left in set: " + references.size() + + "; References removed from queue: " + removedEntries); + + if (references.size() != 0 || removedEntries != loadedClassCount) { + Env.complain("Not all of the created CallSites were GC-ed"); + return false; + } + + return true; + } + + private void iteration(byte[] classBytes, String indyClassName) throws Throwable { + ClassLoader cl = CustomClassLoaders.makeClassBytesLoader(classBytes, indyClassName); + Class c = cl.loadClass(indyClassName); + ++loadedClassCount; + + if (c.getClassLoader() != cl) { + throw new RuntimeException("Invalid class loader: " + c.getClassLoader() + "; required=" + cl); + } + + Field vr = c.getDeclaredField(TESTEE_REFERENCES_FIELD); + vr.set(null, references); + + Field voq = c.getDeclaredField(TESTEE_OBJQUEUE_FIELD); + voq.set(null, objQueue); + + Field vbc = c.getDeclaredField(TESTEE_BOOTSTRAP_CALLED_FIELD); + if (vbc.getBoolean(null)) { + throw new RuntimeException(TESTEE_BOOTSTRAP_CALLED_FIELD + " flag should not be set. Not a fresh copy of the testee class?"); + } + + Field vt = c.getDeclaredField(TESTEE_TARGET_CALLED_FIELD); + if (vt.getBoolean(null)) { + throw new RuntimeException(TESTEE_TARGET_CALLED_FIELD + " flag should not be set. Not a fresh copy of the testee class?"); + } + + Method m = c.getDeclaredMethod(TESTEE_INDY_METHOD); + m.invoke(null); + + if (!vbc.getBoolean(null) ) { + throw new RuntimeException("Bootstrap method of the testee class was not called"); + } + + if (!vt.getBoolean(null) ) { + throw new RuntimeException("Target method of the testee class was not called"); + } + } + + public static void main(String[] args) { + MlvmTest.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/INDIFY_Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/INDIFY_Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/INDIFY_Test.java @@ -0,0 +1,13108 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// generated from vm/mlvm/indy/stress/java/loopsAndThreads/INDIFY_Test.jmpp + +package vm.mlvm.indy.stress.java.loopsAndThreads; + +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; +import java.util.concurrent.atomic.AtomicLong; + +import vm.mlvm.share.MlvmTest; +import vm.mlvm.share.Env; +import vm.mlvm.share.MultiThreadedTest; +import nsk.share.test.Stresser; +import nsk.share.Failure; + +public class INDIFY_Test extends MultiThreadedTest { + + private AtomicLong _counter = new AtomicLong(); + private AtomicLong _expectedTargetCalls = new AtomicLong(); + + public INDIFY_Test() { + super(); + } + + private static MethodType MT_bootstrap() { + return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); + } + + private static MethodHandle MH_bootstrap() throws Exception { + return MethodHandles.lookup().findStatic( + INDIFY_Test.class, + "bootstrap", + MT_bootstrap()); + } + + public static Object bootstrap(Object c, Object name, Object mt) throws Throwable { + Env.traceVerbose("bootstrap: Class " + c + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite( + MethodHandles.lookup().findVirtual( + INDIFY_Test.class, + "target", + MethodType.methodType(Object.class, String.class, int.class))); + return cs; + } + + public Object target(String s, int i) { + Env.traceDebug("target called"); + _counter.incrementAndGet(); + return null; + } + + private static MethodHandle INDY_call0; + private static MethodHandle INDY_call0 () throws Throwable { + if (INDY_call0 != null) + return INDY_call0; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call1; + private static MethodHandle INDY_call1 () throws Throwable { + if (INDY_call1 != null) + return INDY_call1; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call2; + private static MethodHandle INDY_call2 () throws Throwable { + if (INDY_call2 != null) + return INDY_call2; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call3; + private static MethodHandle INDY_call3 () throws Throwable { + if (INDY_call3 != null) + return INDY_call3; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call4; + private static MethodHandle INDY_call4 () throws Throwable { + if (INDY_call4 != null) + return INDY_call4; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call5; + private static MethodHandle INDY_call5 () throws Throwable { + if (INDY_call5 != null) + return INDY_call5; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call6; + private static MethodHandle INDY_call6 () throws Throwable { + if (INDY_call6 != null) + return INDY_call6; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call7; + private static MethodHandle INDY_call7 () throws Throwable { + if (INDY_call7 != null) + return INDY_call7; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call8; + private static MethodHandle INDY_call8 () throws Throwable { + if (INDY_call8 != null) + return INDY_call8; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call9; + private static MethodHandle INDY_call9 () throws Throwable { + if (INDY_call9 != null) + return INDY_call9; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call10; + private static MethodHandle INDY_call10 () throws Throwable { + if (INDY_call10 != null) + return INDY_call10; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call11; + private static MethodHandle INDY_call11 () throws Throwable { + if (INDY_call11 != null) + return INDY_call11; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call12; + private static MethodHandle INDY_call12 () throws Throwable { + if (INDY_call12 != null) + return INDY_call12; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call13; + private static MethodHandle INDY_call13 () throws Throwable { + if (INDY_call13 != null) + return INDY_call13; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call14; + private static MethodHandle INDY_call14 () throws Throwable { + if (INDY_call14 != null) + return INDY_call14; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call15; + private static MethodHandle INDY_call15 () throws Throwable { + if (INDY_call15 != null) + return INDY_call15; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call16; + private static MethodHandle INDY_call16 () throws Throwable { + if (INDY_call16 != null) + return INDY_call16; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call17; + private static MethodHandle INDY_call17 () throws Throwable { + if (INDY_call17 != null) + return INDY_call17; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call18; + private static MethodHandle INDY_call18 () throws Throwable { + if (INDY_call18 != null) + return INDY_call18; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call19; + private static MethodHandle INDY_call19 () throws Throwable { + if (INDY_call19 != null) + return INDY_call19; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call20; + private static MethodHandle INDY_call20 () throws Throwable { + if (INDY_call20 != null) + return INDY_call20; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call21; + private static MethodHandle INDY_call21 () throws Throwable { + if (INDY_call21 != null) + return INDY_call21; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call22; + private static MethodHandle INDY_call22 () throws Throwable { + if (INDY_call22 != null) + return INDY_call22; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call23; + private static MethodHandle INDY_call23 () throws Throwable { + if (INDY_call23 != null) + return INDY_call23; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call24; + private static MethodHandle INDY_call24 () throws Throwable { + if (INDY_call24 != null) + return INDY_call24; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call25; + private static MethodHandle INDY_call25 () throws Throwable { + if (INDY_call25 != null) + return INDY_call25; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call26; + private static MethodHandle INDY_call26 () throws Throwable { + if (INDY_call26 != null) + return INDY_call26; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call27; + private static MethodHandle INDY_call27 () throws Throwable { + if (INDY_call27 != null) + return INDY_call27; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call28; + private static MethodHandle INDY_call28 () throws Throwable { + if (INDY_call28 != null) + return INDY_call28; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call29; + private static MethodHandle INDY_call29 () throws Throwable { + if (INDY_call29 != null) + return INDY_call29; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call30; + private static MethodHandle INDY_call30 () throws Throwable { + if (INDY_call30 != null) + return INDY_call30; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call31; + private static MethodHandle INDY_call31 () throws Throwable { + if (INDY_call31 != null) + return INDY_call31; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call32; + private static MethodHandle INDY_call32 () throws Throwable { + if (INDY_call32 != null) + return INDY_call32; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call33; + private static MethodHandle INDY_call33 () throws Throwable { + if (INDY_call33 != null) + return INDY_call33; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call34; + private static MethodHandle INDY_call34 () throws Throwable { + if (INDY_call34 != null) + return INDY_call34; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call35; + private static MethodHandle INDY_call35 () throws Throwable { + if (INDY_call35 != null) + return INDY_call35; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call36; + private static MethodHandle INDY_call36 () throws Throwable { + if (INDY_call36 != null) + return INDY_call36; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call37; + private static MethodHandle INDY_call37 () throws Throwable { + if (INDY_call37 != null) + return INDY_call37; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call38; + private static MethodHandle INDY_call38 () throws Throwable { + if (INDY_call38 != null) + return INDY_call38; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call39; + private static MethodHandle INDY_call39 () throws Throwable { + if (INDY_call39 != null) + return INDY_call39; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call40; + private static MethodHandle INDY_call40 () throws Throwable { + if (INDY_call40 != null) + return INDY_call40; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call41; + private static MethodHandle INDY_call41 () throws Throwable { + if (INDY_call41 != null) + return INDY_call41; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call42; + private static MethodHandle INDY_call42 () throws Throwable { + if (INDY_call42 != null) + return INDY_call42; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call43; + private static MethodHandle INDY_call43 () throws Throwable { + if (INDY_call43 != null) + return INDY_call43; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call44; + private static MethodHandle INDY_call44 () throws Throwable { + if (INDY_call44 != null) + return INDY_call44; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call45; + private static MethodHandle INDY_call45 () throws Throwable { + if (INDY_call45 != null) + return INDY_call45; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call46; + private static MethodHandle INDY_call46 () throws Throwable { + if (INDY_call46 != null) + return INDY_call46; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call47; + private static MethodHandle INDY_call47 () throws Throwable { + if (INDY_call47 != null) + return INDY_call47; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call48; + private static MethodHandle INDY_call48 () throws Throwable { + if (INDY_call48 != null) + return INDY_call48; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call49; + private static MethodHandle INDY_call49 () throws Throwable { + if (INDY_call49 != null) + return INDY_call49; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call50; + private static MethodHandle INDY_call50 () throws Throwable { + if (INDY_call50 != null) + return INDY_call50; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call51; + private static MethodHandle INDY_call51 () throws Throwable { + if (INDY_call51 != null) + return INDY_call51; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call52; + private static MethodHandle INDY_call52 () throws Throwable { + if (INDY_call52 != null) + return INDY_call52; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call53; + private static MethodHandle INDY_call53 () throws Throwable { + if (INDY_call53 != null) + return INDY_call53; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call54; + private static MethodHandle INDY_call54 () throws Throwable { + if (INDY_call54 != null) + return INDY_call54; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call55; + private static MethodHandle INDY_call55 () throws Throwable { + if (INDY_call55 != null) + return INDY_call55; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call56; + private static MethodHandle INDY_call56 () throws Throwable { + if (INDY_call56 != null) + return INDY_call56; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call57; + private static MethodHandle INDY_call57 () throws Throwable { + if (INDY_call57 != null) + return INDY_call57; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call58; + private static MethodHandle INDY_call58 () throws Throwable { + if (INDY_call58 != null) + return INDY_call58; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call59; + private static MethodHandle INDY_call59 () throws Throwable { + if (INDY_call59 != null) + return INDY_call59; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call60; + private static MethodHandle INDY_call60 () throws Throwable { + if (INDY_call60 != null) + return INDY_call60; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call61; + private static MethodHandle INDY_call61 () throws Throwable { + if (INDY_call61 != null) + return INDY_call61; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call62; + private static MethodHandle INDY_call62 () throws Throwable { + if (INDY_call62 != null) + return INDY_call62; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call63; + private static MethodHandle INDY_call63 () throws Throwable { + if (INDY_call63 != null) + return INDY_call63; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call64; + private static MethodHandle INDY_call64 () throws Throwable { + if (INDY_call64 != null) + return INDY_call64; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call65; + private static MethodHandle INDY_call65 () throws Throwable { + if (INDY_call65 != null) + return INDY_call65; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call66; + private static MethodHandle INDY_call66 () throws Throwable { + if (INDY_call66 != null) + return INDY_call66; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call67; + private static MethodHandle INDY_call67 () throws Throwable { + if (INDY_call67 != null) + return INDY_call67; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call68; + private static MethodHandle INDY_call68 () throws Throwable { + if (INDY_call68 != null) + return INDY_call68; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call69; + private static MethodHandle INDY_call69 () throws Throwable { + if (INDY_call69 != null) + return INDY_call69; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call70; + private static MethodHandle INDY_call70 () throws Throwable { + if (INDY_call70 != null) + return INDY_call70; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call71; + private static MethodHandle INDY_call71 () throws Throwable { + if (INDY_call71 != null) + return INDY_call71; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call72; + private static MethodHandle INDY_call72 () throws Throwable { + if (INDY_call72 != null) + return INDY_call72; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call73; + private static MethodHandle INDY_call73 () throws Throwable { + if (INDY_call73 != null) + return INDY_call73; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call74; + private static MethodHandle INDY_call74 () throws Throwable { + if (INDY_call74 != null) + return INDY_call74; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call75; + private static MethodHandle INDY_call75 () throws Throwable { + if (INDY_call75 != null) + return INDY_call75; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call76; + private static MethodHandle INDY_call76 () throws Throwable { + if (INDY_call76 != null) + return INDY_call76; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call77; + private static MethodHandle INDY_call77 () throws Throwable { + if (INDY_call77 != null) + return INDY_call77; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call78; + private static MethodHandle INDY_call78 () throws Throwable { + if (INDY_call78 != null) + return INDY_call78; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call79; + private static MethodHandle INDY_call79 () throws Throwable { + if (INDY_call79 != null) + return INDY_call79; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call80; + private static MethodHandle INDY_call80 () throws Throwable { + if (INDY_call80 != null) + return INDY_call80; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call81; + private static MethodHandle INDY_call81 () throws Throwable { + if (INDY_call81 != null) + return INDY_call81; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call82; + private static MethodHandle INDY_call82 () throws Throwable { + if (INDY_call82 != null) + return INDY_call82; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call83; + private static MethodHandle INDY_call83 () throws Throwable { + if (INDY_call83 != null) + return INDY_call83; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call84; + private static MethodHandle INDY_call84 () throws Throwable { + if (INDY_call84 != null) + return INDY_call84; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call85; + private static MethodHandle INDY_call85 () throws Throwable { + if (INDY_call85 != null) + return INDY_call85; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call86; + private static MethodHandle INDY_call86 () throws Throwable { + if (INDY_call86 != null) + return INDY_call86; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call87; + private static MethodHandle INDY_call87 () throws Throwable { + if (INDY_call87 != null) + return INDY_call87; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call88; + private static MethodHandle INDY_call88 () throws Throwable { + if (INDY_call88 != null) + return INDY_call88; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call89; + private static MethodHandle INDY_call89 () throws Throwable { + if (INDY_call89 != null) + return INDY_call89; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call90; + private static MethodHandle INDY_call90 () throws Throwable { + if (INDY_call90 != null) + return INDY_call90; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call91; + private static MethodHandle INDY_call91 () throws Throwable { + if (INDY_call91 != null) + return INDY_call91; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call92; + private static MethodHandle INDY_call92 () throws Throwable { + if (INDY_call92 != null) + return INDY_call92; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call93; + private static MethodHandle INDY_call93 () throws Throwable { + if (INDY_call93 != null) + return INDY_call93; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call94; + private static MethodHandle INDY_call94 () throws Throwable { + if (INDY_call94 != null) + return INDY_call94; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call95; + private static MethodHandle INDY_call95 () throws Throwable { + if (INDY_call95 != null) + return INDY_call95; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call96; + private static MethodHandle INDY_call96 () throws Throwable { + if (INDY_call96 != null) + return INDY_call96; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call97; + private static MethodHandle INDY_call97 () throws Throwable { + if (INDY_call97 != null) + return INDY_call97; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call98; + private static MethodHandle INDY_call98 () throws Throwable { + if (INDY_call98 != null) + return INDY_call98; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call99; + private static MethodHandle INDY_call99 () throws Throwable { + if (INDY_call99 != null) + return INDY_call99; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call100; + private static MethodHandle INDY_call100 () throws Throwable { + if (INDY_call100 != null) + return INDY_call100; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call101; + private static MethodHandle INDY_call101 () throws Throwable { + if (INDY_call101 != null) + return INDY_call101; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call102; + private static MethodHandle INDY_call102 () throws Throwable { + if (INDY_call102 != null) + return INDY_call102; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call103; + private static MethodHandle INDY_call103 () throws Throwable { + if (INDY_call103 != null) + return INDY_call103; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call104; + private static MethodHandle INDY_call104 () throws Throwable { + if (INDY_call104 != null) + return INDY_call104; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call105; + private static MethodHandle INDY_call105 () throws Throwable { + if (INDY_call105 != null) + return INDY_call105; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call106; + private static MethodHandle INDY_call106 () throws Throwable { + if (INDY_call106 != null) + return INDY_call106; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call107; + private static MethodHandle INDY_call107 () throws Throwable { + if (INDY_call107 != null) + return INDY_call107; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call108; + private static MethodHandle INDY_call108 () throws Throwable { + if (INDY_call108 != null) + return INDY_call108; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call109; + private static MethodHandle INDY_call109 () throws Throwable { + if (INDY_call109 != null) + return INDY_call109; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call110; + private static MethodHandle INDY_call110 () throws Throwable { + if (INDY_call110 != null) + return INDY_call110; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call111; + private static MethodHandle INDY_call111 () throws Throwable { + if (INDY_call111 != null) + return INDY_call111; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call112; + private static MethodHandle INDY_call112 () throws Throwable { + if (INDY_call112 != null) + return INDY_call112; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call113; + private static MethodHandle INDY_call113 () throws Throwable { + if (INDY_call113 != null) + return INDY_call113; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call114; + private static MethodHandle INDY_call114 () throws Throwable { + if (INDY_call114 != null) + return INDY_call114; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call115; + private static MethodHandle INDY_call115 () throws Throwable { + if (INDY_call115 != null) + return INDY_call115; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call116; + private static MethodHandle INDY_call116 () throws Throwable { + if (INDY_call116 != null) + return INDY_call116; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call117; + private static MethodHandle INDY_call117 () throws Throwable { + if (INDY_call117 != null) + return INDY_call117; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call118; + private static MethodHandle INDY_call118 () throws Throwable { + if (INDY_call118 != null) + return INDY_call118; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call119; + private static MethodHandle INDY_call119 () throws Throwable { + if (INDY_call119 != null) + return INDY_call119; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call120; + private static MethodHandle INDY_call120 () throws Throwable { + if (INDY_call120 != null) + return INDY_call120; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call121; + private static MethodHandle INDY_call121 () throws Throwable { + if (INDY_call121 != null) + return INDY_call121; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call122; + private static MethodHandle INDY_call122 () throws Throwable { + if (INDY_call122 != null) + return INDY_call122; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call123; + private static MethodHandle INDY_call123 () throws Throwable { + if (INDY_call123 != null) + return INDY_call123; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call124; + private static MethodHandle INDY_call124 () throws Throwable { + if (INDY_call124 != null) + return INDY_call124; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call125; + private static MethodHandle INDY_call125 () throws Throwable { + if (INDY_call125 != null) + return INDY_call125; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call126; + private static MethodHandle INDY_call126 () throws Throwable { + if (INDY_call126 != null) + return INDY_call126; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call127; + private static MethodHandle INDY_call127 () throws Throwable { + if (INDY_call127 != null) + return INDY_call127; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call128; + private static MethodHandle INDY_call128 () throws Throwable { + if (INDY_call128 != null) + return INDY_call128; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call129; + private static MethodHandle INDY_call129 () throws Throwable { + if (INDY_call129 != null) + return INDY_call129; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call130; + private static MethodHandle INDY_call130 () throws Throwable { + if (INDY_call130 != null) + return INDY_call130; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call131; + private static MethodHandle INDY_call131 () throws Throwable { + if (INDY_call131 != null) + return INDY_call131; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call132; + private static MethodHandle INDY_call132 () throws Throwable { + if (INDY_call132 != null) + return INDY_call132; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call133; + private static MethodHandle INDY_call133 () throws Throwable { + if (INDY_call133 != null) + return INDY_call133; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call134; + private static MethodHandle INDY_call134 () throws Throwable { + if (INDY_call134 != null) + return INDY_call134; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call135; + private static MethodHandle INDY_call135 () throws Throwable { + if (INDY_call135 != null) + return INDY_call135; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call136; + private static MethodHandle INDY_call136 () throws Throwable { + if (INDY_call136 != null) + return INDY_call136; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call137; + private static MethodHandle INDY_call137 () throws Throwable { + if (INDY_call137 != null) + return INDY_call137; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call138; + private static MethodHandle INDY_call138 () throws Throwable { + if (INDY_call138 != null) + return INDY_call138; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call139; + private static MethodHandle INDY_call139 () throws Throwable { + if (INDY_call139 != null) + return INDY_call139; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call140; + private static MethodHandle INDY_call140 () throws Throwable { + if (INDY_call140 != null) + return INDY_call140; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call141; + private static MethodHandle INDY_call141 () throws Throwable { + if (INDY_call141 != null) + return INDY_call141; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call142; + private static MethodHandle INDY_call142 () throws Throwable { + if (INDY_call142 != null) + return INDY_call142; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call143; + private static MethodHandle INDY_call143 () throws Throwable { + if (INDY_call143 != null) + return INDY_call143; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call144; + private static MethodHandle INDY_call144 () throws Throwable { + if (INDY_call144 != null) + return INDY_call144; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call145; + private static MethodHandle INDY_call145 () throws Throwable { + if (INDY_call145 != null) + return INDY_call145; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call146; + private static MethodHandle INDY_call146 () throws Throwable { + if (INDY_call146 != null) + return INDY_call146; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call147; + private static MethodHandle INDY_call147 () throws Throwable { + if (INDY_call147 != null) + return INDY_call147; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call148; + private static MethodHandle INDY_call148 () throws Throwable { + if (INDY_call148 != null) + return INDY_call148; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call149; + private static MethodHandle INDY_call149 () throws Throwable { + if (INDY_call149 != null) + return INDY_call149; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call150; + private static MethodHandle INDY_call150 () throws Throwable { + if (INDY_call150 != null) + return INDY_call150; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call151; + private static MethodHandle INDY_call151 () throws Throwable { + if (INDY_call151 != null) + return INDY_call151; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call152; + private static MethodHandle INDY_call152 () throws Throwable { + if (INDY_call152 != null) + return INDY_call152; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call153; + private static MethodHandle INDY_call153 () throws Throwable { + if (INDY_call153 != null) + return INDY_call153; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call154; + private static MethodHandle INDY_call154 () throws Throwable { + if (INDY_call154 != null) + return INDY_call154; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call155; + private static MethodHandle INDY_call155 () throws Throwable { + if (INDY_call155 != null) + return INDY_call155; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call156; + private static MethodHandle INDY_call156 () throws Throwable { + if (INDY_call156 != null) + return INDY_call156; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call157; + private static MethodHandle INDY_call157 () throws Throwable { + if (INDY_call157 != null) + return INDY_call157; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call158; + private static MethodHandle INDY_call158 () throws Throwable { + if (INDY_call158 != null) + return INDY_call158; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call159; + private static MethodHandle INDY_call159 () throws Throwable { + if (INDY_call159 != null) + return INDY_call159; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call160; + private static MethodHandle INDY_call160 () throws Throwable { + if (INDY_call160 != null) + return INDY_call160; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call161; + private static MethodHandle INDY_call161 () throws Throwable { + if (INDY_call161 != null) + return INDY_call161; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call162; + private static MethodHandle INDY_call162 () throws Throwable { + if (INDY_call162 != null) + return INDY_call162; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call163; + private static MethodHandle INDY_call163 () throws Throwable { + if (INDY_call163 != null) + return INDY_call163; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call164; + private static MethodHandle INDY_call164 () throws Throwable { + if (INDY_call164 != null) + return INDY_call164; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call165; + private static MethodHandle INDY_call165 () throws Throwable { + if (INDY_call165 != null) + return INDY_call165; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call166; + private static MethodHandle INDY_call166 () throws Throwable { + if (INDY_call166 != null) + return INDY_call166; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call167; + private static MethodHandle INDY_call167 () throws Throwable { + if (INDY_call167 != null) + return INDY_call167; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call168; + private static MethodHandle INDY_call168 () throws Throwable { + if (INDY_call168 != null) + return INDY_call168; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call169; + private static MethodHandle INDY_call169 () throws Throwable { + if (INDY_call169 != null) + return INDY_call169; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call170; + private static MethodHandle INDY_call170 () throws Throwable { + if (INDY_call170 != null) + return INDY_call170; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call171; + private static MethodHandle INDY_call171 () throws Throwable { + if (INDY_call171 != null) + return INDY_call171; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call172; + private static MethodHandle INDY_call172 () throws Throwable { + if (INDY_call172 != null) + return INDY_call172; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call173; + private static MethodHandle INDY_call173 () throws Throwable { + if (INDY_call173 != null) + return INDY_call173; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call174; + private static MethodHandle INDY_call174 () throws Throwable { + if (INDY_call174 != null) + return INDY_call174; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call175; + private static MethodHandle INDY_call175 () throws Throwable { + if (INDY_call175 != null) + return INDY_call175; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call176; + private static MethodHandle INDY_call176 () throws Throwable { + if (INDY_call176 != null) + return INDY_call176; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call177; + private static MethodHandle INDY_call177 () throws Throwable { + if (INDY_call177 != null) + return INDY_call177; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call178; + private static MethodHandle INDY_call178 () throws Throwable { + if (INDY_call178 != null) + return INDY_call178; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call179; + private static MethodHandle INDY_call179 () throws Throwable { + if (INDY_call179 != null) + return INDY_call179; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call180; + private static MethodHandle INDY_call180 () throws Throwable { + if (INDY_call180 != null) + return INDY_call180; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call181; + private static MethodHandle INDY_call181 () throws Throwable { + if (INDY_call181 != null) + return INDY_call181; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call182; + private static MethodHandle INDY_call182 () throws Throwable { + if (INDY_call182 != null) + return INDY_call182; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call183; + private static MethodHandle INDY_call183 () throws Throwable { + if (INDY_call183 != null) + return INDY_call183; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call184; + private static MethodHandle INDY_call184 () throws Throwable { + if (INDY_call184 != null) + return INDY_call184; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call185; + private static MethodHandle INDY_call185 () throws Throwable { + if (INDY_call185 != null) + return INDY_call185; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call186; + private static MethodHandle INDY_call186 () throws Throwable { + if (INDY_call186 != null) + return INDY_call186; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call187; + private static MethodHandle INDY_call187 () throws Throwable { + if (INDY_call187 != null) + return INDY_call187; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call188; + private static MethodHandle INDY_call188 () throws Throwable { + if (INDY_call188 != null) + return INDY_call188; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call189; + private static MethodHandle INDY_call189 () throws Throwable { + if (INDY_call189 != null) + return INDY_call189; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call190; + private static MethodHandle INDY_call190 () throws Throwable { + if (INDY_call190 != null) + return INDY_call190; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call191; + private static MethodHandle INDY_call191 () throws Throwable { + if (INDY_call191 != null) + return INDY_call191; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call192; + private static MethodHandle INDY_call192 () throws Throwable { + if (INDY_call192 != null) + return INDY_call192; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call193; + private static MethodHandle INDY_call193 () throws Throwable { + if (INDY_call193 != null) + return INDY_call193; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call194; + private static MethodHandle INDY_call194 () throws Throwable { + if (INDY_call194 != null) + return INDY_call194; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call195; + private static MethodHandle INDY_call195 () throws Throwable { + if (INDY_call195 != null) + return INDY_call195; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call196; + private static MethodHandle INDY_call196 () throws Throwable { + if (INDY_call196 != null) + return INDY_call196; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call197; + private static MethodHandle INDY_call197 () throws Throwable { + if (INDY_call197 != null) + return INDY_call197; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call198; + private static MethodHandle INDY_call198 () throws Throwable { + if (INDY_call198 != null) + return INDY_call198; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call199; + private static MethodHandle INDY_call199 () throws Throwable { + if (INDY_call199 != null) + return INDY_call199; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call200; + private static MethodHandle INDY_call200 () throws Throwable { + if (INDY_call200 != null) + return INDY_call200; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call201; + private static MethodHandle INDY_call201 () throws Throwable { + if (INDY_call201 != null) + return INDY_call201; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call202; + private static MethodHandle INDY_call202 () throws Throwable { + if (INDY_call202 != null) + return INDY_call202; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call203; + private static MethodHandle INDY_call203 () throws Throwable { + if (INDY_call203 != null) + return INDY_call203; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call204; + private static MethodHandle INDY_call204 () throws Throwable { + if (INDY_call204 != null) + return INDY_call204; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call205; + private static MethodHandle INDY_call205 () throws Throwable { + if (INDY_call205 != null) + return INDY_call205; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call206; + private static MethodHandle INDY_call206 () throws Throwable { + if (INDY_call206 != null) + return INDY_call206; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call207; + private static MethodHandle INDY_call207 () throws Throwable { + if (INDY_call207 != null) + return INDY_call207; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call208; + private static MethodHandle INDY_call208 () throws Throwable { + if (INDY_call208 != null) + return INDY_call208; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call209; + private static MethodHandle INDY_call209 () throws Throwable { + if (INDY_call209 != null) + return INDY_call209; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call210; + private static MethodHandle INDY_call210 () throws Throwable { + if (INDY_call210 != null) + return INDY_call210; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call211; + private static MethodHandle INDY_call211 () throws Throwable { + if (INDY_call211 != null) + return INDY_call211; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call212; + private static MethodHandle INDY_call212 () throws Throwable { + if (INDY_call212 != null) + return INDY_call212; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call213; + private static MethodHandle INDY_call213 () throws Throwable { + if (INDY_call213 != null) + return INDY_call213; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call214; + private static MethodHandle INDY_call214 () throws Throwable { + if (INDY_call214 != null) + return INDY_call214; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call215; + private static MethodHandle INDY_call215 () throws Throwable { + if (INDY_call215 != null) + return INDY_call215; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call216; + private static MethodHandle INDY_call216 () throws Throwable { + if (INDY_call216 != null) + return INDY_call216; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call217; + private static MethodHandle INDY_call217 () throws Throwable { + if (INDY_call217 != null) + return INDY_call217; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call218; + private static MethodHandle INDY_call218 () throws Throwable { + if (INDY_call218 != null) + return INDY_call218; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call219; + private static MethodHandle INDY_call219 () throws Throwable { + if (INDY_call219 != null) + return INDY_call219; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call220; + private static MethodHandle INDY_call220 () throws Throwable { + if (INDY_call220 != null) + return INDY_call220; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call221; + private static MethodHandle INDY_call221 () throws Throwable { + if (INDY_call221 != null) + return INDY_call221; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call222; + private static MethodHandle INDY_call222 () throws Throwable { + if (INDY_call222 != null) + return INDY_call222; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call223; + private static MethodHandle INDY_call223 () throws Throwable { + if (INDY_call223 != null) + return INDY_call223; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call224; + private static MethodHandle INDY_call224 () throws Throwable { + if (INDY_call224 != null) + return INDY_call224; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call225; + private static MethodHandle INDY_call225 () throws Throwable { + if (INDY_call225 != null) + return INDY_call225; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call226; + private static MethodHandle INDY_call226 () throws Throwable { + if (INDY_call226 != null) + return INDY_call226; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call227; + private static MethodHandle INDY_call227 () throws Throwable { + if (INDY_call227 != null) + return INDY_call227; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call228; + private static MethodHandle INDY_call228 () throws Throwable { + if (INDY_call228 != null) + return INDY_call228; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call229; + private static MethodHandle INDY_call229 () throws Throwable { + if (INDY_call229 != null) + return INDY_call229; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call230; + private static MethodHandle INDY_call230 () throws Throwable { + if (INDY_call230 != null) + return INDY_call230; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call231; + private static MethodHandle INDY_call231 () throws Throwable { + if (INDY_call231 != null) + return INDY_call231; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call232; + private static MethodHandle INDY_call232 () throws Throwable { + if (INDY_call232 != null) + return INDY_call232; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call233; + private static MethodHandle INDY_call233 () throws Throwable { + if (INDY_call233 != null) + return INDY_call233; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call234; + private static MethodHandle INDY_call234 () throws Throwable { + if (INDY_call234 != null) + return INDY_call234; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call235; + private static MethodHandle INDY_call235 () throws Throwable { + if (INDY_call235 != null) + return INDY_call235; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call236; + private static MethodHandle INDY_call236 () throws Throwable { + if (INDY_call236 != null) + return INDY_call236; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call237; + private static MethodHandle INDY_call237 () throws Throwable { + if (INDY_call237 != null) + return INDY_call237; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call238; + private static MethodHandle INDY_call238 () throws Throwable { + if (INDY_call238 != null) + return INDY_call238; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call239; + private static MethodHandle INDY_call239 () throws Throwable { + if (INDY_call239 != null) + return INDY_call239; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call240; + private static MethodHandle INDY_call240 () throws Throwable { + if (INDY_call240 != null) + return INDY_call240; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call241; + private static MethodHandle INDY_call241 () throws Throwable { + if (INDY_call241 != null) + return INDY_call241; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call242; + private static MethodHandle INDY_call242 () throws Throwable { + if (INDY_call242 != null) + return INDY_call242; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call243; + private static MethodHandle INDY_call243 () throws Throwable { + if (INDY_call243 != null) + return INDY_call243; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call244; + private static MethodHandle INDY_call244 () throws Throwable { + if (INDY_call244 != null) + return INDY_call244; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call245; + private static MethodHandle INDY_call245 () throws Throwable { + if (INDY_call245 != null) + return INDY_call245; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call246; + private static MethodHandle INDY_call246 () throws Throwable { + if (INDY_call246 != null) + return INDY_call246; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call247; + private static MethodHandle INDY_call247 () throws Throwable { + if (INDY_call247 != null) + return INDY_call247; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call248; + private static MethodHandle INDY_call248 () throws Throwable { + if (INDY_call248 != null) + return INDY_call248; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call249; + private static MethodHandle INDY_call249 () throws Throwable { + if (INDY_call249 != null) + return INDY_call249; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call250; + private static MethodHandle INDY_call250 () throws Throwable { + if (INDY_call250 != null) + return INDY_call250; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call251; + private static MethodHandle INDY_call251 () throws Throwable { + if (INDY_call251 != null) + return INDY_call251; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call252; + private static MethodHandle INDY_call252 () throws Throwable { + if (INDY_call252 != null) + return INDY_call252; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call253; + private static MethodHandle INDY_call253 () throws Throwable { + if (INDY_call253 != null) + return INDY_call253; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call254; + private static MethodHandle INDY_call254 () throws Throwable { + if (INDY_call254 != null) + return INDY_call254; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call255; + private static MethodHandle INDY_call255 () throws Throwable { + if (INDY_call255 != null) + return INDY_call255; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call256; + private static MethodHandle INDY_call256 () throws Throwable { + if (INDY_call256 != null) + return INDY_call256; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call257; + private static MethodHandle INDY_call257 () throws Throwable { + if (INDY_call257 != null) + return INDY_call257; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call258; + private static MethodHandle INDY_call258 () throws Throwable { + if (INDY_call258 != null) + return INDY_call258; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call259; + private static MethodHandle INDY_call259 () throws Throwable { + if (INDY_call259 != null) + return INDY_call259; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call260; + private static MethodHandle INDY_call260 () throws Throwable { + if (INDY_call260 != null) + return INDY_call260; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call261; + private static MethodHandle INDY_call261 () throws Throwable { + if (INDY_call261 != null) + return INDY_call261; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call262; + private static MethodHandle INDY_call262 () throws Throwable { + if (INDY_call262 != null) + return INDY_call262; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call263; + private static MethodHandle INDY_call263 () throws Throwable { + if (INDY_call263 != null) + return INDY_call263; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call264; + private static MethodHandle INDY_call264 () throws Throwable { + if (INDY_call264 != null) + return INDY_call264; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call265; + private static MethodHandle INDY_call265 () throws Throwable { + if (INDY_call265 != null) + return INDY_call265; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call266; + private static MethodHandle INDY_call266 () throws Throwable { + if (INDY_call266 != null) + return INDY_call266; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call267; + private static MethodHandle INDY_call267 () throws Throwable { + if (INDY_call267 != null) + return INDY_call267; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call268; + private static MethodHandle INDY_call268 () throws Throwable { + if (INDY_call268 != null) + return INDY_call268; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call269; + private static MethodHandle INDY_call269 () throws Throwable { + if (INDY_call269 != null) + return INDY_call269; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call270; + private static MethodHandle INDY_call270 () throws Throwable { + if (INDY_call270 != null) + return INDY_call270; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call271; + private static MethodHandle INDY_call271 () throws Throwable { + if (INDY_call271 != null) + return INDY_call271; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call272; + private static MethodHandle INDY_call272 () throws Throwable { + if (INDY_call272 != null) + return INDY_call272; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call273; + private static MethodHandle INDY_call273 () throws Throwable { + if (INDY_call273 != null) + return INDY_call273; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call274; + private static MethodHandle INDY_call274 () throws Throwable { + if (INDY_call274 != null) + return INDY_call274; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call275; + private static MethodHandle INDY_call275 () throws Throwable { + if (INDY_call275 != null) + return INDY_call275; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call276; + private static MethodHandle INDY_call276 () throws Throwable { + if (INDY_call276 != null) + return INDY_call276; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call277; + private static MethodHandle INDY_call277 () throws Throwable { + if (INDY_call277 != null) + return INDY_call277; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call278; + private static MethodHandle INDY_call278 () throws Throwable { + if (INDY_call278 != null) + return INDY_call278; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call279; + private static MethodHandle INDY_call279 () throws Throwable { + if (INDY_call279 != null) + return INDY_call279; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call280; + private static MethodHandle INDY_call280 () throws Throwable { + if (INDY_call280 != null) + return INDY_call280; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call281; + private static MethodHandle INDY_call281 () throws Throwable { + if (INDY_call281 != null) + return INDY_call281; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call282; + private static MethodHandle INDY_call282 () throws Throwable { + if (INDY_call282 != null) + return INDY_call282; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call283; + private static MethodHandle INDY_call283 () throws Throwable { + if (INDY_call283 != null) + return INDY_call283; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call284; + private static MethodHandle INDY_call284 () throws Throwable { + if (INDY_call284 != null) + return INDY_call284; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call285; + private static MethodHandle INDY_call285 () throws Throwable { + if (INDY_call285 != null) + return INDY_call285; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call286; + private static MethodHandle INDY_call286 () throws Throwable { + if (INDY_call286 != null) + return INDY_call286; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call287; + private static MethodHandle INDY_call287 () throws Throwable { + if (INDY_call287 != null) + return INDY_call287; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call288; + private static MethodHandle INDY_call288 () throws Throwable { + if (INDY_call288 != null) + return INDY_call288; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call289; + private static MethodHandle INDY_call289 () throws Throwable { + if (INDY_call289 != null) + return INDY_call289; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call290; + private static MethodHandle INDY_call290 () throws Throwable { + if (INDY_call290 != null) + return INDY_call290; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call291; + private static MethodHandle INDY_call291 () throws Throwable { + if (INDY_call291 != null) + return INDY_call291; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call292; + private static MethodHandle INDY_call292 () throws Throwable { + if (INDY_call292 != null) + return INDY_call292; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call293; + private static MethodHandle INDY_call293 () throws Throwable { + if (INDY_call293 != null) + return INDY_call293; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call294; + private static MethodHandle INDY_call294 () throws Throwable { + if (INDY_call294 != null) + return INDY_call294; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call295; + private static MethodHandle INDY_call295 () throws Throwable { + if (INDY_call295 != null) + return INDY_call295; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call296; + private static MethodHandle INDY_call296 () throws Throwable { + if (INDY_call296 != null) + return INDY_call296; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call297; + private static MethodHandle INDY_call297 () throws Throwable { + if (INDY_call297 != null) + return INDY_call297; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call298; + private static MethodHandle INDY_call298 () throws Throwable { + if (INDY_call298 != null) + return INDY_call298; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call299; + private static MethodHandle INDY_call299 () throws Throwable { + if (INDY_call299 != null) + return INDY_call299; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call300; + private static MethodHandle INDY_call300 () throws Throwable { + if (INDY_call300 != null) + return INDY_call300; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call301; + private static MethodHandle INDY_call301 () throws Throwable { + if (INDY_call301 != null) + return INDY_call301; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call302; + private static MethodHandle INDY_call302 () throws Throwable { + if (INDY_call302 != null) + return INDY_call302; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call303; + private static MethodHandle INDY_call303 () throws Throwable { + if (INDY_call303 != null) + return INDY_call303; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call304; + private static MethodHandle INDY_call304 () throws Throwable { + if (INDY_call304 != null) + return INDY_call304; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call305; + private static MethodHandle INDY_call305 () throws Throwable { + if (INDY_call305 != null) + return INDY_call305; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call306; + private static MethodHandle INDY_call306 () throws Throwable { + if (INDY_call306 != null) + return INDY_call306; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call307; + private static MethodHandle INDY_call307 () throws Throwable { + if (INDY_call307 != null) + return INDY_call307; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call308; + private static MethodHandle INDY_call308 () throws Throwable { + if (INDY_call308 != null) + return INDY_call308; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call309; + private static MethodHandle INDY_call309 () throws Throwable { + if (INDY_call309 != null) + return INDY_call309; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call310; + private static MethodHandle INDY_call310 () throws Throwable { + if (INDY_call310 != null) + return INDY_call310; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call311; + private static MethodHandle INDY_call311 () throws Throwable { + if (INDY_call311 != null) + return INDY_call311; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call312; + private static MethodHandle INDY_call312 () throws Throwable { + if (INDY_call312 != null) + return INDY_call312; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call313; + private static MethodHandle INDY_call313 () throws Throwable { + if (INDY_call313 != null) + return INDY_call313; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call314; + private static MethodHandle INDY_call314 () throws Throwable { + if (INDY_call314 != null) + return INDY_call314; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call315; + private static MethodHandle INDY_call315 () throws Throwable { + if (INDY_call315 != null) + return INDY_call315; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call316; + private static MethodHandle INDY_call316 () throws Throwable { + if (INDY_call316 != null) + return INDY_call316; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call317; + private static MethodHandle INDY_call317 () throws Throwable { + if (INDY_call317 != null) + return INDY_call317; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call318; + private static MethodHandle INDY_call318 () throws Throwable { + if (INDY_call318 != null) + return INDY_call318; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call319; + private static MethodHandle INDY_call319 () throws Throwable { + if (INDY_call319 != null) + return INDY_call319; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call320; + private static MethodHandle INDY_call320 () throws Throwable { + if (INDY_call320 != null) + return INDY_call320; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call321; + private static MethodHandle INDY_call321 () throws Throwable { + if (INDY_call321 != null) + return INDY_call321; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call322; + private static MethodHandle INDY_call322 () throws Throwable { + if (INDY_call322 != null) + return INDY_call322; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call323; + private static MethodHandle INDY_call323 () throws Throwable { + if (INDY_call323 != null) + return INDY_call323; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call324; + private static MethodHandle INDY_call324 () throws Throwable { + if (INDY_call324 != null) + return INDY_call324; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call325; + private static MethodHandle INDY_call325 () throws Throwable { + if (INDY_call325 != null) + return INDY_call325; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call326; + private static MethodHandle INDY_call326 () throws Throwable { + if (INDY_call326 != null) + return INDY_call326; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call327; + private static MethodHandle INDY_call327 () throws Throwable { + if (INDY_call327 != null) + return INDY_call327; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call328; + private static MethodHandle INDY_call328 () throws Throwable { + if (INDY_call328 != null) + return INDY_call328; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call329; + private static MethodHandle INDY_call329 () throws Throwable { + if (INDY_call329 != null) + return INDY_call329; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call330; + private static MethodHandle INDY_call330 () throws Throwable { + if (INDY_call330 != null) + return INDY_call330; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call331; + private static MethodHandle INDY_call331 () throws Throwable { + if (INDY_call331 != null) + return INDY_call331; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call332; + private static MethodHandle INDY_call332 () throws Throwable { + if (INDY_call332 != null) + return INDY_call332; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call333; + private static MethodHandle INDY_call333 () throws Throwable { + if (INDY_call333 != null) + return INDY_call333; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call334; + private static MethodHandle INDY_call334 () throws Throwable { + if (INDY_call334 != null) + return INDY_call334; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call335; + private static MethodHandle INDY_call335 () throws Throwable { + if (INDY_call335 != null) + return INDY_call335; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call336; + private static MethodHandle INDY_call336 () throws Throwable { + if (INDY_call336 != null) + return INDY_call336; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call337; + private static MethodHandle INDY_call337 () throws Throwable { + if (INDY_call337 != null) + return INDY_call337; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call338; + private static MethodHandle INDY_call338 () throws Throwable { + if (INDY_call338 != null) + return INDY_call338; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call339; + private static MethodHandle INDY_call339 () throws Throwable { + if (INDY_call339 != null) + return INDY_call339; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call340; + private static MethodHandle INDY_call340 () throws Throwable { + if (INDY_call340 != null) + return INDY_call340; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call341; + private static MethodHandle INDY_call341 () throws Throwable { + if (INDY_call341 != null) + return INDY_call341; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call342; + private static MethodHandle INDY_call342 () throws Throwable { + if (INDY_call342 != null) + return INDY_call342; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call343; + private static MethodHandle INDY_call343 () throws Throwable { + if (INDY_call343 != null) + return INDY_call343; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call344; + private static MethodHandle INDY_call344 () throws Throwable { + if (INDY_call344 != null) + return INDY_call344; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call345; + private static MethodHandle INDY_call345 () throws Throwable { + if (INDY_call345 != null) + return INDY_call345; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call346; + private static MethodHandle INDY_call346 () throws Throwable { + if (INDY_call346 != null) + return INDY_call346; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call347; + private static MethodHandle INDY_call347 () throws Throwable { + if (INDY_call347 != null) + return INDY_call347; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call348; + private static MethodHandle INDY_call348 () throws Throwable { + if (INDY_call348 != null) + return INDY_call348; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call349; + private static MethodHandle INDY_call349 () throws Throwable { + if (INDY_call349 != null) + return INDY_call349; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call350; + private static MethodHandle INDY_call350 () throws Throwable { + if (INDY_call350 != null) + return INDY_call350; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call351; + private static MethodHandle INDY_call351 () throws Throwable { + if (INDY_call351 != null) + return INDY_call351; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call352; + private static MethodHandle INDY_call352 () throws Throwable { + if (INDY_call352 != null) + return INDY_call352; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call353; + private static MethodHandle INDY_call353 () throws Throwable { + if (INDY_call353 != null) + return INDY_call353; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call354; + private static MethodHandle INDY_call354 () throws Throwable { + if (INDY_call354 != null) + return INDY_call354; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call355; + private static MethodHandle INDY_call355 () throws Throwable { + if (INDY_call355 != null) + return INDY_call355; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call356; + private static MethodHandle INDY_call356 () throws Throwable { + if (INDY_call356 != null) + return INDY_call356; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call357; + private static MethodHandle INDY_call357 () throws Throwable { + if (INDY_call357 != null) + return INDY_call357; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call358; + private static MethodHandle INDY_call358 () throws Throwable { + if (INDY_call358 != null) + return INDY_call358; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call359; + private static MethodHandle INDY_call359 () throws Throwable { + if (INDY_call359 != null) + return INDY_call359; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call360; + private static MethodHandle INDY_call360 () throws Throwable { + if (INDY_call360 != null) + return INDY_call360; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call361; + private static MethodHandle INDY_call361 () throws Throwable { + if (INDY_call361 != null) + return INDY_call361; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call362; + private static MethodHandle INDY_call362 () throws Throwable { + if (INDY_call362 != null) + return INDY_call362; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call363; + private static MethodHandle INDY_call363 () throws Throwable { + if (INDY_call363 != null) + return INDY_call363; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call364; + private static MethodHandle INDY_call364 () throws Throwable { + if (INDY_call364 != null) + return INDY_call364; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call365; + private static MethodHandle INDY_call365 () throws Throwable { + if (INDY_call365 != null) + return INDY_call365; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call366; + private static MethodHandle INDY_call366 () throws Throwable { + if (INDY_call366 != null) + return INDY_call366; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call367; + private static MethodHandle INDY_call367 () throws Throwable { + if (INDY_call367 != null) + return INDY_call367; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call368; + private static MethodHandle INDY_call368 () throws Throwable { + if (INDY_call368 != null) + return INDY_call368; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call369; + private static MethodHandle INDY_call369 () throws Throwable { + if (INDY_call369 != null) + return INDY_call369; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call370; + private static MethodHandle INDY_call370 () throws Throwable { + if (INDY_call370 != null) + return INDY_call370; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call371; + private static MethodHandle INDY_call371 () throws Throwable { + if (INDY_call371 != null) + return INDY_call371; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call372; + private static MethodHandle INDY_call372 () throws Throwable { + if (INDY_call372 != null) + return INDY_call372; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call373; + private static MethodHandle INDY_call373 () throws Throwable { + if (INDY_call373 != null) + return INDY_call373; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call374; + private static MethodHandle INDY_call374 () throws Throwable { + if (INDY_call374 != null) + return INDY_call374; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call375; + private static MethodHandle INDY_call375 () throws Throwable { + if (INDY_call375 != null) + return INDY_call375; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call376; + private static MethodHandle INDY_call376 () throws Throwable { + if (INDY_call376 != null) + return INDY_call376; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call377; + private static MethodHandle INDY_call377 () throws Throwable { + if (INDY_call377 != null) + return INDY_call377; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call378; + private static MethodHandle INDY_call378 () throws Throwable { + if (INDY_call378 != null) + return INDY_call378; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call379; + private static MethodHandle INDY_call379 () throws Throwable { + if (INDY_call379 != null) + return INDY_call379; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call380; + private static MethodHandle INDY_call380 () throws Throwable { + if (INDY_call380 != null) + return INDY_call380; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call381; + private static MethodHandle INDY_call381 () throws Throwable { + if (INDY_call381 != null) + return INDY_call381; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call382; + private static MethodHandle INDY_call382 () throws Throwable { + if (INDY_call382 != null) + return INDY_call382; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call383; + private static MethodHandle INDY_call383 () throws Throwable { + if (INDY_call383 != null) + return INDY_call383; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call384; + private static MethodHandle INDY_call384 () throws Throwable { + if (INDY_call384 != null) + return INDY_call384; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call385; + private static MethodHandle INDY_call385 () throws Throwable { + if (INDY_call385 != null) + return INDY_call385; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call386; + private static MethodHandle INDY_call386 () throws Throwable { + if (INDY_call386 != null) + return INDY_call386; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call387; + private static MethodHandle INDY_call387 () throws Throwable { + if (INDY_call387 != null) + return INDY_call387; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call388; + private static MethodHandle INDY_call388 () throws Throwable { + if (INDY_call388 != null) + return INDY_call388; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call389; + private static MethodHandle INDY_call389 () throws Throwable { + if (INDY_call389 != null) + return INDY_call389; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call390; + private static MethodHandle INDY_call390 () throws Throwable { + if (INDY_call390 != null) + return INDY_call390; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call391; + private static MethodHandle INDY_call391 () throws Throwable { + if (INDY_call391 != null) + return INDY_call391; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call392; + private static MethodHandle INDY_call392 () throws Throwable { + if (INDY_call392 != null) + return INDY_call392; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call393; + private static MethodHandle INDY_call393 () throws Throwable { + if (INDY_call393 != null) + return INDY_call393; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call394; + private static MethodHandle INDY_call394 () throws Throwable { + if (INDY_call394 != null) + return INDY_call394; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call395; + private static MethodHandle INDY_call395 () throws Throwable { + if (INDY_call395 != null) + return INDY_call395; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call396; + private static MethodHandle INDY_call396 () throws Throwable { + if (INDY_call396 != null) + return INDY_call396; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call397; + private static MethodHandle INDY_call397 () throws Throwable { + if (INDY_call397 != null) + return INDY_call397; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call398; + private static MethodHandle INDY_call398 () throws Throwable { + if (INDY_call398 != null) + return INDY_call398; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call399; + private static MethodHandle INDY_call399 () throws Throwable { + if (INDY_call399 != null) + return INDY_call399; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call400; + private static MethodHandle INDY_call400 () throws Throwable { + if (INDY_call400 != null) + return INDY_call400; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call401; + private static MethodHandle INDY_call401 () throws Throwable { + if (INDY_call401 != null) + return INDY_call401; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call402; + private static MethodHandle INDY_call402 () throws Throwable { + if (INDY_call402 != null) + return INDY_call402; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call403; + private static MethodHandle INDY_call403 () throws Throwable { + if (INDY_call403 != null) + return INDY_call403; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call404; + private static MethodHandle INDY_call404 () throws Throwable { + if (INDY_call404 != null) + return INDY_call404; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call405; + private static MethodHandle INDY_call405 () throws Throwable { + if (INDY_call405 != null) + return INDY_call405; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call406; + private static MethodHandle INDY_call406 () throws Throwable { + if (INDY_call406 != null) + return INDY_call406; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call407; + private static MethodHandle INDY_call407 () throws Throwable { + if (INDY_call407 != null) + return INDY_call407; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call408; + private static MethodHandle INDY_call408 () throws Throwable { + if (INDY_call408 != null) + return INDY_call408; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call409; + private static MethodHandle INDY_call409 () throws Throwable { + if (INDY_call409 != null) + return INDY_call409; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call410; + private static MethodHandle INDY_call410 () throws Throwable { + if (INDY_call410 != null) + return INDY_call410; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call411; + private static MethodHandle INDY_call411 () throws Throwable { + if (INDY_call411 != null) + return INDY_call411; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call412; + private static MethodHandle INDY_call412 () throws Throwable { + if (INDY_call412 != null) + return INDY_call412; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call413; + private static MethodHandle INDY_call413 () throws Throwable { + if (INDY_call413 != null) + return INDY_call413; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call414; + private static MethodHandle INDY_call414 () throws Throwable { + if (INDY_call414 != null) + return INDY_call414; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call415; + private static MethodHandle INDY_call415 () throws Throwable { + if (INDY_call415 != null) + return INDY_call415; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call416; + private static MethodHandle INDY_call416 () throws Throwable { + if (INDY_call416 != null) + return INDY_call416; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call417; + private static MethodHandle INDY_call417 () throws Throwable { + if (INDY_call417 != null) + return INDY_call417; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call418; + private static MethodHandle INDY_call418 () throws Throwable { + if (INDY_call418 != null) + return INDY_call418; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call419; + private static MethodHandle INDY_call419 () throws Throwable { + if (INDY_call419 != null) + return INDY_call419; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call420; + private static MethodHandle INDY_call420 () throws Throwable { + if (INDY_call420 != null) + return INDY_call420; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call421; + private static MethodHandle INDY_call421 () throws Throwable { + if (INDY_call421 != null) + return INDY_call421; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call422; + private static MethodHandle INDY_call422 () throws Throwable { + if (INDY_call422 != null) + return INDY_call422; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call423; + private static MethodHandle INDY_call423 () throws Throwable { + if (INDY_call423 != null) + return INDY_call423; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call424; + private static MethodHandle INDY_call424 () throws Throwable { + if (INDY_call424 != null) + return INDY_call424; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call425; + private static MethodHandle INDY_call425 () throws Throwable { + if (INDY_call425 != null) + return INDY_call425; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call426; + private static MethodHandle INDY_call426 () throws Throwable { + if (INDY_call426 != null) + return INDY_call426; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call427; + private static MethodHandle INDY_call427 () throws Throwable { + if (INDY_call427 != null) + return INDY_call427; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call428; + private static MethodHandle INDY_call428 () throws Throwable { + if (INDY_call428 != null) + return INDY_call428; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call429; + private static MethodHandle INDY_call429 () throws Throwable { + if (INDY_call429 != null) + return INDY_call429; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call430; + private static MethodHandle INDY_call430 () throws Throwable { + if (INDY_call430 != null) + return INDY_call430; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call431; + private static MethodHandle INDY_call431 () throws Throwable { + if (INDY_call431 != null) + return INDY_call431; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call432; + private static MethodHandle INDY_call432 () throws Throwable { + if (INDY_call432 != null) + return INDY_call432; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call433; + private static MethodHandle INDY_call433 () throws Throwable { + if (INDY_call433 != null) + return INDY_call433; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call434; + private static MethodHandle INDY_call434 () throws Throwable { + if (INDY_call434 != null) + return INDY_call434; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call435; + private static MethodHandle INDY_call435 () throws Throwable { + if (INDY_call435 != null) + return INDY_call435; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call436; + private static MethodHandle INDY_call436 () throws Throwable { + if (INDY_call436 != null) + return INDY_call436; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call437; + private static MethodHandle INDY_call437 () throws Throwable { + if (INDY_call437 != null) + return INDY_call437; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call438; + private static MethodHandle INDY_call438 () throws Throwable { + if (INDY_call438 != null) + return INDY_call438; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call439; + private static MethodHandle INDY_call439 () throws Throwable { + if (INDY_call439 != null) + return INDY_call439; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call440; + private static MethodHandle INDY_call440 () throws Throwable { + if (INDY_call440 != null) + return INDY_call440; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call441; + private static MethodHandle INDY_call441 () throws Throwable { + if (INDY_call441 != null) + return INDY_call441; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call442; + private static MethodHandle INDY_call442 () throws Throwable { + if (INDY_call442 != null) + return INDY_call442; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call443; + private static MethodHandle INDY_call443 () throws Throwable { + if (INDY_call443 != null) + return INDY_call443; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call444; + private static MethodHandle INDY_call444 () throws Throwable { + if (INDY_call444 != null) + return INDY_call444; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call445; + private static MethodHandle INDY_call445 () throws Throwable { + if (INDY_call445 != null) + return INDY_call445; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call446; + private static MethodHandle INDY_call446 () throws Throwable { + if (INDY_call446 != null) + return INDY_call446; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call447; + private static MethodHandle INDY_call447 () throws Throwable { + if (INDY_call447 != null) + return INDY_call447; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call448; + private static MethodHandle INDY_call448 () throws Throwable { + if (INDY_call448 != null) + return INDY_call448; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call449; + private static MethodHandle INDY_call449 () throws Throwable { + if (INDY_call449 != null) + return INDY_call449; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call450; + private static MethodHandle INDY_call450 () throws Throwable { + if (INDY_call450 != null) + return INDY_call450; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call451; + private static MethodHandle INDY_call451 () throws Throwable { + if (INDY_call451 != null) + return INDY_call451; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call452; + private static MethodHandle INDY_call452 () throws Throwable { + if (INDY_call452 != null) + return INDY_call452; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call453; + private static MethodHandle INDY_call453 () throws Throwable { + if (INDY_call453 != null) + return INDY_call453; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call454; + private static MethodHandle INDY_call454 () throws Throwable { + if (INDY_call454 != null) + return INDY_call454; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call455; + private static MethodHandle INDY_call455 () throws Throwable { + if (INDY_call455 != null) + return INDY_call455; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call456; + private static MethodHandle INDY_call456 () throws Throwable { + if (INDY_call456 != null) + return INDY_call456; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call457; + private static MethodHandle INDY_call457 () throws Throwable { + if (INDY_call457 != null) + return INDY_call457; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call458; + private static MethodHandle INDY_call458 () throws Throwable { + if (INDY_call458 != null) + return INDY_call458; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call459; + private static MethodHandle INDY_call459 () throws Throwable { + if (INDY_call459 != null) + return INDY_call459; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call460; + private static MethodHandle INDY_call460 () throws Throwable { + if (INDY_call460 != null) + return INDY_call460; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call461; + private static MethodHandle INDY_call461 () throws Throwable { + if (INDY_call461 != null) + return INDY_call461; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call462; + private static MethodHandle INDY_call462 () throws Throwable { + if (INDY_call462 != null) + return INDY_call462; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call463; + private static MethodHandle INDY_call463 () throws Throwable { + if (INDY_call463 != null) + return INDY_call463; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call464; + private static MethodHandle INDY_call464 () throws Throwable { + if (INDY_call464 != null) + return INDY_call464; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call465; + private static MethodHandle INDY_call465 () throws Throwable { + if (INDY_call465 != null) + return INDY_call465; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call466; + private static MethodHandle INDY_call466 () throws Throwable { + if (INDY_call466 != null) + return INDY_call466; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call467; + private static MethodHandle INDY_call467 () throws Throwable { + if (INDY_call467 != null) + return INDY_call467; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call468; + private static MethodHandle INDY_call468 () throws Throwable { + if (INDY_call468 != null) + return INDY_call468; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call469; + private static MethodHandle INDY_call469 () throws Throwable { + if (INDY_call469 != null) + return INDY_call469; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call470; + private static MethodHandle INDY_call470 () throws Throwable { + if (INDY_call470 != null) + return INDY_call470; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call471; + private static MethodHandle INDY_call471 () throws Throwable { + if (INDY_call471 != null) + return INDY_call471; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call472; + private static MethodHandle INDY_call472 () throws Throwable { + if (INDY_call472 != null) + return INDY_call472; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call473; + private static MethodHandle INDY_call473 () throws Throwable { + if (INDY_call473 != null) + return INDY_call473; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call474; + private static MethodHandle INDY_call474 () throws Throwable { + if (INDY_call474 != null) + return INDY_call474; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call475; + private static MethodHandle INDY_call475 () throws Throwable { + if (INDY_call475 != null) + return INDY_call475; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call476; + private static MethodHandle INDY_call476 () throws Throwable { + if (INDY_call476 != null) + return INDY_call476; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call477; + private static MethodHandle INDY_call477 () throws Throwable { + if (INDY_call477 != null) + return INDY_call477; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call478; + private static MethodHandle INDY_call478 () throws Throwable { + if (INDY_call478 != null) + return INDY_call478; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call479; + private static MethodHandle INDY_call479 () throws Throwable { + if (INDY_call479 != null) + return INDY_call479; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call480; + private static MethodHandle INDY_call480 () throws Throwable { + if (INDY_call480 != null) + return INDY_call480; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call481; + private static MethodHandle INDY_call481 () throws Throwable { + if (INDY_call481 != null) + return INDY_call481; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call482; + private static MethodHandle INDY_call482 () throws Throwable { + if (INDY_call482 != null) + return INDY_call482; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call483; + private static MethodHandle INDY_call483 () throws Throwable { + if (INDY_call483 != null) + return INDY_call483; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call484; + private static MethodHandle INDY_call484 () throws Throwable { + if (INDY_call484 != null) + return INDY_call484; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call485; + private static MethodHandle INDY_call485 () throws Throwable { + if (INDY_call485 != null) + return INDY_call485; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call486; + private static MethodHandle INDY_call486 () throws Throwable { + if (INDY_call486 != null) + return INDY_call486; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call487; + private static MethodHandle INDY_call487 () throws Throwable { + if (INDY_call487 != null) + return INDY_call487; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call488; + private static MethodHandle INDY_call488 () throws Throwable { + if (INDY_call488 != null) + return INDY_call488; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call489; + private static MethodHandle INDY_call489 () throws Throwable { + if (INDY_call489 != null) + return INDY_call489; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call490; + private static MethodHandle INDY_call490 () throws Throwable { + if (INDY_call490 != null) + return INDY_call490; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call491; + private static MethodHandle INDY_call491 () throws Throwable { + if (INDY_call491 != null) + return INDY_call491; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call492; + private static MethodHandle INDY_call492 () throws Throwable { + if (INDY_call492 != null) + return INDY_call492; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call493; + private static MethodHandle INDY_call493 () throws Throwable { + if (INDY_call493 != null) + return INDY_call493; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call494; + private static MethodHandle INDY_call494 () throws Throwable { + if (INDY_call494 != null) + return INDY_call494; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call495; + private static MethodHandle INDY_call495 () throws Throwable { + if (INDY_call495 != null) + return INDY_call495; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call496; + private static MethodHandle INDY_call496 () throws Throwable { + if (INDY_call496 != null) + return INDY_call496; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call497; + private static MethodHandle INDY_call497 () throws Throwable { + if (INDY_call497 != null) + return INDY_call497; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call498; + private static MethodHandle INDY_call498 () throws Throwable { + if (INDY_call498 != null) + return INDY_call498; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call499; + private static MethodHandle INDY_call499 () throws Throwable { + if (INDY_call499 != null) + return INDY_call499; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call500; + private static MethodHandle INDY_call500 () throws Throwable { + if (INDY_call500 != null) + return INDY_call500; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call501; + private static MethodHandle INDY_call501 () throws Throwable { + if (INDY_call501 != null) + return INDY_call501; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call502; + private static MethodHandle INDY_call502 () throws Throwable { + if (INDY_call502 != null) + return INDY_call502; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call503; + private static MethodHandle INDY_call503 () throws Throwable { + if (INDY_call503 != null) + return INDY_call503; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call504; + private static MethodHandle INDY_call504 () throws Throwable { + if (INDY_call504 != null) + return INDY_call504; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call505; + private static MethodHandle INDY_call505 () throws Throwable { + if (INDY_call505 != null) + return INDY_call505; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call506; + private static MethodHandle INDY_call506 () throws Throwable { + if (INDY_call506 != null) + return INDY_call506; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call507; + private static MethodHandle INDY_call507 () throws Throwable { + if (INDY_call507 != null) + return INDY_call507; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call508; + private static MethodHandle INDY_call508 () throws Throwable { + if (INDY_call508 != null) + return INDY_call508; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call509; + private static MethodHandle INDY_call509 () throws Throwable { + if (INDY_call509 != null) + return INDY_call509; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call510; + private static MethodHandle INDY_call510 () throws Throwable { + if (INDY_call510 != null) + return INDY_call510; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call511; + private static MethodHandle INDY_call511 () throws Throwable { + if (INDY_call511 != null) + return INDY_call511; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call512; + private static MethodHandle INDY_call512 () throws Throwable { + if (INDY_call512 != null) + return INDY_call512; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call513; + private static MethodHandle INDY_call513 () throws Throwable { + if (INDY_call513 != null) + return INDY_call513; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call514; + private static MethodHandle INDY_call514 () throws Throwable { + if (INDY_call514 != null) + return INDY_call514; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call515; + private static MethodHandle INDY_call515 () throws Throwable { + if (INDY_call515 != null) + return INDY_call515; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call516; + private static MethodHandle INDY_call516 () throws Throwable { + if (INDY_call516 != null) + return INDY_call516; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call517; + private static MethodHandle INDY_call517 () throws Throwable { + if (INDY_call517 != null) + return INDY_call517; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call518; + private static MethodHandle INDY_call518 () throws Throwable { + if (INDY_call518 != null) + return INDY_call518; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call519; + private static MethodHandle INDY_call519 () throws Throwable { + if (INDY_call519 != null) + return INDY_call519; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call520; + private static MethodHandle INDY_call520 () throws Throwable { + if (INDY_call520 != null) + return INDY_call520; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call521; + private static MethodHandle INDY_call521 () throws Throwable { + if (INDY_call521 != null) + return INDY_call521; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call522; + private static MethodHandle INDY_call522 () throws Throwable { + if (INDY_call522 != null) + return INDY_call522; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call523; + private static MethodHandle INDY_call523 () throws Throwable { + if (INDY_call523 != null) + return INDY_call523; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call524; + private static MethodHandle INDY_call524 () throws Throwable { + if (INDY_call524 != null) + return INDY_call524; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call525; + private static MethodHandle INDY_call525 () throws Throwable { + if (INDY_call525 != null) + return INDY_call525; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call526; + private static MethodHandle INDY_call526 () throws Throwable { + if (INDY_call526 != null) + return INDY_call526; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call527; + private static MethodHandle INDY_call527 () throws Throwable { + if (INDY_call527 != null) + return INDY_call527; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call528; + private static MethodHandle INDY_call528 () throws Throwable { + if (INDY_call528 != null) + return INDY_call528; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call529; + private static MethodHandle INDY_call529 () throws Throwable { + if (INDY_call529 != null) + return INDY_call529; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call530; + private static MethodHandle INDY_call530 () throws Throwable { + if (INDY_call530 != null) + return INDY_call530; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call531; + private static MethodHandle INDY_call531 () throws Throwable { + if (INDY_call531 != null) + return INDY_call531; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call532; + private static MethodHandle INDY_call532 () throws Throwable { + if (INDY_call532 != null) + return INDY_call532; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call533; + private static MethodHandle INDY_call533 () throws Throwable { + if (INDY_call533 != null) + return INDY_call533; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call534; + private static MethodHandle INDY_call534 () throws Throwable { + if (INDY_call534 != null) + return INDY_call534; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call535; + private static MethodHandle INDY_call535 () throws Throwable { + if (INDY_call535 != null) + return INDY_call535; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call536; + private static MethodHandle INDY_call536 () throws Throwable { + if (INDY_call536 != null) + return INDY_call536; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call537; + private static MethodHandle INDY_call537 () throws Throwable { + if (INDY_call537 != null) + return INDY_call537; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call538; + private static MethodHandle INDY_call538 () throws Throwable { + if (INDY_call538 != null) + return INDY_call538; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call539; + private static MethodHandle INDY_call539 () throws Throwable { + if (INDY_call539 != null) + return INDY_call539; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call540; + private static MethodHandle INDY_call540 () throws Throwable { + if (INDY_call540 != null) + return INDY_call540; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call541; + private static MethodHandle INDY_call541 () throws Throwable { + if (INDY_call541 != null) + return INDY_call541; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call542; + private static MethodHandle INDY_call542 () throws Throwable { + if (INDY_call542 != null) + return INDY_call542; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call543; + private static MethodHandle INDY_call543 () throws Throwable { + if (INDY_call543 != null) + return INDY_call543; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call544; + private static MethodHandle INDY_call544 () throws Throwable { + if (INDY_call544 != null) + return INDY_call544; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call545; + private static MethodHandle INDY_call545 () throws Throwable { + if (INDY_call545 != null) + return INDY_call545; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call546; + private static MethodHandle INDY_call546 () throws Throwable { + if (INDY_call546 != null) + return INDY_call546; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call547; + private static MethodHandle INDY_call547 () throws Throwable { + if (INDY_call547 != null) + return INDY_call547; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call548; + private static MethodHandle INDY_call548 () throws Throwable { + if (INDY_call548 != null) + return INDY_call548; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call549; + private static MethodHandle INDY_call549 () throws Throwable { + if (INDY_call549 != null) + return INDY_call549; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call550; + private static MethodHandle INDY_call550 () throws Throwable { + if (INDY_call550 != null) + return INDY_call550; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call551; + private static MethodHandle INDY_call551 () throws Throwable { + if (INDY_call551 != null) + return INDY_call551; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call552; + private static MethodHandle INDY_call552 () throws Throwable { + if (INDY_call552 != null) + return INDY_call552; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call553; + private static MethodHandle INDY_call553 () throws Throwable { + if (INDY_call553 != null) + return INDY_call553; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call554; + private static MethodHandle INDY_call554 () throws Throwable { + if (INDY_call554 != null) + return INDY_call554; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call555; + private static MethodHandle INDY_call555 () throws Throwable { + if (INDY_call555 != null) + return INDY_call555; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call556; + private static MethodHandle INDY_call556 () throws Throwable { + if (INDY_call556 != null) + return INDY_call556; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call557; + private static MethodHandle INDY_call557 () throws Throwable { + if (INDY_call557 != null) + return INDY_call557; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call558; + private static MethodHandle INDY_call558 () throws Throwable { + if (INDY_call558 != null) + return INDY_call558; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call559; + private static MethodHandle INDY_call559 () throws Throwable { + if (INDY_call559 != null) + return INDY_call559; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call560; + private static MethodHandle INDY_call560 () throws Throwable { + if (INDY_call560 != null) + return INDY_call560; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call561; + private static MethodHandle INDY_call561 () throws Throwable { + if (INDY_call561 != null) + return INDY_call561; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call562; + private static MethodHandle INDY_call562 () throws Throwable { + if (INDY_call562 != null) + return INDY_call562; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call563; + private static MethodHandle INDY_call563 () throws Throwable { + if (INDY_call563 != null) + return INDY_call563; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call564; + private static MethodHandle INDY_call564 () throws Throwable { + if (INDY_call564 != null) + return INDY_call564; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call565; + private static MethodHandle INDY_call565 () throws Throwable { + if (INDY_call565 != null) + return INDY_call565; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call566; + private static MethodHandle INDY_call566 () throws Throwable { + if (INDY_call566 != null) + return INDY_call566; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call567; + private static MethodHandle INDY_call567 () throws Throwable { + if (INDY_call567 != null) + return INDY_call567; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call568; + private static MethodHandle INDY_call568 () throws Throwable { + if (INDY_call568 != null) + return INDY_call568; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call569; + private static MethodHandle INDY_call569 () throws Throwable { + if (INDY_call569 != null) + return INDY_call569; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call570; + private static MethodHandle INDY_call570 () throws Throwable { + if (INDY_call570 != null) + return INDY_call570; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call571; + private static MethodHandle INDY_call571 () throws Throwable { + if (INDY_call571 != null) + return INDY_call571; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call572; + private static MethodHandle INDY_call572 () throws Throwable { + if (INDY_call572 != null) + return INDY_call572; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call573; + private static MethodHandle INDY_call573 () throws Throwable { + if (INDY_call573 != null) + return INDY_call573; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call574; + private static MethodHandle INDY_call574 () throws Throwable { + if (INDY_call574 != null) + return INDY_call574; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call575; + private static MethodHandle INDY_call575 () throws Throwable { + if (INDY_call575 != null) + return INDY_call575; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call576; + private static MethodHandle INDY_call576 () throws Throwable { + if (INDY_call576 != null) + return INDY_call576; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call577; + private static MethodHandle INDY_call577 () throws Throwable { + if (INDY_call577 != null) + return INDY_call577; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call578; + private static MethodHandle INDY_call578 () throws Throwable { + if (INDY_call578 != null) + return INDY_call578; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call579; + private static MethodHandle INDY_call579 () throws Throwable { + if (INDY_call579 != null) + return INDY_call579; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call580; + private static MethodHandle INDY_call580 () throws Throwable { + if (INDY_call580 != null) + return INDY_call580; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call581; + private static MethodHandle INDY_call581 () throws Throwable { + if (INDY_call581 != null) + return INDY_call581; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call582; + private static MethodHandle INDY_call582 () throws Throwable { + if (INDY_call582 != null) + return INDY_call582; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call583; + private static MethodHandle INDY_call583 () throws Throwable { + if (INDY_call583 != null) + return INDY_call583; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call584; + private static MethodHandle INDY_call584 () throws Throwable { + if (INDY_call584 != null) + return INDY_call584; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call585; + private static MethodHandle INDY_call585 () throws Throwable { + if (INDY_call585 != null) + return INDY_call585; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call586; + private static MethodHandle INDY_call586 () throws Throwable { + if (INDY_call586 != null) + return INDY_call586; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call587; + private static MethodHandle INDY_call587 () throws Throwable { + if (INDY_call587 != null) + return INDY_call587; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call588; + private static MethodHandle INDY_call588 () throws Throwable { + if (INDY_call588 != null) + return INDY_call588; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call589; + private static MethodHandle INDY_call589 () throws Throwable { + if (INDY_call589 != null) + return INDY_call589; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call590; + private static MethodHandle INDY_call590 () throws Throwable { + if (INDY_call590 != null) + return INDY_call590; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call591; + private static MethodHandle INDY_call591 () throws Throwable { + if (INDY_call591 != null) + return INDY_call591; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call592; + private static MethodHandle INDY_call592 () throws Throwable { + if (INDY_call592 != null) + return INDY_call592; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call593; + private static MethodHandle INDY_call593 () throws Throwable { + if (INDY_call593 != null) + return INDY_call593; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call594; + private static MethodHandle INDY_call594 () throws Throwable { + if (INDY_call594 != null) + return INDY_call594; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call595; + private static MethodHandle INDY_call595 () throws Throwable { + if (INDY_call595 != null) + return INDY_call595; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call596; + private static MethodHandle INDY_call596 () throws Throwable { + if (INDY_call596 != null) + return INDY_call596; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call597; + private static MethodHandle INDY_call597 () throws Throwable { + if (INDY_call597 != null) + return INDY_call597; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call598; + private static MethodHandle INDY_call598 () throws Throwable { + if (INDY_call598 != null) + return INDY_call598; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call599; + private static MethodHandle INDY_call599 () throws Throwable { + if (INDY_call599 != null) + return INDY_call599; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call600; + private static MethodHandle INDY_call600 () throws Throwable { + if (INDY_call600 != null) + return INDY_call600; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call601; + private static MethodHandle INDY_call601 () throws Throwable { + if (INDY_call601 != null) + return INDY_call601; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call602; + private static MethodHandle INDY_call602 () throws Throwable { + if (INDY_call602 != null) + return INDY_call602; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call603; + private static MethodHandle INDY_call603 () throws Throwable { + if (INDY_call603 != null) + return INDY_call603; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call604; + private static MethodHandle INDY_call604 () throws Throwable { + if (INDY_call604 != null) + return INDY_call604; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call605; + private static MethodHandle INDY_call605 () throws Throwable { + if (INDY_call605 != null) + return INDY_call605; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call606; + private static MethodHandle INDY_call606 () throws Throwable { + if (INDY_call606 != null) + return INDY_call606; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call607; + private static MethodHandle INDY_call607 () throws Throwable { + if (INDY_call607 != null) + return INDY_call607; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call608; + private static MethodHandle INDY_call608 () throws Throwable { + if (INDY_call608 != null) + return INDY_call608; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call609; + private static MethodHandle INDY_call609 () throws Throwable { + if (INDY_call609 != null) + return INDY_call609; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call610; + private static MethodHandle INDY_call610 () throws Throwable { + if (INDY_call610 != null) + return INDY_call610; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call611; + private static MethodHandle INDY_call611 () throws Throwable { + if (INDY_call611 != null) + return INDY_call611; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call612; + private static MethodHandle INDY_call612 () throws Throwable { + if (INDY_call612 != null) + return INDY_call612; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call613; + private static MethodHandle INDY_call613 () throws Throwable { + if (INDY_call613 != null) + return INDY_call613; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call614; + private static MethodHandle INDY_call614 () throws Throwable { + if (INDY_call614 != null) + return INDY_call614; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call615; + private static MethodHandle INDY_call615 () throws Throwable { + if (INDY_call615 != null) + return INDY_call615; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call616; + private static MethodHandle INDY_call616 () throws Throwable { + if (INDY_call616 != null) + return INDY_call616; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call617; + private static MethodHandle INDY_call617 () throws Throwable { + if (INDY_call617 != null) + return INDY_call617; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call618; + private static MethodHandle INDY_call618 () throws Throwable { + if (INDY_call618 != null) + return INDY_call618; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call619; + private static MethodHandle INDY_call619 () throws Throwable { + if (INDY_call619 != null) + return INDY_call619; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call620; + private static MethodHandle INDY_call620 () throws Throwable { + if (INDY_call620 != null) + return INDY_call620; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call621; + private static MethodHandle INDY_call621 () throws Throwable { + if (INDY_call621 != null) + return INDY_call621; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call622; + private static MethodHandle INDY_call622 () throws Throwable { + if (INDY_call622 != null) + return INDY_call622; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call623; + private static MethodHandle INDY_call623 () throws Throwable { + if (INDY_call623 != null) + return INDY_call623; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call624; + private static MethodHandle INDY_call624 () throws Throwable { + if (INDY_call624 != null) + return INDY_call624; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call625; + private static MethodHandle INDY_call625 () throws Throwable { + if (INDY_call625 != null) + return INDY_call625; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call626; + private static MethodHandle INDY_call626 () throws Throwable { + if (INDY_call626 != null) + return INDY_call626; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call627; + private static MethodHandle INDY_call627 () throws Throwable { + if (INDY_call627 != null) + return INDY_call627; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call628; + private static MethodHandle INDY_call628 () throws Throwable { + if (INDY_call628 != null) + return INDY_call628; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call629; + private static MethodHandle INDY_call629 () throws Throwable { + if (INDY_call629 != null) + return INDY_call629; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call630; + private static MethodHandle INDY_call630 () throws Throwable { + if (INDY_call630 != null) + return INDY_call630; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call631; + private static MethodHandle INDY_call631 () throws Throwable { + if (INDY_call631 != null) + return INDY_call631; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call632; + private static MethodHandle INDY_call632 () throws Throwable { + if (INDY_call632 != null) + return INDY_call632; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call633; + private static MethodHandle INDY_call633 () throws Throwable { + if (INDY_call633 != null) + return INDY_call633; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call634; + private static MethodHandle INDY_call634 () throws Throwable { + if (INDY_call634 != null) + return INDY_call634; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call635; + private static MethodHandle INDY_call635 () throws Throwable { + if (INDY_call635 != null) + return INDY_call635; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call636; + private static MethodHandle INDY_call636 () throws Throwable { + if (INDY_call636 != null) + return INDY_call636; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call637; + private static MethodHandle INDY_call637 () throws Throwable { + if (INDY_call637 != null) + return INDY_call637; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call638; + private static MethodHandle INDY_call638 () throws Throwable { + if (INDY_call638 != null) + return INDY_call638; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call639; + private static MethodHandle INDY_call639 () throws Throwable { + if (INDY_call639 != null) + return INDY_call639; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call640; + private static MethodHandle INDY_call640 () throws Throwable { + if (INDY_call640 != null) + return INDY_call640; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call641; + private static MethodHandle INDY_call641 () throws Throwable { + if (INDY_call641 != null) + return INDY_call641; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call642; + private static MethodHandle INDY_call642 () throws Throwable { + if (INDY_call642 != null) + return INDY_call642; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call643; + private static MethodHandle INDY_call643 () throws Throwable { + if (INDY_call643 != null) + return INDY_call643; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call644; + private static MethodHandle INDY_call644 () throws Throwable { + if (INDY_call644 != null) + return INDY_call644; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call645; + private static MethodHandle INDY_call645 () throws Throwable { + if (INDY_call645 != null) + return INDY_call645; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call646; + private static MethodHandle INDY_call646 () throws Throwable { + if (INDY_call646 != null) + return INDY_call646; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call647; + private static MethodHandle INDY_call647 () throws Throwable { + if (INDY_call647 != null) + return INDY_call647; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call648; + private static MethodHandle INDY_call648 () throws Throwable { + if (INDY_call648 != null) + return INDY_call648; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call649; + private static MethodHandle INDY_call649 () throws Throwable { + if (INDY_call649 != null) + return INDY_call649; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call650; + private static MethodHandle INDY_call650 () throws Throwable { + if (INDY_call650 != null) + return INDY_call650; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call651; + private static MethodHandle INDY_call651 () throws Throwable { + if (INDY_call651 != null) + return INDY_call651; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call652; + private static MethodHandle INDY_call652 () throws Throwable { + if (INDY_call652 != null) + return INDY_call652; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call653; + private static MethodHandle INDY_call653 () throws Throwable { + if (INDY_call653 != null) + return INDY_call653; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call654; + private static MethodHandle INDY_call654 () throws Throwable { + if (INDY_call654 != null) + return INDY_call654; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call655; + private static MethodHandle INDY_call655 () throws Throwable { + if (INDY_call655 != null) + return INDY_call655; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call656; + private static MethodHandle INDY_call656 () throws Throwable { + if (INDY_call656 != null) + return INDY_call656; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call657; + private static MethodHandle INDY_call657 () throws Throwable { + if (INDY_call657 != null) + return INDY_call657; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call658; + private static MethodHandle INDY_call658 () throws Throwable { + if (INDY_call658 != null) + return INDY_call658; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call659; + private static MethodHandle INDY_call659 () throws Throwable { + if (INDY_call659 != null) + return INDY_call659; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call660; + private static MethodHandle INDY_call660 () throws Throwable { + if (INDY_call660 != null) + return INDY_call660; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call661; + private static MethodHandle INDY_call661 () throws Throwable { + if (INDY_call661 != null) + return INDY_call661; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call662; + private static MethodHandle INDY_call662 () throws Throwable { + if (INDY_call662 != null) + return INDY_call662; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call663; + private static MethodHandle INDY_call663 () throws Throwable { + if (INDY_call663 != null) + return INDY_call663; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call664; + private static MethodHandle INDY_call664 () throws Throwable { + if (INDY_call664 != null) + return INDY_call664; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call665; + private static MethodHandle INDY_call665 () throws Throwable { + if (INDY_call665 != null) + return INDY_call665; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call666; + private static MethodHandle INDY_call666 () throws Throwable { + if (INDY_call666 != null) + return INDY_call666; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call667; + private static MethodHandle INDY_call667 () throws Throwable { + if (INDY_call667 != null) + return INDY_call667; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call668; + private static MethodHandle INDY_call668 () throws Throwable { + if (INDY_call668 != null) + return INDY_call668; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call669; + private static MethodHandle INDY_call669 () throws Throwable { + if (INDY_call669 != null) + return INDY_call669; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call670; + private static MethodHandle INDY_call670 () throws Throwable { + if (INDY_call670 != null) + return INDY_call670; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call671; + private static MethodHandle INDY_call671 () throws Throwable { + if (INDY_call671 != null) + return INDY_call671; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call672; + private static MethodHandle INDY_call672 () throws Throwable { + if (INDY_call672 != null) + return INDY_call672; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call673; + private static MethodHandle INDY_call673 () throws Throwable { + if (INDY_call673 != null) + return INDY_call673; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call674; + private static MethodHandle INDY_call674 () throws Throwable { + if (INDY_call674 != null) + return INDY_call674; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call675; + private static MethodHandle INDY_call675 () throws Throwable { + if (INDY_call675 != null) + return INDY_call675; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call676; + private static MethodHandle INDY_call676 () throws Throwable { + if (INDY_call676 != null) + return INDY_call676; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call677; + private static MethodHandle INDY_call677 () throws Throwable { + if (INDY_call677 != null) + return INDY_call677; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call678; + private static MethodHandle INDY_call678 () throws Throwable { + if (INDY_call678 != null) + return INDY_call678; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call679; + private static MethodHandle INDY_call679 () throws Throwable { + if (INDY_call679 != null) + return INDY_call679; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call680; + private static MethodHandle INDY_call680 () throws Throwable { + if (INDY_call680 != null) + return INDY_call680; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call681; + private static MethodHandle INDY_call681 () throws Throwable { + if (INDY_call681 != null) + return INDY_call681; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call682; + private static MethodHandle INDY_call682 () throws Throwable { + if (INDY_call682 != null) + return INDY_call682; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call683; + private static MethodHandle INDY_call683 () throws Throwable { + if (INDY_call683 != null) + return INDY_call683; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call684; + private static MethodHandle INDY_call684 () throws Throwable { + if (INDY_call684 != null) + return INDY_call684; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call685; + private static MethodHandle INDY_call685 () throws Throwable { + if (INDY_call685 != null) + return INDY_call685; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call686; + private static MethodHandle INDY_call686 () throws Throwable { + if (INDY_call686 != null) + return INDY_call686; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call687; + private static MethodHandle INDY_call687 () throws Throwable { + if (INDY_call687 != null) + return INDY_call687; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call688; + private static MethodHandle INDY_call688 () throws Throwable { + if (INDY_call688 != null) + return INDY_call688; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call689; + private static MethodHandle INDY_call689 () throws Throwable { + if (INDY_call689 != null) + return INDY_call689; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call690; + private static MethodHandle INDY_call690 () throws Throwable { + if (INDY_call690 != null) + return INDY_call690; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call691; + private static MethodHandle INDY_call691 () throws Throwable { + if (INDY_call691 != null) + return INDY_call691; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call692; + private static MethodHandle INDY_call692 () throws Throwable { + if (INDY_call692 != null) + return INDY_call692; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call693; + private static MethodHandle INDY_call693 () throws Throwable { + if (INDY_call693 != null) + return INDY_call693; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call694; + private static MethodHandle INDY_call694 () throws Throwable { + if (INDY_call694 != null) + return INDY_call694; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call695; + private static MethodHandle INDY_call695 () throws Throwable { + if (INDY_call695 != null) + return INDY_call695; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call696; + private static MethodHandle INDY_call696 () throws Throwable { + if (INDY_call696 != null) + return INDY_call696; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call697; + private static MethodHandle INDY_call697 () throws Throwable { + if (INDY_call697 != null) + return INDY_call697; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call698; + private static MethodHandle INDY_call698 () throws Throwable { + if (INDY_call698 != null) + return INDY_call698; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call699; + private static MethodHandle INDY_call699 () throws Throwable { + if (INDY_call699 != null) + return INDY_call699; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call700; + private static MethodHandle INDY_call700 () throws Throwable { + if (INDY_call700 != null) + return INDY_call700; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call701; + private static MethodHandle INDY_call701 () throws Throwable { + if (INDY_call701 != null) + return INDY_call701; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call702; + private static MethodHandle INDY_call702 () throws Throwable { + if (INDY_call702 != null) + return INDY_call702; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call703; + private static MethodHandle INDY_call703 () throws Throwable { + if (INDY_call703 != null) + return INDY_call703; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call704; + private static MethodHandle INDY_call704 () throws Throwable { + if (INDY_call704 != null) + return INDY_call704; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call705; + private static MethodHandle INDY_call705 () throws Throwable { + if (INDY_call705 != null) + return INDY_call705; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call706; + private static MethodHandle INDY_call706 () throws Throwable { + if (INDY_call706 != null) + return INDY_call706; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call707; + private static MethodHandle INDY_call707 () throws Throwable { + if (INDY_call707 != null) + return INDY_call707; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call708; + private static MethodHandle INDY_call708 () throws Throwable { + if (INDY_call708 != null) + return INDY_call708; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call709; + private static MethodHandle INDY_call709 () throws Throwable { + if (INDY_call709 != null) + return INDY_call709; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call710; + private static MethodHandle INDY_call710 () throws Throwable { + if (INDY_call710 != null) + return INDY_call710; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call711; + private static MethodHandle INDY_call711 () throws Throwable { + if (INDY_call711 != null) + return INDY_call711; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call712; + private static MethodHandle INDY_call712 () throws Throwable { + if (INDY_call712 != null) + return INDY_call712; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call713; + private static MethodHandle INDY_call713 () throws Throwable { + if (INDY_call713 != null) + return INDY_call713; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call714; + private static MethodHandle INDY_call714 () throws Throwable { + if (INDY_call714 != null) + return INDY_call714; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call715; + private static MethodHandle INDY_call715 () throws Throwable { + if (INDY_call715 != null) + return INDY_call715; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call716; + private static MethodHandle INDY_call716 () throws Throwable { + if (INDY_call716 != null) + return INDY_call716; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call717; + private static MethodHandle INDY_call717 () throws Throwable { + if (INDY_call717 != null) + return INDY_call717; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call718; + private static MethodHandle INDY_call718 () throws Throwable { + if (INDY_call718 != null) + return INDY_call718; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call719; + private static MethodHandle INDY_call719 () throws Throwable { + if (INDY_call719 != null) + return INDY_call719; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call720; + private static MethodHandle INDY_call720 () throws Throwable { + if (INDY_call720 != null) + return INDY_call720; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call721; + private static MethodHandle INDY_call721 () throws Throwable { + if (INDY_call721 != null) + return INDY_call721; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call722; + private static MethodHandle INDY_call722 () throws Throwable { + if (INDY_call722 != null) + return INDY_call722; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call723; + private static MethodHandle INDY_call723 () throws Throwable { + if (INDY_call723 != null) + return INDY_call723; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call724; + private static MethodHandle INDY_call724 () throws Throwable { + if (INDY_call724 != null) + return INDY_call724; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call725; + private static MethodHandle INDY_call725 () throws Throwable { + if (INDY_call725 != null) + return INDY_call725; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call726; + private static MethodHandle INDY_call726 () throws Throwable { + if (INDY_call726 != null) + return INDY_call726; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call727; + private static MethodHandle INDY_call727 () throws Throwable { + if (INDY_call727 != null) + return INDY_call727; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call728; + private static MethodHandle INDY_call728 () throws Throwable { + if (INDY_call728 != null) + return INDY_call728; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call729; + private static MethodHandle INDY_call729 () throws Throwable { + if (INDY_call729 != null) + return INDY_call729; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call730; + private static MethodHandle INDY_call730 () throws Throwable { + if (INDY_call730 != null) + return INDY_call730; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call731; + private static MethodHandle INDY_call731 () throws Throwable { + if (INDY_call731 != null) + return INDY_call731; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call732; + private static MethodHandle INDY_call732 () throws Throwable { + if (INDY_call732 != null) + return INDY_call732; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call733; + private static MethodHandle INDY_call733 () throws Throwable { + if (INDY_call733 != null) + return INDY_call733; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call734; + private static MethodHandle INDY_call734 () throws Throwable { + if (INDY_call734 != null) + return INDY_call734; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call735; + private static MethodHandle INDY_call735 () throws Throwable { + if (INDY_call735 != null) + return INDY_call735; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call736; + private static MethodHandle INDY_call736 () throws Throwable { + if (INDY_call736 != null) + return INDY_call736; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call737; + private static MethodHandle INDY_call737 () throws Throwable { + if (INDY_call737 != null) + return INDY_call737; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call738; + private static MethodHandle INDY_call738 () throws Throwable { + if (INDY_call738 != null) + return INDY_call738; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call739; + private static MethodHandle INDY_call739 () throws Throwable { + if (INDY_call739 != null) + return INDY_call739; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call740; + private static MethodHandle INDY_call740 () throws Throwable { + if (INDY_call740 != null) + return INDY_call740; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call741; + private static MethodHandle INDY_call741 () throws Throwable { + if (INDY_call741 != null) + return INDY_call741; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call742; + private static MethodHandle INDY_call742 () throws Throwable { + if (INDY_call742 != null) + return INDY_call742; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call743; + private static MethodHandle INDY_call743 () throws Throwable { + if (INDY_call743 != null) + return INDY_call743; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call744; + private static MethodHandle INDY_call744 () throws Throwable { + if (INDY_call744 != null) + return INDY_call744; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call745; + private static MethodHandle INDY_call745 () throws Throwable { + if (INDY_call745 != null) + return INDY_call745; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call746; + private static MethodHandle INDY_call746 () throws Throwable { + if (INDY_call746 != null) + return INDY_call746; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call747; + private static MethodHandle INDY_call747 () throws Throwable { + if (INDY_call747 != null) + return INDY_call747; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call748; + private static MethodHandle INDY_call748 () throws Throwable { + if (INDY_call748 != null) + return INDY_call748; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call749; + private static MethodHandle INDY_call749 () throws Throwable { + if (INDY_call749 != null) + return INDY_call749; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call750; + private static MethodHandle INDY_call750 () throws Throwable { + if (INDY_call750 != null) + return INDY_call750; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call751; + private static MethodHandle INDY_call751 () throws Throwable { + if (INDY_call751 != null) + return INDY_call751; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call752; + private static MethodHandle INDY_call752 () throws Throwable { + if (INDY_call752 != null) + return INDY_call752; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call753; + private static MethodHandle INDY_call753 () throws Throwable { + if (INDY_call753 != null) + return INDY_call753; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call754; + private static MethodHandle INDY_call754 () throws Throwable { + if (INDY_call754 != null) + return INDY_call754; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call755; + private static MethodHandle INDY_call755 () throws Throwable { + if (INDY_call755 != null) + return INDY_call755; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call756; + private static MethodHandle INDY_call756 () throws Throwable { + if (INDY_call756 != null) + return INDY_call756; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call757; + private static MethodHandle INDY_call757 () throws Throwable { + if (INDY_call757 != null) + return INDY_call757; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call758; + private static MethodHandle INDY_call758 () throws Throwable { + if (INDY_call758 != null) + return INDY_call758; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call759; + private static MethodHandle INDY_call759 () throws Throwable { + if (INDY_call759 != null) + return INDY_call759; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call760; + private static MethodHandle INDY_call760 () throws Throwable { + if (INDY_call760 != null) + return INDY_call760; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call761; + private static MethodHandle INDY_call761 () throws Throwable { + if (INDY_call761 != null) + return INDY_call761; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call762; + private static MethodHandle INDY_call762 () throws Throwable { + if (INDY_call762 != null) + return INDY_call762; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call763; + private static MethodHandle INDY_call763 () throws Throwable { + if (INDY_call763 != null) + return INDY_call763; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call764; + private static MethodHandle INDY_call764 () throws Throwable { + if (INDY_call764 != null) + return INDY_call764; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call765; + private static MethodHandle INDY_call765 () throws Throwable { + if (INDY_call765 != null) + return INDY_call765; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call766; + private static MethodHandle INDY_call766 () throws Throwable { + if (INDY_call766 != null) + return INDY_call766; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call767; + private static MethodHandle INDY_call767 () throws Throwable { + if (INDY_call767 != null) + return INDY_call767; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call768; + private static MethodHandle INDY_call768 () throws Throwable { + if (INDY_call768 != null) + return INDY_call768; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call769; + private static MethodHandle INDY_call769 () throws Throwable { + if (INDY_call769 != null) + return INDY_call769; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call770; + private static MethodHandle INDY_call770 () throws Throwable { + if (INDY_call770 != null) + return INDY_call770; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call771; + private static MethodHandle INDY_call771 () throws Throwable { + if (INDY_call771 != null) + return INDY_call771; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call772; + private static MethodHandle INDY_call772 () throws Throwable { + if (INDY_call772 != null) + return INDY_call772; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call773; + private static MethodHandle INDY_call773 () throws Throwable { + if (INDY_call773 != null) + return INDY_call773; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call774; + private static MethodHandle INDY_call774 () throws Throwable { + if (INDY_call774 != null) + return INDY_call774; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call775; + private static MethodHandle INDY_call775 () throws Throwable { + if (INDY_call775 != null) + return INDY_call775; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call776; + private static MethodHandle INDY_call776 () throws Throwable { + if (INDY_call776 != null) + return INDY_call776; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call777; + private static MethodHandle INDY_call777 () throws Throwable { + if (INDY_call777 != null) + return INDY_call777; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call778; + private static MethodHandle INDY_call778 () throws Throwable { + if (INDY_call778 != null) + return INDY_call778; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call779; + private static MethodHandle INDY_call779 () throws Throwable { + if (INDY_call779 != null) + return INDY_call779; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call780; + private static MethodHandle INDY_call780 () throws Throwable { + if (INDY_call780 != null) + return INDY_call780; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call781; + private static MethodHandle INDY_call781 () throws Throwable { + if (INDY_call781 != null) + return INDY_call781; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call782; + private static MethodHandle INDY_call782 () throws Throwable { + if (INDY_call782 != null) + return INDY_call782; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call783; + private static MethodHandle INDY_call783 () throws Throwable { + if (INDY_call783 != null) + return INDY_call783; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call784; + private static MethodHandle INDY_call784 () throws Throwable { + if (INDY_call784 != null) + return INDY_call784; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call785; + private static MethodHandle INDY_call785 () throws Throwable { + if (INDY_call785 != null) + return INDY_call785; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call786; + private static MethodHandle INDY_call786 () throws Throwable { + if (INDY_call786 != null) + return INDY_call786; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call787; + private static MethodHandle INDY_call787 () throws Throwable { + if (INDY_call787 != null) + return INDY_call787; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call788; + private static MethodHandle INDY_call788 () throws Throwable { + if (INDY_call788 != null) + return INDY_call788; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call789; + private static MethodHandle INDY_call789 () throws Throwable { + if (INDY_call789 != null) + return INDY_call789; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call790; + private static MethodHandle INDY_call790 () throws Throwable { + if (INDY_call790 != null) + return INDY_call790; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call791; + private static MethodHandle INDY_call791 () throws Throwable { + if (INDY_call791 != null) + return INDY_call791; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call792; + private static MethodHandle INDY_call792 () throws Throwable { + if (INDY_call792 != null) + return INDY_call792; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call793; + private static MethodHandle INDY_call793 () throws Throwable { + if (INDY_call793 != null) + return INDY_call793; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call794; + private static MethodHandle INDY_call794 () throws Throwable { + if (INDY_call794 != null) + return INDY_call794; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call795; + private static MethodHandle INDY_call795 () throws Throwable { + if (INDY_call795 != null) + return INDY_call795; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call796; + private static MethodHandle INDY_call796 () throws Throwable { + if (INDY_call796 != null) + return INDY_call796; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call797; + private static MethodHandle INDY_call797 () throws Throwable { + if (INDY_call797 != null) + return INDY_call797; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call798; + private static MethodHandle INDY_call798 () throws Throwable { + if (INDY_call798 != null) + return INDY_call798; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call799; + private static MethodHandle INDY_call799 () throws Throwable { + if (INDY_call799 != null) + return INDY_call799; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call800; + private static MethodHandle INDY_call800 () throws Throwable { + if (INDY_call800 != null) + return INDY_call800; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call801; + private static MethodHandle INDY_call801 () throws Throwable { + if (INDY_call801 != null) + return INDY_call801; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call802; + private static MethodHandle INDY_call802 () throws Throwable { + if (INDY_call802 != null) + return INDY_call802; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call803; + private static MethodHandle INDY_call803 () throws Throwable { + if (INDY_call803 != null) + return INDY_call803; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call804; + private static MethodHandle INDY_call804 () throws Throwable { + if (INDY_call804 != null) + return INDY_call804; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call805; + private static MethodHandle INDY_call805 () throws Throwable { + if (INDY_call805 != null) + return INDY_call805; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call806; + private static MethodHandle INDY_call806 () throws Throwable { + if (INDY_call806 != null) + return INDY_call806; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call807; + private static MethodHandle INDY_call807 () throws Throwable { + if (INDY_call807 != null) + return INDY_call807; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call808; + private static MethodHandle INDY_call808 () throws Throwable { + if (INDY_call808 != null) + return INDY_call808; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call809; + private static MethodHandle INDY_call809 () throws Throwable { + if (INDY_call809 != null) + return INDY_call809; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call810; + private static MethodHandle INDY_call810 () throws Throwable { + if (INDY_call810 != null) + return INDY_call810; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call811; + private static MethodHandle INDY_call811 () throws Throwable { + if (INDY_call811 != null) + return INDY_call811; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call812; + private static MethodHandle INDY_call812 () throws Throwable { + if (INDY_call812 != null) + return INDY_call812; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call813; + private static MethodHandle INDY_call813 () throws Throwable { + if (INDY_call813 != null) + return INDY_call813; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call814; + private static MethodHandle INDY_call814 () throws Throwable { + if (INDY_call814 != null) + return INDY_call814; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call815; + private static MethodHandle INDY_call815 () throws Throwable { + if (INDY_call815 != null) + return INDY_call815; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call816; + private static MethodHandle INDY_call816 () throws Throwable { + if (INDY_call816 != null) + return INDY_call816; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call817; + private static MethodHandle INDY_call817 () throws Throwable { + if (INDY_call817 != null) + return INDY_call817; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call818; + private static MethodHandle INDY_call818 () throws Throwable { + if (INDY_call818 != null) + return INDY_call818; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call819; + private static MethodHandle INDY_call819 () throws Throwable { + if (INDY_call819 != null) + return INDY_call819; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call820; + private static MethodHandle INDY_call820 () throws Throwable { + if (INDY_call820 != null) + return INDY_call820; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call821; + private static MethodHandle INDY_call821 () throws Throwable { + if (INDY_call821 != null) + return INDY_call821; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call822; + private static MethodHandle INDY_call822 () throws Throwable { + if (INDY_call822 != null) + return INDY_call822; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call823; + private static MethodHandle INDY_call823 () throws Throwable { + if (INDY_call823 != null) + return INDY_call823; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call824; + private static MethodHandle INDY_call824 () throws Throwable { + if (INDY_call824 != null) + return INDY_call824; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call825; + private static MethodHandle INDY_call825 () throws Throwable { + if (INDY_call825 != null) + return INDY_call825; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call826; + private static MethodHandle INDY_call826 () throws Throwable { + if (INDY_call826 != null) + return INDY_call826; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call827; + private static MethodHandle INDY_call827 () throws Throwable { + if (INDY_call827 != null) + return INDY_call827; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call828; + private static MethodHandle INDY_call828 () throws Throwable { + if (INDY_call828 != null) + return INDY_call828; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call829; + private static MethodHandle INDY_call829 () throws Throwable { + if (INDY_call829 != null) + return INDY_call829; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call830; + private static MethodHandle INDY_call830 () throws Throwable { + if (INDY_call830 != null) + return INDY_call830; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call831; + private static MethodHandle INDY_call831 () throws Throwable { + if (INDY_call831 != null) + return INDY_call831; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call832; + private static MethodHandle INDY_call832 () throws Throwable { + if (INDY_call832 != null) + return INDY_call832; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call833; + private static MethodHandle INDY_call833 () throws Throwable { + if (INDY_call833 != null) + return INDY_call833; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call834; + private static MethodHandle INDY_call834 () throws Throwable { + if (INDY_call834 != null) + return INDY_call834; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call835; + private static MethodHandle INDY_call835 () throws Throwable { + if (INDY_call835 != null) + return INDY_call835; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call836; + private static MethodHandle INDY_call836 () throws Throwable { + if (INDY_call836 != null) + return INDY_call836; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call837; + private static MethodHandle INDY_call837 () throws Throwable { + if (INDY_call837 != null) + return INDY_call837; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call838; + private static MethodHandle INDY_call838 () throws Throwable { + if (INDY_call838 != null) + return INDY_call838; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call839; + private static MethodHandle INDY_call839 () throws Throwable { + if (INDY_call839 != null) + return INDY_call839; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call840; + private static MethodHandle INDY_call840 () throws Throwable { + if (INDY_call840 != null) + return INDY_call840; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call841; + private static MethodHandle INDY_call841 () throws Throwable { + if (INDY_call841 != null) + return INDY_call841; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call842; + private static MethodHandle INDY_call842 () throws Throwable { + if (INDY_call842 != null) + return INDY_call842; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call843; + private static MethodHandle INDY_call843 () throws Throwable { + if (INDY_call843 != null) + return INDY_call843; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call844; + private static MethodHandle INDY_call844 () throws Throwable { + if (INDY_call844 != null) + return INDY_call844; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call845; + private static MethodHandle INDY_call845 () throws Throwable { + if (INDY_call845 != null) + return INDY_call845; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call846; + private static MethodHandle INDY_call846 () throws Throwable { + if (INDY_call846 != null) + return INDY_call846; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call847; + private static MethodHandle INDY_call847 () throws Throwable { + if (INDY_call847 != null) + return INDY_call847; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call848; + private static MethodHandle INDY_call848 () throws Throwable { + if (INDY_call848 != null) + return INDY_call848; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call849; + private static MethodHandle INDY_call849 () throws Throwable { + if (INDY_call849 != null) + return INDY_call849; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call850; + private static MethodHandle INDY_call850 () throws Throwable { + if (INDY_call850 != null) + return INDY_call850; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call851; + private static MethodHandle INDY_call851 () throws Throwable { + if (INDY_call851 != null) + return INDY_call851; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call852; + private static MethodHandle INDY_call852 () throws Throwable { + if (INDY_call852 != null) + return INDY_call852; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call853; + private static MethodHandle INDY_call853 () throws Throwable { + if (INDY_call853 != null) + return INDY_call853; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call854; + private static MethodHandle INDY_call854 () throws Throwable { + if (INDY_call854 != null) + return INDY_call854; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call855; + private static MethodHandle INDY_call855 () throws Throwable { + if (INDY_call855 != null) + return INDY_call855; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call856; + private static MethodHandle INDY_call856 () throws Throwable { + if (INDY_call856 != null) + return INDY_call856; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call857; + private static MethodHandle INDY_call857 () throws Throwable { + if (INDY_call857 != null) + return INDY_call857; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call858; + private static MethodHandle INDY_call858 () throws Throwable { + if (INDY_call858 != null) + return INDY_call858; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call859; + private static MethodHandle INDY_call859 () throws Throwable { + if (INDY_call859 != null) + return INDY_call859; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call860; + private static MethodHandle INDY_call860 () throws Throwable { + if (INDY_call860 != null) + return INDY_call860; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call861; + private static MethodHandle INDY_call861 () throws Throwable { + if (INDY_call861 != null) + return INDY_call861; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call862; + private static MethodHandle INDY_call862 () throws Throwable { + if (INDY_call862 != null) + return INDY_call862; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call863; + private static MethodHandle INDY_call863 () throws Throwable { + if (INDY_call863 != null) + return INDY_call863; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call864; + private static MethodHandle INDY_call864 () throws Throwable { + if (INDY_call864 != null) + return INDY_call864; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call865; + private static MethodHandle INDY_call865 () throws Throwable { + if (INDY_call865 != null) + return INDY_call865; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call866; + private static MethodHandle INDY_call866 () throws Throwable { + if (INDY_call866 != null) + return INDY_call866; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call867; + private static MethodHandle INDY_call867 () throws Throwable { + if (INDY_call867 != null) + return INDY_call867; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call868; + private static MethodHandle INDY_call868 () throws Throwable { + if (INDY_call868 != null) + return INDY_call868; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call869; + private static MethodHandle INDY_call869 () throws Throwable { + if (INDY_call869 != null) + return INDY_call869; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call870; + private static MethodHandle INDY_call870 () throws Throwable { + if (INDY_call870 != null) + return INDY_call870; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call871; + private static MethodHandle INDY_call871 () throws Throwable { + if (INDY_call871 != null) + return INDY_call871; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call872; + private static MethodHandle INDY_call872 () throws Throwable { + if (INDY_call872 != null) + return INDY_call872; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call873; + private static MethodHandle INDY_call873 () throws Throwable { + if (INDY_call873 != null) + return INDY_call873; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call874; + private static MethodHandle INDY_call874 () throws Throwable { + if (INDY_call874 != null) + return INDY_call874; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call875; + private static MethodHandle INDY_call875 () throws Throwable { + if (INDY_call875 != null) + return INDY_call875; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call876; + private static MethodHandle INDY_call876 () throws Throwable { + if (INDY_call876 != null) + return INDY_call876; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call877; + private static MethodHandle INDY_call877 () throws Throwable { + if (INDY_call877 != null) + return INDY_call877; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call878; + private static MethodHandle INDY_call878 () throws Throwable { + if (INDY_call878 != null) + return INDY_call878; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call879; + private static MethodHandle INDY_call879 () throws Throwable { + if (INDY_call879 != null) + return INDY_call879; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call880; + private static MethodHandle INDY_call880 () throws Throwable { + if (INDY_call880 != null) + return INDY_call880; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call881; + private static MethodHandle INDY_call881 () throws Throwable { + if (INDY_call881 != null) + return INDY_call881; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call882; + private static MethodHandle INDY_call882 () throws Throwable { + if (INDY_call882 != null) + return INDY_call882; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call883; + private static MethodHandle INDY_call883 () throws Throwable { + if (INDY_call883 != null) + return INDY_call883; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call884; + private static MethodHandle INDY_call884 () throws Throwable { + if (INDY_call884 != null) + return INDY_call884; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call885; + private static MethodHandle INDY_call885 () throws Throwable { + if (INDY_call885 != null) + return INDY_call885; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call886; + private static MethodHandle INDY_call886 () throws Throwable { + if (INDY_call886 != null) + return INDY_call886; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call887; + private static MethodHandle INDY_call887 () throws Throwable { + if (INDY_call887 != null) + return INDY_call887; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call888; + private static MethodHandle INDY_call888 () throws Throwable { + if (INDY_call888 != null) + return INDY_call888; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call889; + private static MethodHandle INDY_call889 () throws Throwable { + if (INDY_call889 != null) + return INDY_call889; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call890; + private static MethodHandle INDY_call890 () throws Throwable { + if (INDY_call890 != null) + return INDY_call890; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call891; + private static MethodHandle INDY_call891 () throws Throwable { + if (INDY_call891 != null) + return INDY_call891; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call892; + private static MethodHandle INDY_call892 () throws Throwable { + if (INDY_call892 != null) + return INDY_call892; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call893; + private static MethodHandle INDY_call893 () throws Throwable { + if (INDY_call893 != null) + return INDY_call893; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call894; + private static MethodHandle INDY_call894 () throws Throwable { + if (INDY_call894 != null) + return INDY_call894; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call895; + private static MethodHandle INDY_call895 () throws Throwable { + if (INDY_call895 != null) + return INDY_call895; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call896; + private static MethodHandle INDY_call896 () throws Throwable { + if (INDY_call896 != null) + return INDY_call896; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call897; + private static MethodHandle INDY_call897 () throws Throwable { + if (INDY_call897 != null) + return INDY_call897; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call898; + private static MethodHandle INDY_call898 () throws Throwable { + if (INDY_call898 != null) + return INDY_call898; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call899; + private static MethodHandle INDY_call899 () throws Throwable { + if (INDY_call899 != null) + return INDY_call899; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call900; + private static MethodHandle INDY_call900 () throws Throwable { + if (INDY_call900 != null) + return INDY_call900; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call901; + private static MethodHandle INDY_call901 () throws Throwable { + if (INDY_call901 != null) + return INDY_call901; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call902; + private static MethodHandle INDY_call902 () throws Throwable { + if (INDY_call902 != null) + return INDY_call902; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call903; + private static MethodHandle INDY_call903 () throws Throwable { + if (INDY_call903 != null) + return INDY_call903; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call904; + private static MethodHandle INDY_call904 () throws Throwable { + if (INDY_call904 != null) + return INDY_call904; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call905; + private static MethodHandle INDY_call905 () throws Throwable { + if (INDY_call905 != null) + return INDY_call905; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call906; + private static MethodHandle INDY_call906 () throws Throwable { + if (INDY_call906 != null) + return INDY_call906; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call907; + private static MethodHandle INDY_call907 () throws Throwable { + if (INDY_call907 != null) + return INDY_call907; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call908; + private static MethodHandle INDY_call908 () throws Throwable { + if (INDY_call908 != null) + return INDY_call908; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call909; + private static MethodHandle INDY_call909 () throws Throwable { + if (INDY_call909 != null) + return INDY_call909; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call910; + private static MethodHandle INDY_call910 () throws Throwable { + if (INDY_call910 != null) + return INDY_call910; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call911; + private static MethodHandle INDY_call911 () throws Throwable { + if (INDY_call911 != null) + return INDY_call911; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call912; + private static MethodHandle INDY_call912 () throws Throwable { + if (INDY_call912 != null) + return INDY_call912; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call913; + private static MethodHandle INDY_call913 () throws Throwable { + if (INDY_call913 != null) + return INDY_call913; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call914; + private static MethodHandle INDY_call914 () throws Throwable { + if (INDY_call914 != null) + return INDY_call914; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call915; + private static MethodHandle INDY_call915 () throws Throwable { + if (INDY_call915 != null) + return INDY_call915; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call916; + private static MethodHandle INDY_call916 () throws Throwable { + if (INDY_call916 != null) + return INDY_call916; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call917; + private static MethodHandle INDY_call917 () throws Throwable { + if (INDY_call917 != null) + return INDY_call917; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call918; + private static MethodHandle INDY_call918 () throws Throwable { + if (INDY_call918 != null) + return INDY_call918; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call919; + private static MethodHandle INDY_call919 () throws Throwable { + if (INDY_call919 != null) + return INDY_call919; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call920; + private static MethodHandle INDY_call920 () throws Throwable { + if (INDY_call920 != null) + return INDY_call920; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call921; + private static MethodHandle INDY_call921 () throws Throwable { + if (INDY_call921 != null) + return INDY_call921; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call922; + private static MethodHandle INDY_call922 () throws Throwable { + if (INDY_call922 != null) + return INDY_call922; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call923; + private static MethodHandle INDY_call923 () throws Throwable { + if (INDY_call923 != null) + return INDY_call923; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call924; + private static MethodHandle INDY_call924 () throws Throwable { + if (INDY_call924 != null) + return INDY_call924; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call925; + private static MethodHandle INDY_call925 () throws Throwable { + if (INDY_call925 != null) + return INDY_call925; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call926; + private static MethodHandle INDY_call926 () throws Throwable { + if (INDY_call926 != null) + return INDY_call926; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call927; + private static MethodHandle INDY_call927 () throws Throwable { + if (INDY_call927 != null) + return INDY_call927; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call928; + private static MethodHandle INDY_call928 () throws Throwable { + if (INDY_call928 != null) + return INDY_call928; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call929; + private static MethodHandle INDY_call929 () throws Throwable { + if (INDY_call929 != null) + return INDY_call929; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call930; + private static MethodHandle INDY_call930 () throws Throwable { + if (INDY_call930 != null) + return INDY_call930; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call931; + private static MethodHandle INDY_call931 () throws Throwable { + if (INDY_call931 != null) + return INDY_call931; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call932; + private static MethodHandle INDY_call932 () throws Throwable { + if (INDY_call932 != null) + return INDY_call932; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call933; + private static MethodHandle INDY_call933 () throws Throwable { + if (INDY_call933 != null) + return INDY_call933; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call934; + private static MethodHandle INDY_call934 () throws Throwable { + if (INDY_call934 != null) + return INDY_call934; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call935; + private static MethodHandle INDY_call935 () throws Throwable { + if (INDY_call935 != null) + return INDY_call935; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call936; + private static MethodHandle INDY_call936 () throws Throwable { + if (INDY_call936 != null) + return INDY_call936; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call937; + private static MethodHandle INDY_call937 () throws Throwable { + if (INDY_call937 != null) + return INDY_call937; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call938; + private static MethodHandle INDY_call938 () throws Throwable { + if (INDY_call938 != null) + return INDY_call938; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call939; + private static MethodHandle INDY_call939 () throws Throwable { + if (INDY_call939 != null) + return INDY_call939; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call940; + private static MethodHandle INDY_call940 () throws Throwable { + if (INDY_call940 != null) + return INDY_call940; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call941; + private static MethodHandle INDY_call941 () throws Throwable { + if (INDY_call941 != null) + return INDY_call941; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call942; + private static MethodHandle INDY_call942 () throws Throwable { + if (INDY_call942 != null) + return INDY_call942; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call943; + private static MethodHandle INDY_call943 () throws Throwable { + if (INDY_call943 != null) + return INDY_call943; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call944; + private static MethodHandle INDY_call944 () throws Throwable { + if (INDY_call944 != null) + return INDY_call944; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call945; + private static MethodHandle INDY_call945 () throws Throwable { + if (INDY_call945 != null) + return INDY_call945; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call946; + private static MethodHandle INDY_call946 () throws Throwable { + if (INDY_call946 != null) + return INDY_call946; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call947; + private static MethodHandle INDY_call947 () throws Throwable { + if (INDY_call947 != null) + return INDY_call947; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call948; + private static MethodHandle INDY_call948 () throws Throwable { + if (INDY_call948 != null) + return INDY_call948; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call949; + private static MethodHandle INDY_call949 () throws Throwable { + if (INDY_call949 != null) + return INDY_call949; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call950; + private static MethodHandle INDY_call950 () throws Throwable { + if (INDY_call950 != null) + return INDY_call950; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call951; + private static MethodHandle INDY_call951 () throws Throwable { + if (INDY_call951 != null) + return INDY_call951; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call952; + private static MethodHandle INDY_call952 () throws Throwable { + if (INDY_call952 != null) + return INDY_call952; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call953; + private static MethodHandle INDY_call953 () throws Throwable { + if (INDY_call953 != null) + return INDY_call953; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call954; + private static MethodHandle INDY_call954 () throws Throwable { + if (INDY_call954 != null) + return INDY_call954; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call955; + private static MethodHandle INDY_call955 () throws Throwable { + if (INDY_call955 != null) + return INDY_call955; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call956; + private static MethodHandle INDY_call956 () throws Throwable { + if (INDY_call956 != null) + return INDY_call956; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call957; + private static MethodHandle INDY_call957 () throws Throwable { + if (INDY_call957 != null) + return INDY_call957; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call958; + private static MethodHandle INDY_call958 () throws Throwable { + if (INDY_call958 != null) + return INDY_call958; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call959; + private static MethodHandle INDY_call959 () throws Throwable { + if (INDY_call959 != null) + return INDY_call959; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call960; + private static MethodHandle INDY_call960 () throws Throwable { + if (INDY_call960 != null) + return INDY_call960; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call961; + private static MethodHandle INDY_call961 () throws Throwable { + if (INDY_call961 != null) + return INDY_call961; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call962; + private static MethodHandle INDY_call962 () throws Throwable { + if (INDY_call962 != null) + return INDY_call962; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call963; + private static MethodHandle INDY_call963 () throws Throwable { + if (INDY_call963 != null) + return INDY_call963; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call964; + private static MethodHandle INDY_call964 () throws Throwable { + if (INDY_call964 != null) + return INDY_call964; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call965; + private static MethodHandle INDY_call965 () throws Throwable { + if (INDY_call965 != null) + return INDY_call965; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call966; + private static MethodHandle INDY_call966 () throws Throwable { + if (INDY_call966 != null) + return INDY_call966; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call967; + private static MethodHandle INDY_call967 () throws Throwable { + if (INDY_call967 != null) + return INDY_call967; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call968; + private static MethodHandle INDY_call968 () throws Throwable { + if (INDY_call968 != null) + return INDY_call968; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call969; + private static MethodHandle INDY_call969 () throws Throwable { + if (INDY_call969 != null) + return INDY_call969; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call970; + private static MethodHandle INDY_call970 () throws Throwable { + if (INDY_call970 != null) + return INDY_call970; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call971; + private static MethodHandle INDY_call971 () throws Throwable { + if (INDY_call971 != null) + return INDY_call971; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call972; + private static MethodHandle INDY_call972 () throws Throwable { + if (INDY_call972 != null) + return INDY_call972; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call973; + private static MethodHandle INDY_call973 () throws Throwable { + if (INDY_call973 != null) + return INDY_call973; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call974; + private static MethodHandle INDY_call974 () throws Throwable { + if (INDY_call974 != null) + return INDY_call974; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call975; + private static MethodHandle INDY_call975 () throws Throwable { + if (INDY_call975 != null) + return INDY_call975; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call976; + private static MethodHandle INDY_call976 () throws Throwable { + if (INDY_call976 != null) + return INDY_call976; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call977; + private static MethodHandle INDY_call977 () throws Throwable { + if (INDY_call977 != null) + return INDY_call977; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call978; + private static MethodHandle INDY_call978 () throws Throwable { + if (INDY_call978 != null) + return INDY_call978; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call979; + private static MethodHandle INDY_call979 () throws Throwable { + if (INDY_call979 != null) + return INDY_call979; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call980; + private static MethodHandle INDY_call980 () throws Throwable { + if (INDY_call980 != null) + return INDY_call980; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call981; + private static MethodHandle INDY_call981 () throws Throwable { + if (INDY_call981 != null) + return INDY_call981; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call982; + private static MethodHandle INDY_call982 () throws Throwable { + if (INDY_call982 != null) + return INDY_call982; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call983; + private static MethodHandle INDY_call983 () throws Throwable { + if (INDY_call983 != null) + return INDY_call983; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call984; + private static MethodHandle INDY_call984 () throws Throwable { + if (INDY_call984 != null) + return INDY_call984; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call985; + private static MethodHandle INDY_call985 () throws Throwable { + if (INDY_call985 != null) + return INDY_call985; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call986; + private static MethodHandle INDY_call986 () throws Throwable { + if (INDY_call986 != null) + return INDY_call986; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call987; + private static MethodHandle INDY_call987 () throws Throwable { + if (INDY_call987 != null) + return INDY_call987; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call988; + private static MethodHandle INDY_call988 () throws Throwable { + if (INDY_call988 != null) + return INDY_call988; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call989; + private static MethodHandle INDY_call989 () throws Throwable { + if (INDY_call989 != null) + return INDY_call989; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call990; + private static MethodHandle INDY_call990 () throws Throwable { + if (INDY_call990 != null) + return INDY_call990; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call991; + private static MethodHandle INDY_call991 () throws Throwable { + if (INDY_call991 != null) + return INDY_call991; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call992; + private static MethodHandle INDY_call992 () throws Throwable { + if (INDY_call992 != null) + return INDY_call992; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call993; + private static MethodHandle INDY_call993 () throws Throwable { + if (INDY_call993 != null) + return INDY_call993; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call994; + private static MethodHandle INDY_call994 () throws Throwable { + if (INDY_call994 != null) + return INDY_call994; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call995; + private static MethodHandle INDY_call995 () throws Throwable { + if (INDY_call995 != null) + return INDY_call995; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call996; + private static MethodHandle INDY_call996 () throws Throwable { + if (INDY_call996 != null) + return INDY_call996; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call997; + private static MethodHandle INDY_call997 () throws Throwable { + if (INDY_call997 != null) + return INDY_call997; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call998; + private static MethodHandle INDY_call998 () throws Throwable { + if (INDY_call998 != null) + return INDY_call998; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + private static MethodHandle INDY_call999; + private static MethodHandle INDY_call999 () throws Throwable { + if (INDY_call999 != null) + return INDY_call999; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } + + public boolean runThread(int threadNum) throws Throwable { + final INDIFY_Test x = this; + final String s = "todo el mundo"; + final int i = 123; + + Stresser stresser = createStresser(); + + stresser.start(1); + while ( stresser.continueExecution() ) { + stresser.iteration(); + + long e; + do { + e = _expectedTargetCalls.get(); + } while ( ! _expectedTargetCalls.compareAndSet(e, e + 1000) ); + + Object o0 = (Object) INDY_call0 ().invokeExact(x, s, i); + Object o1 = (Object) INDY_call1 ().invokeExact(x, s, i); + Object o2 = (Object) INDY_call2 ().invokeExact(x, s, i); + Object o3 = (Object) INDY_call3 ().invokeExact(x, s, i); + Object o4 = (Object) INDY_call4 ().invokeExact(x, s, i); + Object o5 = (Object) INDY_call5 ().invokeExact(x, s, i); + Object o6 = (Object) INDY_call6 ().invokeExact(x, s, i); + Object o7 = (Object) INDY_call7 ().invokeExact(x, s, i); + Object o8 = (Object) INDY_call8 ().invokeExact(x, s, i); + Object o9 = (Object) INDY_call9 ().invokeExact(x, s, i); + Object o10 = (Object) INDY_call10 ().invokeExact(x, s, i); + Object o11 = (Object) INDY_call11 ().invokeExact(x, s, i); + Object o12 = (Object) INDY_call12 ().invokeExact(x, s, i); + Object o13 = (Object) INDY_call13 ().invokeExact(x, s, i); + Object o14 = (Object) INDY_call14 ().invokeExact(x, s, i); + Object o15 = (Object) INDY_call15 ().invokeExact(x, s, i); + Object o16 = (Object) INDY_call16 ().invokeExact(x, s, i); + Object o17 = (Object) INDY_call17 ().invokeExact(x, s, i); + Object o18 = (Object) INDY_call18 ().invokeExact(x, s, i); + Object o19 = (Object) INDY_call19 ().invokeExact(x, s, i); + Object o20 = (Object) INDY_call20 ().invokeExact(x, s, i); + Object o21 = (Object) INDY_call21 ().invokeExact(x, s, i); + Object o22 = (Object) INDY_call22 ().invokeExact(x, s, i); + Object o23 = (Object) INDY_call23 ().invokeExact(x, s, i); + Object o24 = (Object) INDY_call24 ().invokeExact(x, s, i); + Object o25 = (Object) INDY_call25 ().invokeExact(x, s, i); + Object o26 = (Object) INDY_call26 ().invokeExact(x, s, i); + Object o27 = (Object) INDY_call27 ().invokeExact(x, s, i); + Object o28 = (Object) INDY_call28 ().invokeExact(x, s, i); + Object o29 = (Object) INDY_call29 ().invokeExact(x, s, i); + Object o30 = (Object) INDY_call30 ().invokeExact(x, s, i); + Object o31 = (Object) INDY_call31 ().invokeExact(x, s, i); + Object o32 = (Object) INDY_call32 ().invokeExact(x, s, i); + Object o33 = (Object) INDY_call33 ().invokeExact(x, s, i); + Object o34 = (Object) INDY_call34 ().invokeExact(x, s, i); + Object o35 = (Object) INDY_call35 ().invokeExact(x, s, i); + Object o36 = (Object) INDY_call36 ().invokeExact(x, s, i); + Object o37 = (Object) INDY_call37 ().invokeExact(x, s, i); + Object o38 = (Object) INDY_call38 ().invokeExact(x, s, i); + Object o39 = (Object) INDY_call39 ().invokeExact(x, s, i); + Object o40 = (Object) INDY_call40 ().invokeExact(x, s, i); + Object o41 = (Object) INDY_call41 ().invokeExact(x, s, i); + Object o42 = (Object) INDY_call42 ().invokeExact(x, s, i); + Object o43 = (Object) INDY_call43 ().invokeExact(x, s, i); + Object o44 = (Object) INDY_call44 ().invokeExact(x, s, i); + Object o45 = (Object) INDY_call45 ().invokeExact(x, s, i); + Object o46 = (Object) INDY_call46 ().invokeExact(x, s, i); + Object o47 = (Object) INDY_call47 ().invokeExact(x, s, i); + Object o48 = (Object) INDY_call48 ().invokeExact(x, s, i); + Object o49 = (Object) INDY_call49 ().invokeExact(x, s, i); + Object o50 = (Object) INDY_call50 ().invokeExact(x, s, i); + Object o51 = (Object) INDY_call51 ().invokeExact(x, s, i); + Object o52 = (Object) INDY_call52 ().invokeExact(x, s, i); + Object o53 = (Object) INDY_call53 ().invokeExact(x, s, i); + Object o54 = (Object) INDY_call54 ().invokeExact(x, s, i); + Object o55 = (Object) INDY_call55 ().invokeExact(x, s, i); + Object o56 = (Object) INDY_call56 ().invokeExact(x, s, i); + Object o57 = (Object) INDY_call57 ().invokeExact(x, s, i); + Object o58 = (Object) INDY_call58 ().invokeExact(x, s, i); + Object o59 = (Object) INDY_call59 ().invokeExact(x, s, i); + Object o60 = (Object) INDY_call60 ().invokeExact(x, s, i); + Object o61 = (Object) INDY_call61 ().invokeExact(x, s, i); + Object o62 = (Object) INDY_call62 ().invokeExact(x, s, i); + Object o63 = (Object) INDY_call63 ().invokeExact(x, s, i); + Object o64 = (Object) INDY_call64 ().invokeExact(x, s, i); + Object o65 = (Object) INDY_call65 ().invokeExact(x, s, i); + Object o66 = (Object) INDY_call66 ().invokeExact(x, s, i); + Object o67 = (Object) INDY_call67 ().invokeExact(x, s, i); + Object o68 = (Object) INDY_call68 ().invokeExact(x, s, i); + Object o69 = (Object) INDY_call69 ().invokeExact(x, s, i); + Object o70 = (Object) INDY_call70 ().invokeExact(x, s, i); + Object o71 = (Object) INDY_call71 ().invokeExact(x, s, i); + Object o72 = (Object) INDY_call72 ().invokeExact(x, s, i); + Object o73 = (Object) INDY_call73 ().invokeExact(x, s, i); + Object o74 = (Object) INDY_call74 ().invokeExact(x, s, i); + Object o75 = (Object) INDY_call75 ().invokeExact(x, s, i); + Object o76 = (Object) INDY_call76 ().invokeExact(x, s, i); + Object o77 = (Object) INDY_call77 ().invokeExact(x, s, i); + Object o78 = (Object) INDY_call78 ().invokeExact(x, s, i); + Object o79 = (Object) INDY_call79 ().invokeExact(x, s, i); + Object o80 = (Object) INDY_call80 ().invokeExact(x, s, i); + Object o81 = (Object) INDY_call81 ().invokeExact(x, s, i); + Object o82 = (Object) INDY_call82 ().invokeExact(x, s, i); + Object o83 = (Object) INDY_call83 ().invokeExact(x, s, i); + Object o84 = (Object) INDY_call84 ().invokeExact(x, s, i); + Object o85 = (Object) INDY_call85 ().invokeExact(x, s, i); + Object o86 = (Object) INDY_call86 ().invokeExact(x, s, i); + Object o87 = (Object) INDY_call87 ().invokeExact(x, s, i); + Object o88 = (Object) INDY_call88 ().invokeExact(x, s, i); + Object o89 = (Object) INDY_call89 ().invokeExact(x, s, i); + Object o90 = (Object) INDY_call90 ().invokeExact(x, s, i); + Object o91 = (Object) INDY_call91 ().invokeExact(x, s, i); + Object o92 = (Object) INDY_call92 ().invokeExact(x, s, i); + Object o93 = (Object) INDY_call93 ().invokeExact(x, s, i); + Object o94 = (Object) INDY_call94 ().invokeExact(x, s, i); + Object o95 = (Object) INDY_call95 ().invokeExact(x, s, i); + Object o96 = (Object) INDY_call96 ().invokeExact(x, s, i); + Object o97 = (Object) INDY_call97 ().invokeExact(x, s, i); + Object o98 = (Object) INDY_call98 ().invokeExact(x, s, i); + Object o99 = (Object) INDY_call99 ().invokeExact(x, s, i); + Object o100 = (Object) INDY_call100 ().invokeExact(x, s, i); + Object o101 = (Object) INDY_call101 ().invokeExact(x, s, i); + Object o102 = (Object) INDY_call102 ().invokeExact(x, s, i); + Object o103 = (Object) INDY_call103 ().invokeExact(x, s, i); + Object o104 = (Object) INDY_call104 ().invokeExact(x, s, i); + Object o105 = (Object) INDY_call105 ().invokeExact(x, s, i); + Object o106 = (Object) INDY_call106 ().invokeExact(x, s, i); + Object o107 = (Object) INDY_call107 ().invokeExact(x, s, i); + Object o108 = (Object) INDY_call108 ().invokeExact(x, s, i); + Object o109 = (Object) INDY_call109 ().invokeExact(x, s, i); + Object o110 = (Object) INDY_call110 ().invokeExact(x, s, i); + Object o111 = (Object) INDY_call111 ().invokeExact(x, s, i); + Object o112 = (Object) INDY_call112 ().invokeExact(x, s, i); + Object o113 = (Object) INDY_call113 ().invokeExact(x, s, i); + Object o114 = (Object) INDY_call114 ().invokeExact(x, s, i); + Object o115 = (Object) INDY_call115 ().invokeExact(x, s, i); + Object o116 = (Object) INDY_call116 ().invokeExact(x, s, i); + Object o117 = (Object) INDY_call117 ().invokeExact(x, s, i); + Object o118 = (Object) INDY_call118 ().invokeExact(x, s, i); + Object o119 = (Object) INDY_call119 ().invokeExact(x, s, i); + Object o120 = (Object) INDY_call120 ().invokeExact(x, s, i); + Object o121 = (Object) INDY_call121 ().invokeExact(x, s, i); + Object o122 = (Object) INDY_call122 ().invokeExact(x, s, i); + Object o123 = (Object) INDY_call123 ().invokeExact(x, s, i); + Object o124 = (Object) INDY_call124 ().invokeExact(x, s, i); + Object o125 = (Object) INDY_call125 ().invokeExact(x, s, i); + Object o126 = (Object) INDY_call126 ().invokeExact(x, s, i); + Object o127 = (Object) INDY_call127 ().invokeExact(x, s, i); + Object o128 = (Object) INDY_call128 ().invokeExact(x, s, i); + Object o129 = (Object) INDY_call129 ().invokeExact(x, s, i); + Object o130 = (Object) INDY_call130 ().invokeExact(x, s, i); + Object o131 = (Object) INDY_call131 ().invokeExact(x, s, i); + Object o132 = (Object) INDY_call132 ().invokeExact(x, s, i); + Object o133 = (Object) INDY_call133 ().invokeExact(x, s, i); + Object o134 = (Object) INDY_call134 ().invokeExact(x, s, i); + Object o135 = (Object) INDY_call135 ().invokeExact(x, s, i); + Object o136 = (Object) INDY_call136 ().invokeExact(x, s, i); + Object o137 = (Object) INDY_call137 ().invokeExact(x, s, i); + Object o138 = (Object) INDY_call138 ().invokeExact(x, s, i); + Object o139 = (Object) INDY_call139 ().invokeExact(x, s, i); + Object o140 = (Object) INDY_call140 ().invokeExact(x, s, i); + Object o141 = (Object) INDY_call141 ().invokeExact(x, s, i); + Object o142 = (Object) INDY_call142 ().invokeExact(x, s, i); + Object o143 = (Object) INDY_call143 ().invokeExact(x, s, i); + Object o144 = (Object) INDY_call144 ().invokeExact(x, s, i); + Object o145 = (Object) INDY_call145 ().invokeExact(x, s, i); + Object o146 = (Object) INDY_call146 ().invokeExact(x, s, i); + Object o147 = (Object) INDY_call147 ().invokeExact(x, s, i); + Object o148 = (Object) INDY_call148 ().invokeExact(x, s, i); + Object o149 = (Object) INDY_call149 ().invokeExact(x, s, i); + Object o150 = (Object) INDY_call150 ().invokeExact(x, s, i); + Object o151 = (Object) INDY_call151 ().invokeExact(x, s, i); + Object o152 = (Object) INDY_call152 ().invokeExact(x, s, i); + Object o153 = (Object) INDY_call153 ().invokeExact(x, s, i); + Object o154 = (Object) INDY_call154 ().invokeExact(x, s, i); + Object o155 = (Object) INDY_call155 ().invokeExact(x, s, i); + Object o156 = (Object) INDY_call156 ().invokeExact(x, s, i); + Object o157 = (Object) INDY_call157 ().invokeExact(x, s, i); + Object o158 = (Object) INDY_call158 ().invokeExact(x, s, i); + Object o159 = (Object) INDY_call159 ().invokeExact(x, s, i); + Object o160 = (Object) INDY_call160 ().invokeExact(x, s, i); + Object o161 = (Object) INDY_call161 ().invokeExact(x, s, i); + Object o162 = (Object) INDY_call162 ().invokeExact(x, s, i); + Object o163 = (Object) INDY_call163 ().invokeExact(x, s, i); + Object o164 = (Object) INDY_call164 ().invokeExact(x, s, i); + Object o165 = (Object) INDY_call165 ().invokeExact(x, s, i); + Object o166 = (Object) INDY_call166 ().invokeExact(x, s, i); + Object o167 = (Object) INDY_call167 ().invokeExact(x, s, i); + Object o168 = (Object) INDY_call168 ().invokeExact(x, s, i); + Object o169 = (Object) INDY_call169 ().invokeExact(x, s, i); + Object o170 = (Object) INDY_call170 ().invokeExact(x, s, i); + Object o171 = (Object) INDY_call171 ().invokeExact(x, s, i); + Object o172 = (Object) INDY_call172 ().invokeExact(x, s, i); + Object o173 = (Object) INDY_call173 ().invokeExact(x, s, i); + Object o174 = (Object) INDY_call174 ().invokeExact(x, s, i); + Object o175 = (Object) INDY_call175 ().invokeExact(x, s, i); + Object o176 = (Object) INDY_call176 ().invokeExact(x, s, i); + Object o177 = (Object) INDY_call177 ().invokeExact(x, s, i); + Object o178 = (Object) INDY_call178 ().invokeExact(x, s, i); + Object o179 = (Object) INDY_call179 ().invokeExact(x, s, i); + Object o180 = (Object) INDY_call180 ().invokeExact(x, s, i); + Object o181 = (Object) INDY_call181 ().invokeExact(x, s, i); + Object o182 = (Object) INDY_call182 ().invokeExact(x, s, i); + Object o183 = (Object) INDY_call183 ().invokeExact(x, s, i); + Object o184 = (Object) INDY_call184 ().invokeExact(x, s, i); + Object o185 = (Object) INDY_call185 ().invokeExact(x, s, i); + Object o186 = (Object) INDY_call186 ().invokeExact(x, s, i); + Object o187 = (Object) INDY_call187 ().invokeExact(x, s, i); + Object o188 = (Object) INDY_call188 ().invokeExact(x, s, i); + Object o189 = (Object) INDY_call189 ().invokeExact(x, s, i); + Object o190 = (Object) INDY_call190 ().invokeExact(x, s, i); + Object o191 = (Object) INDY_call191 ().invokeExact(x, s, i); + Object o192 = (Object) INDY_call192 ().invokeExact(x, s, i); + Object o193 = (Object) INDY_call193 ().invokeExact(x, s, i); + Object o194 = (Object) INDY_call194 ().invokeExact(x, s, i); + Object o195 = (Object) INDY_call195 ().invokeExact(x, s, i); + Object o196 = (Object) INDY_call196 ().invokeExact(x, s, i); + Object o197 = (Object) INDY_call197 ().invokeExact(x, s, i); + Object o198 = (Object) INDY_call198 ().invokeExact(x, s, i); + Object o199 = (Object) INDY_call199 ().invokeExact(x, s, i); + Object o200 = (Object) INDY_call200 ().invokeExact(x, s, i); + Object o201 = (Object) INDY_call201 ().invokeExact(x, s, i); + Object o202 = (Object) INDY_call202 ().invokeExact(x, s, i); + Object o203 = (Object) INDY_call203 ().invokeExact(x, s, i); + Object o204 = (Object) INDY_call204 ().invokeExact(x, s, i); + Object o205 = (Object) INDY_call205 ().invokeExact(x, s, i); + Object o206 = (Object) INDY_call206 ().invokeExact(x, s, i); + Object o207 = (Object) INDY_call207 ().invokeExact(x, s, i); + Object o208 = (Object) INDY_call208 ().invokeExact(x, s, i); + Object o209 = (Object) INDY_call209 ().invokeExact(x, s, i); + Object o210 = (Object) INDY_call210 ().invokeExact(x, s, i); + Object o211 = (Object) INDY_call211 ().invokeExact(x, s, i); + Object o212 = (Object) INDY_call212 ().invokeExact(x, s, i); + Object o213 = (Object) INDY_call213 ().invokeExact(x, s, i); + Object o214 = (Object) INDY_call214 ().invokeExact(x, s, i); + Object o215 = (Object) INDY_call215 ().invokeExact(x, s, i); + Object o216 = (Object) INDY_call216 ().invokeExact(x, s, i); + Object o217 = (Object) INDY_call217 ().invokeExact(x, s, i); + Object o218 = (Object) INDY_call218 ().invokeExact(x, s, i); + Object o219 = (Object) INDY_call219 ().invokeExact(x, s, i); + Object o220 = (Object) INDY_call220 ().invokeExact(x, s, i); + Object o221 = (Object) INDY_call221 ().invokeExact(x, s, i); + Object o222 = (Object) INDY_call222 ().invokeExact(x, s, i); + Object o223 = (Object) INDY_call223 ().invokeExact(x, s, i); + Object o224 = (Object) INDY_call224 ().invokeExact(x, s, i); + Object o225 = (Object) INDY_call225 ().invokeExact(x, s, i); + Object o226 = (Object) INDY_call226 ().invokeExact(x, s, i); + Object o227 = (Object) INDY_call227 ().invokeExact(x, s, i); + Object o228 = (Object) INDY_call228 ().invokeExact(x, s, i); + Object o229 = (Object) INDY_call229 ().invokeExact(x, s, i); + Object o230 = (Object) INDY_call230 ().invokeExact(x, s, i); + Object o231 = (Object) INDY_call231 ().invokeExact(x, s, i); + Object o232 = (Object) INDY_call232 ().invokeExact(x, s, i); + Object o233 = (Object) INDY_call233 ().invokeExact(x, s, i); + Object o234 = (Object) INDY_call234 ().invokeExact(x, s, i); + Object o235 = (Object) INDY_call235 ().invokeExact(x, s, i); + Object o236 = (Object) INDY_call236 ().invokeExact(x, s, i); + Object o237 = (Object) INDY_call237 ().invokeExact(x, s, i); + Object o238 = (Object) INDY_call238 ().invokeExact(x, s, i); + Object o239 = (Object) INDY_call239 ().invokeExact(x, s, i); + Object o240 = (Object) INDY_call240 ().invokeExact(x, s, i); + Object o241 = (Object) INDY_call241 ().invokeExact(x, s, i); + Object o242 = (Object) INDY_call242 ().invokeExact(x, s, i); + Object o243 = (Object) INDY_call243 ().invokeExact(x, s, i); + Object o244 = (Object) INDY_call244 ().invokeExact(x, s, i); + Object o245 = (Object) INDY_call245 ().invokeExact(x, s, i); + Object o246 = (Object) INDY_call246 ().invokeExact(x, s, i); + Object o247 = (Object) INDY_call247 ().invokeExact(x, s, i); + Object o248 = (Object) INDY_call248 ().invokeExact(x, s, i); + Object o249 = (Object) INDY_call249 ().invokeExact(x, s, i); + Object o250 = (Object) INDY_call250 ().invokeExact(x, s, i); + Object o251 = (Object) INDY_call251 ().invokeExact(x, s, i); + Object o252 = (Object) INDY_call252 ().invokeExact(x, s, i); + Object o253 = (Object) INDY_call253 ().invokeExact(x, s, i); + Object o254 = (Object) INDY_call254 ().invokeExact(x, s, i); + Object o255 = (Object) INDY_call255 ().invokeExact(x, s, i); + Object o256 = (Object) INDY_call256 ().invokeExact(x, s, i); + Object o257 = (Object) INDY_call257 ().invokeExact(x, s, i); + Object o258 = (Object) INDY_call258 ().invokeExact(x, s, i); + Object o259 = (Object) INDY_call259 ().invokeExact(x, s, i); + Object o260 = (Object) INDY_call260 ().invokeExact(x, s, i); + Object o261 = (Object) INDY_call261 ().invokeExact(x, s, i); + Object o262 = (Object) INDY_call262 ().invokeExact(x, s, i); + Object o263 = (Object) INDY_call263 ().invokeExact(x, s, i); + Object o264 = (Object) INDY_call264 ().invokeExact(x, s, i); + Object o265 = (Object) INDY_call265 ().invokeExact(x, s, i); + Object o266 = (Object) INDY_call266 ().invokeExact(x, s, i); + Object o267 = (Object) INDY_call267 ().invokeExact(x, s, i); + Object o268 = (Object) INDY_call268 ().invokeExact(x, s, i); + Object o269 = (Object) INDY_call269 ().invokeExact(x, s, i); + Object o270 = (Object) INDY_call270 ().invokeExact(x, s, i); + Object o271 = (Object) INDY_call271 ().invokeExact(x, s, i); + Object o272 = (Object) INDY_call272 ().invokeExact(x, s, i); + Object o273 = (Object) INDY_call273 ().invokeExact(x, s, i); + Object o274 = (Object) INDY_call274 ().invokeExact(x, s, i); + Object o275 = (Object) INDY_call275 ().invokeExact(x, s, i); + Object o276 = (Object) INDY_call276 ().invokeExact(x, s, i); + Object o277 = (Object) INDY_call277 ().invokeExact(x, s, i); + Object o278 = (Object) INDY_call278 ().invokeExact(x, s, i); + Object o279 = (Object) INDY_call279 ().invokeExact(x, s, i); + Object o280 = (Object) INDY_call280 ().invokeExact(x, s, i); + Object o281 = (Object) INDY_call281 ().invokeExact(x, s, i); + Object o282 = (Object) INDY_call282 ().invokeExact(x, s, i); + Object o283 = (Object) INDY_call283 ().invokeExact(x, s, i); + Object o284 = (Object) INDY_call284 ().invokeExact(x, s, i); + Object o285 = (Object) INDY_call285 ().invokeExact(x, s, i); + Object o286 = (Object) INDY_call286 ().invokeExact(x, s, i); + Object o287 = (Object) INDY_call287 ().invokeExact(x, s, i); + Object o288 = (Object) INDY_call288 ().invokeExact(x, s, i); + Object o289 = (Object) INDY_call289 ().invokeExact(x, s, i); + Object o290 = (Object) INDY_call290 ().invokeExact(x, s, i); + Object o291 = (Object) INDY_call291 ().invokeExact(x, s, i); + Object o292 = (Object) INDY_call292 ().invokeExact(x, s, i); + Object o293 = (Object) INDY_call293 ().invokeExact(x, s, i); + Object o294 = (Object) INDY_call294 ().invokeExact(x, s, i); + Object o295 = (Object) INDY_call295 ().invokeExact(x, s, i); + Object o296 = (Object) INDY_call296 ().invokeExact(x, s, i); + Object o297 = (Object) INDY_call297 ().invokeExact(x, s, i); + Object o298 = (Object) INDY_call298 ().invokeExact(x, s, i); + Object o299 = (Object) INDY_call299 ().invokeExact(x, s, i); + Object o300 = (Object) INDY_call300 ().invokeExact(x, s, i); + Object o301 = (Object) INDY_call301 ().invokeExact(x, s, i); + Object o302 = (Object) INDY_call302 ().invokeExact(x, s, i); + Object o303 = (Object) INDY_call303 ().invokeExact(x, s, i); + Object o304 = (Object) INDY_call304 ().invokeExact(x, s, i); + Object o305 = (Object) INDY_call305 ().invokeExact(x, s, i); + Object o306 = (Object) INDY_call306 ().invokeExact(x, s, i); + Object o307 = (Object) INDY_call307 ().invokeExact(x, s, i); + Object o308 = (Object) INDY_call308 ().invokeExact(x, s, i); + Object o309 = (Object) INDY_call309 ().invokeExact(x, s, i); + Object o310 = (Object) INDY_call310 ().invokeExact(x, s, i); + Object o311 = (Object) INDY_call311 ().invokeExact(x, s, i); + Object o312 = (Object) INDY_call312 ().invokeExact(x, s, i); + Object o313 = (Object) INDY_call313 ().invokeExact(x, s, i); + Object o314 = (Object) INDY_call314 ().invokeExact(x, s, i); + Object o315 = (Object) INDY_call315 ().invokeExact(x, s, i); + Object o316 = (Object) INDY_call316 ().invokeExact(x, s, i); + Object o317 = (Object) INDY_call317 ().invokeExact(x, s, i); + Object o318 = (Object) INDY_call318 ().invokeExact(x, s, i); + Object o319 = (Object) INDY_call319 ().invokeExact(x, s, i); + Object o320 = (Object) INDY_call320 ().invokeExact(x, s, i); + Object o321 = (Object) INDY_call321 ().invokeExact(x, s, i); + Object o322 = (Object) INDY_call322 ().invokeExact(x, s, i); + Object o323 = (Object) INDY_call323 ().invokeExact(x, s, i); + Object o324 = (Object) INDY_call324 ().invokeExact(x, s, i); + Object o325 = (Object) INDY_call325 ().invokeExact(x, s, i); + Object o326 = (Object) INDY_call326 ().invokeExact(x, s, i); + Object o327 = (Object) INDY_call327 ().invokeExact(x, s, i); + Object o328 = (Object) INDY_call328 ().invokeExact(x, s, i); + Object o329 = (Object) INDY_call329 ().invokeExact(x, s, i); + Object o330 = (Object) INDY_call330 ().invokeExact(x, s, i); + Object o331 = (Object) INDY_call331 ().invokeExact(x, s, i); + Object o332 = (Object) INDY_call332 ().invokeExact(x, s, i); + Object o333 = (Object) INDY_call333 ().invokeExact(x, s, i); + Object o334 = (Object) INDY_call334 ().invokeExact(x, s, i); + Object o335 = (Object) INDY_call335 ().invokeExact(x, s, i); + Object o336 = (Object) INDY_call336 ().invokeExact(x, s, i); + Object o337 = (Object) INDY_call337 ().invokeExact(x, s, i); + Object o338 = (Object) INDY_call338 ().invokeExact(x, s, i); + Object o339 = (Object) INDY_call339 ().invokeExact(x, s, i); + Object o340 = (Object) INDY_call340 ().invokeExact(x, s, i); + Object o341 = (Object) INDY_call341 ().invokeExact(x, s, i); + Object o342 = (Object) INDY_call342 ().invokeExact(x, s, i); + Object o343 = (Object) INDY_call343 ().invokeExact(x, s, i); + Object o344 = (Object) INDY_call344 ().invokeExact(x, s, i); + Object o345 = (Object) INDY_call345 ().invokeExact(x, s, i); + Object o346 = (Object) INDY_call346 ().invokeExact(x, s, i); + Object o347 = (Object) INDY_call347 ().invokeExact(x, s, i); + Object o348 = (Object) INDY_call348 ().invokeExact(x, s, i); + Object o349 = (Object) INDY_call349 ().invokeExact(x, s, i); + Object o350 = (Object) INDY_call350 ().invokeExact(x, s, i); + Object o351 = (Object) INDY_call351 ().invokeExact(x, s, i); + Object o352 = (Object) INDY_call352 ().invokeExact(x, s, i); + Object o353 = (Object) INDY_call353 ().invokeExact(x, s, i); + Object o354 = (Object) INDY_call354 ().invokeExact(x, s, i); + Object o355 = (Object) INDY_call355 ().invokeExact(x, s, i); + Object o356 = (Object) INDY_call356 ().invokeExact(x, s, i); + Object o357 = (Object) INDY_call357 ().invokeExact(x, s, i); + Object o358 = (Object) INDY_call358 ().invokeExact(x, s, i); + Object o359 = (Object) INDY_call359 ().invokeExact(x, s, i); + Object o360 = (Object) INDY_call360 ().invokeExact(x, s, i); + Object o361 = (Object) INDY_call361 ().invokeExact(x, s, i); + Object o362 = (Object) INDY_call362 ().invokeExact(x, s, i); + Object o363 = (Object) INDY_call363 ().invokeExact(x, s, i); + Object o364 = (Object) INDY_call364 ().invokeExact(x, s, i); + Object o365 = (Object) INDY_call365 ().invokeExact(x, s, i); + Object o366 = (Object) INDY_call366 ().invokeExact(x, s, i); + Object o367 = (Object) INDY_call367 ().invokeExact(x, s, i); + Object o368 = (Object) INDY_call368 ().invokeExact(x, s, i); + Object o369 = (Object) INDY_call369 ().invokeExact(x, s, i); + Object o370 = (Object) INDY_call370 ().invokeExact(x, s, i); + Object o371 = (Object) INDY_call371 ().invokeExact(x, s, i); + Object o372 = (Object) INDY_call372 ().invokeExact(x, s, i); + Object o373 = (Object) INDY_call373 ().invokeExact(x, s, i); + Object o374 = (Object) INDY_call374 ().invokeExact(x, s, i); + Object o375 = (Object) INDY_call375 ().invokeExact(x, s, i); + Object o376 = (Object) INDY_call376 ().invokeExact(x, s, i); + Object o377 = (Object) INDY_call377 ().invokeExact(x, s, i); + Object o378 = (Object) INDY_call378 ().invokeExact(x, s, i); + Object o379 = (Object) INDY_call379 ().invokeExact(x, s, i); + Object o380 = (Object) INDY_call380 ().invokeExact(x, s, i); + Object o381 = (Object) INDY_call381 ().invokeExact(x, s, i); + Object o382 = (Object) INDY_call382 ().invokeExact(x, s, i); + Object o383 = (Object) INDY_call383 ().invokeExact(x, s, i); + Object o384 = (Object) INDY_call384 ().invokeExact(x, s, i); + Object o385 = (Object) INDY_call385 ().invokeExact(x, s, i); + Object o386 = (Object) INDY_call386 ().invokeExact(x, s, i); + Object o387 = (Object) INDY_call387 ().invokeExact(x, s, i); + Object o388 = (Object) INDY_call388 ().invokeExact(x, s, i); + Object o389 = (Object) INDY_call389 ().invokeExact(x, s, i); + Object o390 = (Object) INDY_call390 ().invokeExact(x, s, i); + Object o391 = (Object) INDY_call391 ().invokeExact(x, s, i); + Object o392 = (Object) INDY_call392 ().invokeExact(x, s, i); + Object o393 = (Object) INDY_call393 ().invokeExact(x, s, i); + Object o394 = (Object) INDY_call394 ().invokeExact(x, s, i); + Object o395 = (Object) INDY_call395 ().invokeExact(x, s, i); + Object o396 = (Object) INDY_call396 ().invokeExact(x, s, i); + Object o397 = (Object) INDY_call397 ().invokeExact(x, s, i); + Object o398 = (Object) INDY_call398 ().invokeExact(x, s, i); + Object o399 = (Object) INDY_call399 ().invokeExact(x, s, i); + Object o400 = (Object) INDY_call400 ().invokeExact(x, s, i); + Object o401 = (Object) INDY_call401 ().invokeExact(x, s, i); + Object o402 = (Object) INDY_call402 ().invokeExact(x, s, i); + Object o403 = (Object) INDY_call403 ().invokeExact(x, s, i); + Object o404 = (Object) INDY_call404 ().invokeExact(x, s, i); + Object o405 = (Object) INDY_call405 ().invokeExact(x, s, i); + Object o406 = (Object) INDY_call406 ().invokeExact(x, s, i); + Object o407 = (Object) INDY_call407 ().invokeExact(x, s, i); + Object o408 = (Object) INDY_call408 ().invokeExact(x, s, i); + Object o409 = (Object) INDY_call409 ().invokeExact(x, s, i); + Object o410 = (Object) INDY_call410 ().invokeExact(x, s, i); + Object o411 = (Object) INDY_call411 ().invokeExact(x, s, i); + Object o412 = (Object) INDY_call412 ().invokeExact(x, s, i); + Object o413 = (Object) INDY_call413 ().invokeExact(x, s, i); + Object o414 = (Object) INDY_call414 ().invokeExact(x, s, i); + Object o415 = (Object) INDY_call415 ().invokeExact(x, s, i); + Object o416 = (Object) INDY_call416 ().invokeExact(x, s, i); + Object o417 = (Object) INDY_call417 ().invokeExact(x, s, i); + Object o418 = (Object) INDY_call418 ().invokeExact(x, s, i); + Object o419 = (Object) INDY_call419 ().invokeExact(x, s, i); + Object o420 = (Object) INDY_call420 ().invokeExact(x, s, i); + Object o421 = (Object) INDY_call421 ().invokeExact(x, s, i); + Object o422 = (Object) INDY_call422 ().invokeExact(x, s, i); + Object o423 = (Object) INDY_call423 ().invokeExact(x, s, i); + Object o424 = (Object) INDY_call424 ().invokeExact(x, s, i); + Object o425 = (Object) INDY_call425 ().invokeExact(x, s, i); + Object o426 = (Object) INDY_call426 ().invokeExact(x, s, i); + Object o427 = (Object) INDY_call427 ().invokeExact(x, s, i); + Object o428 = (Object) INDY_call428 ().invokeExact(x, s, i); + Object o429 = (Object) INDY_call429 ().invokeExact(x, s, i); + Object o430 = (Object) INDY_call430 ().invokeExact(x, s, i); + Object o431 = (Object) INDY_call431 ().invokeExact(x, s, i); + Object o432 = (Object) INDY_call432 ().invokeExact(x, s, i); + Object o433 = (Object) INDY_call433 ().invokeExact(x, s, i); + Object o434 = (Object) INDY_call434 ().invokeExact(x, s, i); + Object o435 = (Object) INDY_call435 ().invokeExact(x, s, i); + Object o436 = (Object) INDY_call436 ().invokeExact(x, s, i); + Object o437 = (Object) INDY_call437 ().invokeExact(x, s, i); + Object o438 = (Object) INDY_call438 ().invokeExact(x, s, i); + Object o439 = (Object) INDY_call439 ().invokeExact(x, s, i); + Object o440 = (Object) INDY_call440 ().invokeExact(x, s, i); + Object o441 = (Object) INDY_call441 ().invokeExact(x, s, i); + Object o442 = (Object) INDY_call442 ().invokeExact(x, s, i); + Object o443 = (Object) INDY_call443 ().invokeExact(x, s, i); + Object o444 = (Object) INDY_call444 ().invokeExact(x, s, i); + Object o445 = (Object) INDY_call445 ().invokeExact(x, s, i); + Object o446 = (Object) INDY_call446 ().invokeExact(x, s, i); + Object o447 = (Object) INDY_call447 ().invokeExact(x, s, i); + Object o448 = (Object) INDY_call448 ().invokeExact(x, s, i); + Object o449 = (Object) INDY_call449 ().invokeExact(x, s, i); + Object o450 = (Object) INDY_call450 ().invokeExact(x, s, i); + Object o451 = (Object) INDY_call451 ().invokeExact(x, s, i); + Object o452 = (Object) INDY_call452 ().invokeExact(x, s, i); + Object o453 = (Object) INDY_call453 ().invokeExact(x, s, i); + Object o454 = (Object) INDY_call454 ().invokeExact(x, s, i); + Object o455 = (Object) INDY_call455 ().invokeExact(x, s, i); + Object o456 = (Object) INDY_call456 ().invokeExact(x, s, i); + Object o457 = (Object) INDY_call457 ().invokeExact(x, s, i); + Object o458 = (Object) INDY_call458 ().invokeExact(x, s, i); + Object o459 = (Object) INDY_call459 ().invokeExact(x, s, i); + Object o460 = (Object) INDY_call460 ().invokeExact(x, s, i); + Object o461 = (Object) INDY_call461 ().invokeExact(x, s, i); + Object o462 = (Object) INDY_call462 ().invokeExact(x, s, i); + Object o463 = (Object) INDY_call463 ().invokeExact(x, s, i); + Object o464 = (Object) INDY_call464 ().invokeExact(x, s, i); + Object o465 = (Object) INDY_call465 ().invokeExact(x, s, i); + Object o466 = (Object) INDY_call466 ().invokeExact(x, s, i); + Object o467 = (Object) INDY_call467 ().invokeExact(x, s, i); + Object o468 = (Object) INDY_call468 ().invokeExact(x, s, i); + Object o469 = (Object) INDY_call469 ().invokeExact(x, s, i); + Object o470 = (Object) INDY_call470 ().invokeExact(x, s, i); + Object o471 = (Object) INDY_call471 ().invokeExact(x, s, i); + Object o472 = (Object) INDY_call472 ().invokeExact(x, s, i); + Object o473 = (Object) INDY_call473 ().invokeExact(x, s, i); + Object o474 = (Object) INDY_call474 ().invokeExact(x, s, i); + Object o475 = (Object) INDY_call475 ().invokeExact(x, s, i); + Object o476 = (Object) INDY_call476 ().invokeExact(x, s, i); + Object o477 = (Object) INDY_call477 ().invokeExact(x, s, i); + Object o478 = (Object) INDY_call478 ().invokeExact(x, s, i); + Object o479 = (Object) INDY_call479 ().invokeExact(x, s, i); + Object o480 = (Object) INDY_call480 ().invokeExact(x, s, i); + Object o481 = (Object) INDY_call481 ().invokeExact(x, s, i); + Object o482 = (Object) INDY_call482 ().invokeExact(x, s, i); + Object o483 = (Object) INDY_call483 ().invokeExact(x, s, i); + Object o484 = (Object) INDY_call484 ().invokeExact(x, s, i); + Object o485 = (Object) INDY_call485 ().invokeExact(x, s, i); + Object o486 = (Object) INDY_call486 ().invokeExact(x, s, i); + Object o487 = (Object) INDY_call487 ().invokeExact(x, s, i); + Object o488 = (Object) INDY_call488 ().invokeExact(x, s, i); + Object o489 = (Object) INDY_call489 ().invokeExact(x, s, i); + Object o490 = (Object) INDY_call490 ().invokeExact(x, s, i); + Object o491 = (Object) INDY_call491 ().invokeExact(x, s, i); + Object o492 = (Object) INDY_call492 ().invokeExact(x, s, i); + Object o493 = (Object) INDY_call493 ().invokeExact(x, s, i); + Object o494 = (Object) INDY_call494 ().invokeExact(x, s, i); + Object o495 = (Object) INDY_call495 ().invokeExact(x, s, i); + Object o496 = (Object) INDY_call496 ().invokeExact(x, s, i); + Object o497 = (Object) INDY_call497 ().invokeExact(x, s, i); + Object o498 = (Object) INDY_call498 ().invokeExact(x, s, i); + Object o499 = (Object) INDY_call499 ().invokeExact(x, s, i); + Object o500 = (Object) INDY_call500 ().invokeExact(x, s, i); + Object o501 = (Object) INDY_call501 ().invokeExact(x, s, i); + Object o502 = (Object) INDY_call502 ().invokeExact(x, s, i); + Object o503 = (Object) INDY_call503 ().invokeExact(x, s, i); + Object o504 = (Object) INDY_call504 ().invokeExact(x, s, i); + Object o505 = (Object) INDY_call505 ().invokeExact(x, s, i); + Object o506 = (Object) INDY_call506 ().invokeExact(x, s, i); + Object o507 = (Object) INDY_call507 ().invokeExact(x, s, i); + Object o508 = (Object) INDY_call508 ().invokeExact(x, s, i); + Object o509 = (Object) INDY_call509 ().invokeExact(x, s, i); + Object o510 = (Object) INDY_call510 ().invokeExact(x, s, i); + Object o511 = (Object) INDY_call511 ().invokeExact(x, s, i); + Object o512 = (Object) INDY_call512 ().invokeExact(x, s, i); + Object o513 = (Object) INDY_call513 ().invokeExact(x, s, i); + Object o514 = (Object) INDY_call514 ().invokeExact(x, s, i); + Object o515 = (Object) INDY_call515 ().invokeExact(x, s, i); + Object o516 = (Object) INDY_call516 ().invokeExact(x, s, i); + Object o517 = (Object) INDY_call517 ().invokeExact(x, s, i); + Object o518 = (Object) INDY_call518 ().invokeExact(x, s, i); + Object o519 = (Object) INDY_call519 ().invokeExact(x, s, i); + Object o520 = (Object) INDY_call520 ().invokeExact(x, s, i); + Object o521 = (Object) INDY_call521 ().invokeExact(x, s, i); + Object o522 = (Object) INDY_call522 ().invokeExact(x, s, i); + Object o523 = (Object) INDY_call523 ().invokeExact(x, s, i); + Object o524 = (Object) INDY_call524 ().invokeExact(x, s, i); + Object o525 = (Object) INDY_call525 ().invokeExact(x, s, i); + Object o526 = (Object) INDY_call526 ().invokeExact(x, s, i); + Object o527 = (Object) INDY_call527 ().invokeExact(x, s, i); + Object o528 = (Object) INDY_call528 ().invokeExact(x, s, i); + Object o529 = (Object) INDY_call529 ().invokeExact(x, s, i); + Object o530 = (Object) INDY_call530 ().invokeExact(x, s, i); + Object o531 = (Object) INDY_call531 ().invokeExact(x, s, i); + Object o532 = (Object) INDY_call532 ().invokeExact(x, s, i); + Object o533 = (Object) INDY_call533 ().invokeExact(x, s, i); + Object o534 = (Object) INDY_call534 ().invokeExact(x, s, i); + Object o535 = (Object) INDY_call535 ().invokeExact(x, s, i); + Object o536 = (Object) INDY_call536 ().invokeExact(x, s, i); + Object o537 = (Object) INDY_call537 ().invokeExact(x, s, i); + Object o538 = (Object) INDY_call538 ().invokeExact(x, s, i); + Object o539 = (Object) INDY_call539 ().invokeExact(x, s, i); + Object o540 = (Object) INDY_call540 ().invokeExact(x, s, i); + Object o541 = (Object) INDY_call541 ().invokeExact(x, s, i); + Object o542 = (Object) INDY_call542 ().invokeExact(x, s, i); + Object o543 = (Object) INDY_call543 ().invokeExact(x, s, i); + Object o544 = (Object) INDY_call544 ().invokeExact(x, s, i); + Object o545 = (Object) INDY_call545 ().invokeExact(x, s, i); + Object o546 = (Object) INDY_call546 ().invokeExact(x, s, i); + Object o547 = (Object) INDY_call547 ().invokeExact(x, s, i); + Object o548 = (Object) INDY_call548 ().invokeExact(x, s, i); + Object o549 = (Object) INDY_call549 ().invokeExact(x, s, i); + Object o550 = (Object) INDY_call550 ().invokeExact(x, s, i); + Object o551 = (Object) INDY_call551 ().invokeExact(x, s, i); + Object o552 = (Object) INDY_call552 ().invokeExact(x, s, i); + Object o553 = (Object) INDY_call553 ().invokeExact(x, s, i); + Object o554 = (Object) INDY_call554 ().invokeExact(x, s, i); + Object o555 = (Object) INDY_call555 ().invokeExact(x, s, i); + Object o556 = (Object) INDY_call556 ().invokeExact(x, s, i); + Object o557 = (Object) INDY_call557 ().invokeExact(x, s, i); + Object o558 = (Object) INDY_call558 ().invokeExact(x, s, i); + Object o559 = (Object) INDY_call559 ().invokeExact(x, s, i); + Object o560 = (Object) INDY_call560 ().invokeExact(x, s, i); + Object o561 = (Object) INDY_call561 ().invokeExact(x, s, i); + Object o562 = (Object) INDY_call562 ().invokeExact(x, s, i); + Object o563 = (Object) INDY_call563 ().invokeExact(x, s, i); + Object o564 = (Object) INDY_call564 ().invokeExact(x, s, i); + Object o565 = (Object) INDY_call565 ().invokeExact(x, s, i); + Object o566 = (Object) INDY_call566 ().invokeExact(x, s, i); + Object o567 = (Object) INDY_call567 ().invokeExact(x, s, i); + Object o568 = (Object) INDY_call568 ().invokeExact(x, s, i); + Object o569 = (Object) INDY_call569 ().invokeExact(x, s, i); + Object o570 = (Object) INDY_call570 ().invokeExact(x, s, i); + Object o571 = (Object) INDY_call571 ().invokeExact(x, s, i); + Object o572 = (Object) INDY_call572 ().invokeExact(x, s, i); + Object o573 = (Object) INDY_call573 ().invokeExact(x, s, i); + Object o574 = (Object) INDY_call574 ().invokeExact(x, s, i); + Object o575 = (Object) INDY_call575 ().invokeExact(x, s, i); + Object o576 = (Object) INDY_call576 ().invokeExact(x, s, i); + Object o577 = (Object) INDY_call577 ().invokeExact(x, s, i); + Object o578 = (Object) INDY_call578 ().invokeExact(x, s, i); + Object o579 = (Object) INDY_call579 ().invokeExact(x, s, i); + Object o580 = (Object) INDY_call580 ().invokeExact(x, s, i); + Object o581 = (Object) INDY_call581 ().invokeExact(x, s, i); + Object o582 = (Object) INDY_call582 ().invokeExact(x, s, i); + Object o583 = (Object) INDY_call583 ().invokeExact(x, s, i); + Object o584 = (Object) INDY_call584 ().invokeExact(x, s, i); + Object o585 = (Object) INDY_call585 ().invokeExact(x, s, i); + Object o586 = (Object) INDY_call586 ().invokeExact(x, s, i); + Object o587 = (Object) INDY_call587 ().invokeExact(x, s, i); + Object o588 = (Object) INDY_call588 ().invokeExact(x, s, i); + Object o589 = (Object) INDY_call589 ().invokeExact(x, s, i); + Object o590 = (Object) INDY_call590 ().invokeExact(x, s, i); + Object o591 = (Object) INDY_call591 ().invokeExact(x, s, i); + Object o592 = (Object) INDY_call592 ().invokeExact(x, s, i); + Object o593 = (Object) INDY_call593 ().invokeExact(x, s, i); + Object o594 = (Object) INDY_call594 ().invokeExact(x, s, i); + Object o595 = (Object) INDY_call595 ().invokeExact(x, s, i); + Object o596 = (Object) INDY_call596 ().invokeExact(x, s, i); + Object o597 = (Object) INDY_call597 ().invokeExact(x, s, i); + Object o598 = (Object) INDY_call598 ().invokeExact(x, s, i); + Object o599 = (Object) INDY_call599 ().invokeExact(x, s, i); + Object o600 = (Object) INDY_call600 ().invokeExact(x, s, i); + Object o601 = (Object) INDY_call601 ().invokeExact(x, s, i); + Object o602 = (Object) INDY_call602 ().invokeExact(x, s, i); + Object o603 = (Object) INDY_call603 ().invokeExact(x, s, i); + Object o604 = (Object) INDY_call604 ().invokeExact(x, s, i); + Object o605 = (Object) INDY_call605 ().invokeExact(x, s, i); + Object o606 = (Object) INDY_call606 ().invokeExact(x, s, i); + Object o607 = (Object) INDY_call607 ().invokeExact(x, s, i); + Object o608 = (Object) INDY_call608 ().invokeExact(x, s, i); + Object o609 = (Object) INDY_call609 ().invokeExact(x, s, i); + Object o610 = (Object) INDY_call610 ().invokeExact(x, s, i); + Object o611 = (Object) INDY_call611 ().invokeExact(x, s, i); + Object o612 = (Object) INDY_call612 ().invokeExact(x, s, i); + Object o613 = (Object) INDY_call613 ().invokeExact(x, s, i); + Object o614 = (Object) INDY_call614 ().invokeExact(x, s, i); + Object o615 = (Object) INDY_call615 ().invokeExact(x, s, i); + Object o616 = (Object) INDY_call616 ().invokeExact(x, s, i); + Object o617 = (Object) INDY_call617 ().invokeExact(x, s, i); + Object o618 = (Object) INDY_call618 ().invokeExact(x, s, i); + Object o619 = (Object) INDY_call619 ().invokeExact(x, s, i); + Object o620 = (Object) INDY_call620 ().invokeExact(x, s, i); + Object o621 = (Object) INDY_call621 ().invokeExact(x, s, i); + Object o622 = (Object) INDY_call622 ().invokeExact(x, s, i); + Object o623 = (Object) INDY_call623 ().invokeExact(x, s, i); + Object o624 = (Object) INDY_call624 ().invokeExact(x, s, i); + Object o625 = (Object) INDY_call625 ().invokeExact(x, s, i); + Object o626 = (Object) INDY_call626 ().invokeExact(x, s, i); + Object o627 = (Object) INDY_call627 ().invokeExact(x, s, i); + Object o628 = (Object) INDY_call628 ().invokeExact(x, s, i); + Object o629 = (Object) INDY_call629 ().invokeExact(x, s, i); + Object o630 = (Object) INDY_call630 ().invokeExact(x, s, i); + Object o631 = (Object) INDY_call631 ().invokeExact(x, s, i); + Object o632 = (Object) INDY_call632 ().invokeExact(x, s, i); + Object o633 = (Object) INDY_call633 ().invokeExact(x, s, i); + Object o634 = (Object) INDY_call634 ().invokeExact(x, s, i); + Object o635 = (Object) INDY_call635 ().invokeExact(x, s, i); + Object o636 = (Object) INDY_call636 ().invokeExact(x, s, i); + Object o637 = (Object) INDY_call637 ().invokeExact(x, s, i); + Object o638 = (Object) INDY_call638 ().invokeExact(x, s, i); + Object o639 = (Object) INDY_call639 ().invokeExact(x, s, i); + Object o640 = (Object) INDY_call640 ().invokeExact(x, s, i); + Object o641 = (Object) INDY_call641 ().invokeExact(x, s, i); + Object o642 = (Object) INDY_call642 ().invokeExact(x, s, i); + Object o643 = (Object) INDY_call643 ().invokeExact(x, s, i); + Object o644 = (Object) INDY_call644 ().invokeExact(x, s, i); + Object o645 = (Object) INDY_call645 ().invokeExact(x, s, i); + Object o646 = (Object) INDY_call646 ().invokeExact(x, s, i); + Object o647 = (Object) INDY_call647 ().invokeExact(x, s, i); + Object o648 = (Object) INDY_call648 ().invokeExact(x, s, i); + Object o649 = (Object) INDY_call649 ().invokeExact(x, s, i); + Object o650 = (Object) INDY_call650 ().invokeExact(x, s, i); + Object o651 = (Object) INDY_call651 ().invokeExact(x, s, i); + Object o652 = (Object) INDY_call652 ().invokeExact(x, s, i); + Object o653 = (Object) INDY_call653 ().invokeExact(x, s, i); + Object o654 = (Object) INDY_call654 ().invokeExact(x, s, i); + Object o655 = (Object) INDY_call655 ().invokeExact(x, s, i); + Object o656 = (Object) INDY_call656 ().invokeExact(x, s, i); + Object o657 = (Object) INDY_call657 ().invokeExact(x, s, i); + Object o658 = (Object) INDY_call658 ().invokeExact(x, s, i); + Object o659 = (Object) INDY_call659 ().invokeExact(x, s, i); + Object o660 = (Object) INDY_call660 ().invokeExact(x, s, i); + Object o661 = (Object) INDY_call661 ().invokeExact(x, s, i); + Object o662 = (Object) INDY_call662 ().invokeExact(x, s, i); + Object o663 = (Object) INDY_call663 ().invokeExact(x, s, i); + Object o664 = (Object) INDY_call664 ().invokeExact(x, s, i); + Object o665 = (Object) INDY_call665 ().invokeExact(x, s, i); + Object o666 = (Object) INDY_call666 ().invokeExact(x, s, i); + Object o667 = (Object) INDY_call667 ().invokeExact(x, s, i); + Object o668 = (Object) INDY_call668 ().invokeExact(x, s, i); + Object o669 = (Object) INDY_call669 ().invokeExact(x, s, i); + Object o670 = (Object) INDY_call670 ().invokeExact(x, s, i); + Object o671 = (Object) INDY_call671 ().invokeExact(x, s, i); + Object o672 = (Object) INDY_call672 ().invokeExact(x, s, i); + Object o673 = (Object) INDY_call673 ().invokeExact(x, s, i); + Object o674 = (Object) INDY_call674 ().invokeExact(x, s, i); + Object o675 = (Object) INDY_call675 ().invokeExact(x, s, i); + Object o676 = (Object) INDY_call676 ().invokeExact(x, s, i); + Object o677 = (Object) INDY_call677 ().invokeExact(x, s, i); + Object o678 = (Object) INDY_call678 ().invokeExact(x, s, i); + Object o679 = (Object) INDY_call679 ().invokeExact(x, s, i); + Object o680 = (Object) INDY_call680 ().invokeExact(x, s, i); + Object o681 = (Object) INDY_call681 ().invokeExact(x, s, i); + Object o682 = (Object) INDY_call682 ().invokeExact(x, s, i); + Object o683 = (Object) INDY_call683 ().invokeExact(x, s, i); + Object o684 = (Object) INDY_call684 ().invokeExact(x, s, i); + Object o685 = (Object) INDY_call685 ().invokeExact(x, s, i); + Object o686 = (Object) INDY_call686 ().invokeExact(x, s, i); + Object o687 = (Object) INDY_call687 ().invokeExact(x, s, i); + Object o688 = (Object) INDY_call688 ().invokeExact(x, s, i); + Object o689 = (Object) INDY_call689 ().invokeExact(x, s, i); + Object o690 = (Object) INDY_call690 ().invokeExact(x, s, i); + Object o691 = (Object) INDY_call691 ().invokeExact(x, s, i); + Object o692 = (Object) INDY_call692 ().invokeExact(x, s, i); + Object o693 = (Object) INDY_call693 ().invokeExact(x, s, i); + Object o694 = (Object) INDY_call694 ().invokeExact(x, s, i); + Object o695 = (Object) INDY_call695 ().invokeExact(x, s, i); + Object o696 = (Object) INDY_call696 ().invokeExact(x, s, i); + Object o697 = (Object) INDY_call697 ().invokeExact(x, s, i); + Object o698 = (Object) INDY_call698 ().invokeExact(x, s, i); + Object o699 = (Object) INDY_call699 ().invokeExact(x, s, i); + Object o700 = (Object) INDY_call700 ().invokeExact(x, s, i); + Object o701 = (Object) INDY_call701 ().invokeExact(x, s, i); + Object o702 = (Object) INDY_call702 ().invokeExact(x, s, i); + Object o703 = (Object) INDY_call703 ().invokeExact(x, s, i); + Object o704 = (Object) INDY_call704 ().invokeExact(x, s, i); + Object o705 = (Object) INDY_call705 ().invokeExact(x, s, i); + Object o706 = (Object) INDY_call706 ().invokeExact(x, s, i); + Object o707 = (Object) INDY_call707 ().invokeExact(x, s, i); + Object o708 = (Object) INDY_call708 ().invokeExact(x, s, i); + Object o709 = (Object) INDY_call709 ().invokeExact(x, s, i); + Object o710 = (Object) INDY_call710 ().invokeExact(x, s, i); + Object o711 = (Object) INDY_call711 ().invokeExact(x, s, i); + Object o712 = (Object) INDY_call712 ().invokeExact(x, s, i); + Object o713 = (Object) INDY_call713 ().invokeExact(x, s, i); + Object o714 = (Object) INDY_call714 ().invokeExact(x, s, i); + Object o715 = (Object) INDY_call715 ().invokeExact(x, s, i); + Object o716 = (Object) INDY_call716 ().invokeExact(x, s, i); + Object o717 = (Object) INDY_call717 ().invokeExact(x, s, i); + Object o718 = (Object) INDY_call718 ().invokeExact(x, s, i); + Object o719 = (Object) INDY_call719 ().invokeExact(x, s, i); + Object o720 = (Object) INDY_call720 ().invokeExact(x, s, i); + Object o721 = (Object) INDY_call721 ().invokeExact(x, s, i); + Object o722 = (Object) INDY_call722 ().invokeExact(x, s, i); + Object o723 = (Object) INDY_call723 ().invokeExact(x, s, i); + Object o724 = (Object) INDY_call724 ().invokeExact(x, s, i); + Object o725 = (Object) INDY_call725 ().invokeExact(x, s, i); + Object o726 = (Object) INDY_call726 ().invokeExact(x, s, i); + Object o727 = (Object) INDY_call727 ().invokeExact(x, s, i); + Object o728 = (Object) INDY_call728 ().invokeExact(x, s, i); + Object o729 = (Object) INDY_call729 ().invokeExact(x, s, i); + Object o730 = (Object) INDY_call730 ().invokeExact(x, s, i); + Object o731 = (Object) INDY_call731 ().invokeExact(x, s, i); + Object o732 = (Object) INDY_call732 ().invokeExact(x, s, i); + Object o733 = (Object) INDY_call733 ().invokeExact(x, s, i); + Object o734 = (Object) INDY_call734 ().invokeExact(x, s, i); + Object o735 = (Object) INDY_call735 ().invokeExact(x, s, i); + Object o736 = (Object) INDY_call736 ().invokeExact(x, s, i); + Object o737 = (Object) INDY_call737 ().invokeExact(x, s, i); + Object o738 = (Object) INDY_call738 ().invokeExact(x, s, i); + Object o739 = (Object) INDY_call739 ().invokeExact(x, s, i); + Object o740 = (Object) INDY_call740 ().invokeExact(x, s, i); + Object o741 = (Object) INDY_call741 ().invokeExact(x, s, i); + Object o742 = (Object) INDY_call742 ().invokeExact(x, s, i); + Object o743 = (Object) INDY_call743 ().invokeExact(x, s, i); + Object o744 = (Object) INDY_call744 ().invokeExact(x, s, i); + Object o745 = (Object) INDY_call745 ().invokeExact(x, s, i); + Object o746 = (Object) INDY_call746 ().invokeExact(x, s, i); + Object o747 = (Object) INDY_call747 ().invokeExact(x, s, i); + Object o748 = (Object) INDY_call748 ().invokeExact(x, s, i); + Object o749 = (Object) INDY_call749 ().invokeExact(x, s, i); + Object o750 = (Object) INDY_call750 ().invokeExact(x, s, i); + Object o751 = (Object) INDY_call751 ().invokeExact(x, s, i); + Object o752 = (Object) INDY_call752 ().invokeExact(x, s, i); + Object o753 = (Object) INDY_call753 ().invokeExact(x, s, i); + Object o754 = (Object) INDY_call754 ().invokeExact(x, s, i); + Object o755 = (Object) INDY_call755 ().invokeExact(x, s, i); + Object o756 = (Object) INDY_call756 ().invokeExact(x, s, i); + Object o757 = (Object) INDY_call757 ().invokeExact(x, s, i); + Object o758 = (Object) INDY_call758 ().invokeExact(x, s, i); + Object o759 = (Object) INDY_call759 ().invokeExact(x, s, i); + Object o760 = (Object) INDY_call760 ().invokeExact(x, s, i); + Object o761 = (Object) INDY_call761 ().invokeExact(x, s, i); + Object o762 = (Object) INDY_call762 ().invokeExact(x, s, i); + Object o763 = (Object) INDY_call763 ().invokeExact(x, s, i); + Object o764 = (Object) INDY_call764 ().invokeExact(x, s, i); + Object o765 = (Object) INDY_call765 ().invokeExact(x, s, i); + Object o766 = (Object) INDY_call766 ().invokeExact(x, s, i); + Object o767 = (Object) INDY_call767 ().invokeExact(x, s, i); + Object o768 = (Object) INDY_call768 ().invokeExact(x, s, i); + Object o769 = (Object) INDY_call769 ().invokeExact(x, s, i); + Object o770 = (Object) INDY_call770 ().invokeExact(x, s, i); + Object o771 = (Object) INDY_call771 ().invokeExact(x, s, i); + Object o772 = (Object) INDY_call772 ().invokeExact(x, s, i); + Object o773 = (Object) INDY_call773 ().invokeExact(x, s, i); + Object o774 = (Object) INDY_call774 ().invokeExact(x, s, i); + Object o775 = (Object) INDY_call775 ().invokeExact(x, s, i); + Object o776 = (Object) INDY_call776 ().invokeExact(x, s, i); + Object o777 = (Object) INDY_call777 ().invokeExact(x, s, i); + Object o778 = (Object) INDY_call778 ().invokeExact(x, s, i); + Object o779 = (Object) INDY_call779 ().invokeExact(x, s, i); + Object o780 = (Object) INDY_call780 ().invokeExact(x, s, i); + Object o781 = (Object) INDY_call781 ().invokeExact(x, s, i); + Object o782 = (Object) INDY_call782 ().invokeExact(x, s, i); + Object o783 = (Object) INDY_call783 ().invokeExact(x, s, i); + Object o784 = (Object) INDY_call784 ().invokeExact(x, s, i); + Object o785 = (Object) INDY_call785 ().invokeExact(x, s, i); + Object o786 = (Object) INDY_call786 ().invokeExact(x, s, i); + Object o787 = (Object) INDY_call787 ().invokeExact(x, s, i); + Object o788 = (Object) INDY_call788 ().invokeExact(x, s, i); + Object o789 = (Object) INDY_call789 ().invokeExact(x, s, i); + Object o790 = (Object) INDY_call790 ().invokeExact(x, s, i); + Object o791 = (Object) INDY_call791 ().invokeExact(x, s, i); + Object o792 = (Object) INDY_call792 ().invokeExact(x, s, i); + Object o793 = (Object) INDY_call793 ().invokeExact(x, s, i); + Object o794 = (Object) INDY_call794 ().invokeExact(x, s, i); + Object o795 = (Object) INDY_call795 ().invokeExact(x, s, i); + Object o796 = (Object) INDY_call796 ().invokeExact(x, s, i); + Object o797 = (Object) INDY_call797 ().invokeExact(x, s, i); + Object o798 = (Object) INDY_call798 ().invokeExact(x, s, i); + Object o799 = (Object) INDY_call799 ().invokeExact(x, s, i); + Object o800 = (Object) INDY_call800 ().invokeExact(x, s, i); + Object o801 = (Object) INDY_call801 ().invokeExact(x, s, i); + Object o802 = (Object) INDY_call802 ().invokeExact(x, s, i); + Object o803 = (Object) INDY_call803 ().invokeExact(x, s, i); + Object o804 = (Object) INDY_call804 ().invokeExact(x, s, i); + Object o805 = (Object) INDY_call805 ().invokeExact(x, s, i); + Object o806 = (Object) INDY_call806 ().invokeExact(x, s, i); + Object o807 = (Object) INDY_call807 ().invokeExact(x, s, i); + Object o808 = (Object) INDY_call808 ().invokeExact(x, s, i); + Object o809 = (Object) INDY_call809 ().invokeExact(x, s, i); + Object o810 = (Object) INDY_call810 ().invokeExact(x, s, i); + Object o811 = (Object) INDY_call811 ().invokeExact(x, s, i); + Object o812 = (Object) INDY_call812 ().invokeExact(x, s, i); + Object o813 = (Object) INDY_call813 ().invokeExact(x, s, i); + Object o814 = (Object) INDY_call814 ().invokeExact(x, s, i); + Object o815 = (Object) INDY_call815 ().invokeExact(x, s, i); + Object o816 = (Object) INDY_call816 ().invokeExact(x, s, i); + Object o817 = (Object) INDY_call817 ().invokeExact(x, s, i); + Object o818 = (Object) INDY_call818 ().invokeExact(x, s, i); + Object o819 = (Object) INDY_call819 ().invokeExact(x, s, i); + Object o820 = (Object) INDY_call820 ().invokeExact(x, s, i); + Object o821 = (Object) INDY_call821 ().invokeExact(x, s, i); + Object o822 = (Object) INDY_call822 ().invokeExact(x, s, i); + Object o823 = (Object) INDY_call823 ().invokeExact(x, s, i); + Object o824 = (Object) INDY_call824 ().invokeExact(x, s, i); + Object o825 = (Object) INDY_call825 ().invokeExact(x, s, i); + Object o826 = (Object) INDY_call826 ().invokeExact(x, s, i); + Object o827 = (Object) INDY_call827 ().invokeExact(x, s, i); + Object o828 = (Object) INDY_call828 ().invokeExact(x, s, i); + Object o829 = (Object) INDY_call829 ().invokeExact(x, s, i); + Object o830 = (Object) INDY_call830 ().invokeExact(x, s, i); + Object o831 = (Object) INDY_call831 ().invokeExact(x, s, i); + Object o832 = (Object) INDY_call832 ().invokeExact(x, s, i); + Object o833 = (Object) INDY_call833 ().invokeExact(x, s, i); + Object o834 = (Object) INDY_call834 ().invokeExact(x, s, i); + Object o835 = (Object) INDY_call835 ().invokeExact(x, s, i); + Object o836 = (Object) INDY_call836 ().invokeExact(x, s, i); + Object o837 = (Object) INDY_call837 ().invokeExact(x, s, i); + Object o838 = (Object) INDY_call838 ().invokeExact(x, s, i); + Object o839 = (Object) INDY_call839 ().invokeExact(x, s, i); + Object o840 = (Object) INDY_call840 ().invokeExact(x, s, i); + Object o841 = (Object) INDY_call841 ().invokeExact(x, s, i); + Object o842 = (Object) INDY_call842 ().invokeExact(x, s, i); + Object o843 = (Object) INDY_call843 ().invokeExact(x, s, i); + Object o844 = (Object) INDY_call844 ().invokeExact(x, s, i); + Object o845 = (Object) INDY_call845 ().invokeExact(x, s, i); + Object o846 = (Object) INDY_call846 ().invokeExact(x, s, i); + Object o847 = (Object) INDY_call847 ().invokeExact(x, s, i); + Object o848 = (Object) INDY_call848 ().invokeExact(x, s, i); + Object o849 = (Object) INDY_call849 ().invokeExact(x, s, i); + Object o850 = (Object) INDY_call850 ().invokeExact(x, s, i); + Object o851 = (Object) INDY_call851 ().invokeExact(x, s, i); + Object o852 = (Object) INDY_call852 ().invokeExact(x, s, i); + Object o853 = (Object) INDY_call853 ().invokeExact(x, s, i); + Object o854 = (Object) INDY_call854 ().invokeExact(x, s, i); + Object o855 = (Object) INDY_call855 ().invokeExact(x, s, i); + Object o856 = (Object) INDY_call856 ().invokeExact(x, s, i); + Object o857 = (Object) INDY_call857 ().invokeExact(x, s, i); + Object o858 = (Object) INDY_call858 ().invokeExact(x, s, i); + Object o859 = (Object) INDY_call859 ().invokeExact(x, s, i); + Object o860 = (Object) INDY_call860 ().invokeExact(x, s, i); + Object o861 = (Object) INDY_call861 ().invokeExact(x, s, i); + Object o862 = (Object) INDY_call862 ().invokeExact(x, s, i); + Object o863 = (Object) INDY_call863 ().invokeExact(x, s, i); + Object o864 = (Object) INDY_call864 ().invokeExact(x, s, i); + Object o865 = (Object) INDY_call865 ().invokeExact(x, s, i); + Object o866 = (Object) INDY_call866 ().invokeExact(x, s, i); + Object o867 = (Object) INDY_call867 ().invokeExact(x, s, i); + Object o868 = (Object) INDY_call868 ().invokeExact(x, s, i); + Object o869 = (Object) INDY_call869 ().invokeExact(x, s, i); + Object o870 = (Object) INDY_call870 ().invokeExact(x, s, i); + Object o871 = (Object) INDY_call871 ().invokeExact(x, s, i); + Object o872 = (Object) INDY_call872 ().invokeExact(x, s, i); + Object o873 = (Object) INDY_call873 ().invokeExact(x, s, i); + Object o874 = (Object) INDY_call874 ().invokeExact(x, s, i); + Object o875 = (Object) INDY_call875 ().invokeExact(x, s, i); + Object o876 = (Object) INDY_call876 ().invokeExact(x, s, i); + Object o877 = (Object) INDY_call877 ().invokeExact(x, s, i); + Object o878 = (Object) INDY_call878 ().invokeExact(x, s, i); + Object o879 = (Object) INDY_call879 ().invokeExact(x, s, i); + Object o880 = (Object) INDY_call880 ().invokeExact(x, s, i); + Object o881 = (Object) INDY_call881 ().invokeExact(x, s, i); + Object o882 = (Object) INDY_call882 ().invokeExact(x, s, i); + Object o883 = (Object) INDY_call883 ().invokeExact(x, s, i); + Object o884 = (Object) INDY_call884 ().invokeExact(x, s, i); + Object o885 = (Object) INDY_call885 ().invokeExact(x, s, i); + Object o886 = (Object) INDY_call886 ().invokeExact(x, s, i); + Object o887 = (Object) INDY_call887 ().invokeExact(x, s, i); + Object o888 = (Object) INDY_call888 ().invokeExact(x, s, i); + Object o889 = (Object) INDY_call889 ().invokeExact(x, s, i); + Object o890 = (Object) INDY_call890 ().invokeExact(x, s, i); + Object o891 = (Object) INDY_call891 ().invokeExact(x, s, i); + Object o892 = (Object) INDY_call892 ().invokeExact(x, s, i); + Object o893 = (Object) INDY_call893 ().invokeExact(x, s, i); + Object o894 = (Object) INDY_call894 ().invokeExact(x, s, i); + Object o895 = (Object) INDY_call895 ().invokeExact(x, s, i); + Object o896 = (Object) INDY_call896 ().invokeExact(x, s, i); + Object o897 = (Object) INDY_call897 ().invokeExact(x, s, i); + Object o898 = (Object) INDY_call898 ().invokeExact(x, s, i); + Object o899 = (Object) INDY_call899 ().invokeExact(x, s, i); + Object o900 = (Object) INDY_call900 ().invokeExact(x, s, i); + Object o901 = (Object) INDY_call901 ().invokeExact(x, s, i); + Object o902 = (Object) INDY_call902 ().invokeExact(x, s, i); + Object o903 = (Object) INDY_call903 ().invokeExact(x, s, i); + Object o904 = (Object) INDY_call904 ().invokeExact(x, s, i); + Object o905 = (Object) INDY_call905 ().invokeExact(x, s, i); + Object o906 = (Object) INDY_call906 ().invokeExact(x, s, i); + Object o907 = (Object) INDY_call907 ().invokeExact(x, s, i); + Object o908 = (Object) INDY_call908 ().invokeExact(x, s, i); + Object o909 = (Object) INDY_call909 ().invokeExact(x, s, i); + Object o910 = (Object) INDY_call910 ().invokeExact(x, s, i); + Object o911 = (Object) INDY_call911 ().invokeExact(x, s, i); + Object o912 = (Object) INDY_call912 ().invokeExact(x, s, i); + Object o913 = (Object) INDY_call913 ().invokeExact(x, s, i); + Object o914 = (Object) INDY_call914 ().invokeExact(x, s, i); + Object o915 = (Object) INDY_call915 ().invokeExact(x, s, i); + Object o916 = (Object) INDY_call916 ().invokeExact(x, s, i); + Object o917 = (Object) INDY_call917 ().invokeExact(x, s, i); + Object o918 = (Object) INDY_call918 ().invokeExact(x, s, i); + Object o919 = (Object) INDY_call919 ().invokeExact(x, s, i); + Object o920 = (Object) INDY_call920 ().invokeExact(x, s, i); + Object o921 = (Object) INDY_call921 ().invokeExact(x, s, i); + Object o922 = (Object) INDY_call922 ().invokeExact(x, s, i); + Object o923 = (Object) INDY_call923 ().invokeExact(x, s, i); + Object o924 = (Object) INDY_call924 ().invokeExact(x, s, i); + Object o925 = (Object) INDY_call925 ().invokeExact(x, s, i); + Object o926 = (Object) INDY_call926 ().invokeExact(x, s, i); + Object o927 = (Object) INDY_call927 ().invokeExact(x, s, i); + Object o928 = (Object) INDY_call928 ().invokeExact(x, s, i); + Object o929 = (Object) INDY_call929 ().invokeExact(x, s, i); + Object o930 = (Object) INDY_call930 ().invokeExact(x, s, i); + Object o931 = (Object) INDY_call931 ().invokeExact(x, s, i); + Object o932 = (Object) INDY_call932 ().invokeExact(x, s, i); + Object o933 = (Object) INDY_call933 ().invokeExact(x, s, i); + Object o934 = (Object) INDY_call934 ().invokeExact(x, s, i); + Object o935 = (Object) INDY_call935 ().invokeExact(x, s, i); + Object o936 = (Object) INDY_call936 ().invokeExact(x, s, i); + Object o937 = (Object) INDY_call937 ().invokeExact(x, s, i); + Object o938 = (Object) INDY_call938 ().invokeExact(x, s, i); + Object o939 = (Object) INDY_call939 ().invokeExact(x, s, i); + Object o940 = (Object) INDY_call940 ().invokeExact(x, s, i); + Object o941 = (Object) INDY_call941 ().invokeExact(x, s, i); + Object o942 = (Object) INDY_call942 ().invokeExact(x, s, i); + Object o943 = (Object) INDY_call943 ().invokeExact(x, s, i); + Object o944 = (Object) INDY_call944 ().invokeExact(x, s, i); + Object o945 = (Object) INDY_call945 ().invokeExact(x, s, i); + Object o946 = (Object) INDY_call946 ().invokeExact(x, s, i); + Object o947 = (Object) INDY_call947 ().invokeExact(x, s, i); + Object o948 = (Object) INDY_call948 ().invokeExact(x, s, i); + Object o949 = (Object) INDY_call949 ().invokeExact(x, s, i); + Object o950 = (Object) INDY_call950 ().invokeExact(x, s, i); + Object o951 = (Object) INDY_call951 ().invokeExact(x, s, i); + Object o952 = (Object) INDY_call952 ().invokeExact(x, s, i); + Object o953 = (Object) INDY_call953 ().invokeExact(x, s, i); + Object o954 = (Object) INDY_call954 ().invokeExact(x, s, i); + Object o955 = (Object) INDY_call955 ().invokeExact(x, s, i); + Object o956 = (Object) INDY_call956 ().invokeExact(x, s, i); + Object o957 = (Object) INDY_call957 ().invokeExact(x, s, i); + Object o958 = (Object) INDY_call958 ().invokeExact(x, s, i); + Object o959 = (Object) INDY_call959 ().invokeExact(x, s, i); + Object o960 = (Object) INDY_call960 ().invokeExact(x, s, i); + Object o961 = (Object) INDY_call961 ().invokeExact(x, s, i); + Object o962 = (Object) INDY_call962 ().invokeExact(x, s, i); + Object o963 = (Object) INDY_call963 ().invokeExact(x, s, i); + Object o964 = (Object) INDY_call964 ().invokeExact(x, s, i); + Object o965 = (Object) INDY_call965 ().invokeExact(x, s, i); + Object o966 = (Object) INDY_call966 ().invokeExact(x, s, i); + Object o967 = (Object) INDY_call967 ().invokeExact(x, s, i); + Object o968 = (Object) INDY_call968 ().invokeExact(x, s, i); + Object o969 = (Object) INDY_call969 ().invokeExact(x, s, i); + Object o970 = (Object) INDY_call970 ().invokeExact(x, s, i); + Object o971 = (Object) INDY_call971 ().invokeExact(x, s, i); + Object o972 = (Object) INDY_call972 ().invokeExact(x, s, i); + Object o973 = (Object) INDY_call973 ().invokeExact(x, s, i); + Object o974 = (Object) INDY_call974 ().invokeExact(x, s, i); + Object o975 = (Object) INDY_call975 ().invokeExact(x, s, i); + Object o976 = (Object) INDY_call976 ().invokeExact(x, s, i); + Object o977 = (Object) INDY_call977 ().invokeExact(x, s, i); + Object o978 = (Object) INDY_call978 ().invokeExact(x, s, i); + Object o979 = (Object) INDY_call979 ().invokeExact(x, s, i); + Object o980 = (Object) INDY_call980 ().invokeExact(x, s, i); + Object o981 = (Object) INDY_call981 ().invokeExact(x, s, i); + Object o982 = (Object) INDY_call982 ().invokeExact(x, s, i); + Object o983 = (Object) INDY_call983 ().invokeExact(x, s, i); + Object o984 = (Object) INDY_call984 ().invokeExact(x, s, i); + Object o985 = (Object) INDY_call985 ().invokeExact(x, s, i); + Object o986 = (Object) INDY_call986 ().invokeExact(x, s, i); + Object o987 = (Object) INDY_call987 ().invokeExact(x, s, i); + Object o988 = (Object) INDY_call988 ().invokeExact(x, s, i); + Object o989 = (Object) INDY_call989 ().invokeExact(x, s, i); + Object o990 = (Object) INDY_call990 ().invokeExact(x, s, i); + Object o991 = (Object) INDY_call991 ().invokeExact(x, s, i); + Object o992 = (Object) INDY_call992 ().invokeExact(x, s, i); + Object o993 = (Object) INDY_call993 ().invokeExact(x, s, i); + Object o994 = (Object) INDY_call994 ().invokeExact(x, s, i); + Object o995 = (Object) INDY_call995 ().invokeExact(x, s, i); + Object o996 = (Object) INDY_call996 ().invokeExact(x, s, i); + Object o997 = (Object) INDY_call997 ().invokeExact(x, s, i); + Object o998 = (Object) INDY_call998 ().invokeExact(x, s, i); + Object o999 = (Object) INDY_call999 ().invokeExact(x, s, i); + } + + return true; + } + + protected void finalizeTest(boolean ok) throws Throwable { + String msg = "Target was called " + _counter.get() + " times of " + _expectedTargetCalls.get(); + if ( ok && _counter.get() != _expectedTargetCalls.get() ) + throw new Failure(msg); + else + Env.display(msg); + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/INDIFY_Test.jmpp b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/INDIFY_Test.jmpp new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/INDIFY_Test.jmpp @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.stress.java.loopsAndThreads; + +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; +import java.util.concurrent.atomic.AtomicLong; + +import vm.mlvm.share.MlvmTest; +import vm.mlvm.share.Env; +import vm.mlvm.share.MultiThreadedTest; +import nsk.share.test.Stresser; +import nsk.share.Failure; + +public class INDIFY_Test extends MultiThreadedTest { + +# +# final int INDY_SITES_COUNT = 1000; +# + private AtomicLong _counter = new AtomicLong(); + private AtomicLong _expectedTargetCalls = new AtomicLong(); + + public INDIFY_Test() { + super(); + } + + private static MethodType MT_bootstrap() { + return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); + } + + private static MethodHandle MH_bootstrap() throws Exception { + return MethodHandles.lookup().findStatic( + INDIFY_Test.class, + "bootstrap", + MT_bootstrap()); + } + + public static Object bootstrap(Object c, Object name, Object mt) throws Throwable { + Env.traceVerbose("bootstrap: Class " + c + "; method name = " + name + "; method type = " + mt); + CallSite cs = new ConstantCallSite( + MethodHandles.lookup().findVirtual( + INDIFY_Test.class, + "target", + MethodType.methodType(Object.class, String.class, int.class))); + return cs; + } + + public Object target(String s, int i) { + Env.traceDebug("target called"); + _counter.incrementAndGet(); + return null; + } + +# +# for ( int j = 0; j < INDY_SITES_COUNT; j++ ) { +# + private static MethodHandle INDY_call@j; + private static MethodHandle INDY_call@j () throws Throwable { + if (INDY_call@j != null) + return INDY_call@j; + + CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), + "greet", + MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class)); + + return cs.dynamicInvoker(); + } +# +# } +# + + public boolean runThread(int threadNum) throws Throwable { + final INDIFY_Test x = this; + final String s = "todo el mundo"; + final int i = 123; + + Stresser stresser = createStresser(); + + stresser.start(1); + while ( stresser.continueExecution() ) { + stresser.iteration(); + + long e; + do { + e = _expectedTargetCalls.get(); + } while ( ! _expectedTargetCalls.compareAndSet(e, e + @INDY_SITES_COUNT) ); + +# +# for ( int j = 0; j < INDY_SITES_COUNT; j++ ) { +# + Object o@j = (Object) INDY_call@j ().invokeExact(x, s, i); +# +# } +# + } + + return true; + } + + protected void finalizeTest(boolean ok) throws Throwable { + String msg = "Target was called " + _counter.get() + " times of " + _expectedTargetCalls.get(); + if ( ok && _counter.get() != _expectedTargetCalls.get() ) + throw new Failure(msg); + else + Env.display(msg); + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/Test.java.jdk8 b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/Test.java.jdk8 new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/Test.java.jdk8 @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.stress.java.loopsAndThreads; + +import java.dyn.CallSite; +import java.dyn.InvokeDynamic; +import java.dyn.Linkage; +import java.dyn.MethodHandles; +import java.dyn.MethodType; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; + +import vm.mlvm.share.MlvmTest; +import vm.mlvm.share.MultiThreadedTest; + +public class Test extends MultiThreadedTest { + + private static final int THREAD_COUNT = 100; + private static final int CYCLES_COUNT = 10000; // Provoke compiler + private static final long EXPECTED_TARGET_CALLS = 100L * THREAD_COUNT * CYCLES_COUNT; + + private AtomicLong _counter = new AtomicLong(); + + static { + Linkage.registerBootstrapMethod(Test.class, "bootstrap"); + } + + public Test() { + super(THREAD_COUNT); + } + + public static CallSite bootstrap(Class c, String name, MethodType mt) { + getLog().trace(0, "Class " + c + "; method name = " + name + "; method type = " + mt); + CallSite cs = new CallSite(c, name, mt); + cs.setTarget(MethodHandles.publicLookup().findVirtual( + Test.class, "target", MethodType.methodType(Object.class, String.class, int.class))); + return cs; + } + + public Object target(String s, int i) { + _counter.incrementAndGet(); + return null; + } + + @Override + public boolean runThread() throws Throwable { + final Test x = this; + for ( int i = 0; i < CYCLES_COUNT; i++ ) { + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "mundus", 123); + + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "mundus", 123); + + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "mundus", 123); + + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "mundus", 123); + + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "mundus", 123); + + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "mundus", 123); + + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "mundus", 123); + + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "mundus", 123); + + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "mundus", 123); + + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "world", 123); + InvokeDynamic.greet(x, "mundus", 456); + InvokeDynamic.greet(x, "kosmos", 789); + InvokeDynamic.greet(x, "mundus", 123); + } + + return true; + } + + protected boolean tearDown() throws Throwable { + getLog().display("Target was called " + _counter + " times of " + EXPECTED_TARGET_CALLS); + return _counter.get() == EXPECTED_TARGET_CALLS; + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/TestDescription.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/stress/java/loopsAndThreads. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * A Stress test that starts 100 threads in parallel. Each thread executes 100 InvokeDynamic operation + * in 10,000 cycles (to provoke compiler). + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.stress.java.loopsAndThreads.INDIFY_Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * vm.mlvm.indy.stress.java.loopsAndThreads.INDIFY_Test + * -stressIterationsFactor 10 + * -threadsPerCpu 4 + * -threadsExtra 50 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/Actor.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/Actor.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/Actor.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.stress.java.mutableCallSiteDekker; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MutableCallSite; +import vm.mlvm.share.DekkerTest; +import vm.mlvm.indy.share.CallSiteDekkerActor; + +public class Actor extends CallSiteDekkerActor { + public Actor() { + super(new MutableCallSite(MH_FALSE), new MutableCallSite(MH_FALSE)); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/TestDescription.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/stress/java/mutableCallSiteDekker. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * The test tries to detect a stale handle in MutableCallSite due to store-after-load reordering in + * modern CPU. + * Since MutableCallSite does not guarantee that changes by one thread are propagated to others, + * the test may fail. We ignore such failure. + * The current Oracle Hotspot JVM implementation uses an internal mutex when relinking a call site, + * which serves as memory barrier between store and load in this test, so I never saw it failing. + * + * @library /vmTestbase + * /test/lib + * + * @comment build actor + * @build vm.mlvm.indy.stress.java.mutableCallSiteDekker.Actor + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.share.DekkerTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * vm.mlvm.share.DekkerTest + * -actorClass vm.mlvm.indy.stress.java.mutableCallSiteDekker.Actor + * -iterations 100000 + * -runs 30 + * -mayFail true + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/Test.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/stress/java/relinkMutableCallSite. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine] + * VM Testbase comments: 8079664 + * VM Testbase readme: + * DESCRIPTION + * The test creates a mutable call site and relinks it from one thread while calling target from + * the other one. + * The test verifies that target changes in the call site are eventually seen by target calling + * thread by comparing the number of just called target with "golden" one, supplied by target + * relinking thread. + * For internal synchronization between the threads the test uses a non-volatile variable + * without any synchronized() statements or java.util.concurrent classes. + * The test artificially loses synchronization sometimes to verify that test logic is correct. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.stress.java.relinkMutableCallSite.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * vm.mlvm.indy.stress.java.relinkMutableCallSite.Test + * -stressIterationsFactor 100000 + */ + +package vm.mlvm.indy.stress.java.relinkMutableCallSite; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MutableCallSite; + +import vm.mlvm.indy.share.INDIFY_RelinkCallSiteTest; +import vm.mlvm.share.MlvmTest; + +public class Test extends INDIFY_RelinkCallSiteTest { + + @Override + protected CallSite createCallSite(MethodHandle mh) { + return new MutableCallSite(mh); + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq/Test.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.stress.java.relinkMutableCallSiteFreq.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.indy.stress.java.relinkMutableCallSiteFreq.Test + */ + +package vm.mlvm.indy.stress.java.relinkMutableCallSiteFreq; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MutableCallSite; + +import vm.mlvm.indy.share.INDIFY_RelinkCallSiteFreqTest; +import vm.mlvm.share.MlvmTest; + +/** + * The test creates a mutable call site and relinks it from one thread while calling the current + * target from the other one. Currently there are 6 targets. + + * The test verifies that target changes in the call site are eventually seen by target calling + * thread by measuring a frequency of calls for each target and comparing it with theoretical frequency. + * + */ +public class Test extends INDIFY_RelinkCallSiteFreqTest { + + @Override + protected CallSite createCallSite(MethodHandle mh) { + return new MutableCallSite(mh); + } + + /** + * Runs the test. + * @param args Arguments to the test. + */ + public static void main(String[] args) { + MlvmTest.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/Test.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/stress/java/relinkVolatileCallSite. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine] + * VM Testbase comments: 8079664 + * VM Testbase readme: + * DESCRIPTION + * The test creates a volatile call site and relinks it from one thread while calling target from + * the other one. + * The test verifies that target changes in the call site are eventually seen by target calling + * thread by comparing the number of just called target with "golden" one, supplied by target + * relinking thread. + * For internal synchronization between the threads the test uses a non-volatile variable + * without any synchronized() statements or java.util.concurrent classes. + * The test artificially loses synchronization sometimes to verify that test logic is correct. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.stress.java.relinkVolatileCallSite.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * vm.mlvm.indy.stress.java.relinkVolatileCallSite.Test + * -stressIterationsFactor 100000 + */ + +package vm.mlvm.indy.stress.java.relinkVolatileCallSite; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.VolatileCallSite; + +import vm.mlvm.indy.share.INDIFY_RelinkCallSiteTest; +import vm.mlvm.share.MlvmTest; + +public class Test extends INDIFY_RelinkCallSiteTest { + + @Override + protected CallSite createCallSite(MethodHandle mh) { + return new VolatileCallSite(mh); + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq/Test.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.stress.java.relinkVolatileCallSiteFreq.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.indy.stress.java.relinkVolatileCallSiteFreq.Test + */ + +package vm.mlvm.indy.stress.java.relinkVolatileCallSiteFreq; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.VolatileCallSite; + +import vm.mlvm.indy.share.INDIFY_RelinkCallSiteFreqTest; +import vm.mlvm.share.MlvmTest; + +/** + * The test creates a volatile call site and relinks it from one thread while calling the current + * target from the other one. Currently there are 6 targets. + * + * The test verifies that target changes in the call site are eventually seen by target calling + * thread by measuring a frequency of calls for each target and comparing it with theoretical frequency. + * + */ +public class Test extends INDIFY_RelinkCallSiteFreqTest { + + @Override + protected CallSite createCallSite(MethodHandle mh) { + return new VolatileCallSite(mh); + } + + /** + * Runs the test. + * @param args Test arguments + */ + public static void main(String[] args) { + MlvmTest.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/Actor.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/Actor.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/Actor.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.indy.stress.java.volatileCallSiteDekker; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VolatileCallSite; +import vm.mlvm.share.DekkerTest; +import vm.mlvm.indy.share.CallSiteDekkerActor; + +public class Actor extends CallSiteDekkerActor { + public Actor() { + super(new VolatileCallSite(MH_FALSE), new VolatileCallSite(MH_FALSE)); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/TestDescription.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/stress/java/volatileCallSiteDekker. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * The test tries to detect a stale handle in VolatileCallSite due to store-after-load reordering in + * modern CPU. + * The current Oracle Hotspot JVM implementation uses an internal mutex when relinking a call site, + * which serves as memory barrier between store and load in this test, so I never saw it failing. + * + * @library /vmTestbase + * /test/lib + * + * @comment build actor + * @build vm.mlvm.indy.stress.java.volatileCallSiteDekker.Actor + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.share.DekkerTest + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * vm.mlvm.share.DekkerTest + * -actorClass vm.mlvm.indy.stress.java.volatileCallSiteDekker.Actor + * -iterations 100000 + * -runs 30 + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/jdi/breakpointInCompiledCode/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/jdi/breakpointInCompiledCode/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/jdi/breakpointInCompiledCode/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/jdi/breakpointInCompiledCode/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/jdi/breakpointInCompiledCode/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/jdi/breakpointInCompiledCode/Test.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/indy/stress/jdi/breakpointInCompiledCode. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, fds, jdk] + * VM Testbase readme: + * DESCRIPTION + * Execute an invokedynamic instruction 10000 times to trigger Hotspot compilation. Set a debugger breakpoint to invokedynamic instruction. + * Make few debugger steps, obtaining various information from JVM + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build debuggee class + * @build vm.mlvm.share.jdi.IndyDebuggee + * + * @comment build test class and indify classes + * @build vm.mlvm.indy.stress.jdi.breakpointInCompiledCode.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm PropertyResolvingWrapper + * vm.mlvm.indy.stress.jdi.breakpointInCompiledCode.Test + * -verbose + * -arch=${os.family}-${os.simpleArch} + * -waittime=5 + * -debugee.vmkind=java + * -transport.address=dynamic + * -debugger.debuggeeClass vm.mlvm.share.jdi.IndyDebuggee + * -debuggee.iterations 20000 + * -debugee.vmkeys="${test.vm.opts} ${test.java.opts}" + */ + +package vm.mlvm.indy.stress.jdi.breakpointInCompiledCode; + +import vm.mlvm.share.jdi.ArgumentHandler; +import vm.mlvm.share.jdi.BreakpointInfo; +import vm.mlvm.share.jdi.JDIBreakpointTest; + +import java.util.ArrayList; +import java.util.List; + +public class Test extends JDIBreakpointTest { + // bootstrap,runDebuggee=>(indyWrapper:S5000,~target,stop) + @Override + protected List getBreakpoints(String debuggeeClassName) { + List result = new ArrayList<>(); + result.add(new BreakpointInfo("bootstrap")); + { + BreakpointInfo info = new BreakpointInfo("runDebuggee"); + // =>(indyWrapper:S5000,~target,stop) + List subBreakpoints = new ArrayList<>(); + { + BreakpointInfo sub = new BreakpointInfo("indyWrapper", true); + sub.stepsToTrace = 5000; + subBreakpoints.add(sub); + } + { + BreakpointInfo sub = new BreakpointInfo("target", true); + sub.type = BreakpointInfo.Type.IMPLICIT; + subBreakpoints.add(sub); + } + subBreakpoints.add(new BreakpointInfo("stop", true)); + + info.subBreakpoints = subBreakpoints; + result.add(info); + } + return result; + } + + public static void main(String[] args) { + launch(new ArgumentHandler(args)); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/java/throwException/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/java/throwException/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/java/throwException/Test.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/meth/func/java/throwException. + * VM Testbase keywords: [feature_mlvm, quarantine] + * VM Testbase comments: 8079714 + * VM Testbase readme: + * DESCRIPTION + * The test creates a sequence of MHs (see vm/mlvm/mh/func/sequences test for details) + * and throws an exception from the latest test of this sequence and verifies that + * the exception is passed correctly. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.func.java.throwException.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.meth.func.java.throwException.Test + */ + +package vm.mlvm.meth.func.java.throwException; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.MHTransformationGen; +import vm.mlvm.meth.share.RandomArgumentGen; +import vm.mlvm.meth.share.RandomArgumentsGen; +import vm.mlvm.meth.share.transform.v2.MHMacroTF; +import vm.mlvm.share.MlvmTest; + +public class Test extends MlvmTest { + + public static void main(String[] args) { MlvmTest.launch(args); } + + public static class Example { + private Throwable t; + + public Example(Throwable t) { + this.t = t; + } + + public Object m0(int i, String s, Float f) { + RuntimeException re = new RuntimeException("Good luck!"); + re.initCause(this.t); + throw re; + } + } + + @Override + public boolean run() throws Throwable { + + final RuntimeException requiredException = new RuntimeException("test"); + final Example e = new Example(requiredException); + + final MethodHandle mh = MethodHandles.lookup().findVirtual( + Example.class, "m0", + MethodType.methodType(Object.class, int.class, String.class, Float.class)); + + Argument[] finalArgs = RandomArgumentsGen.createRandomArgs(true, mh.type()); + Argument retVal = RandomArgumentGen.next(mh.type().returnType()); + retVal.setPreserved(true); + + MHMacroTF seq = MHTransformationGen.createSequence(retVal, e, mh, finalArgs); + + try { + MHTransformationGen.callSequence(seq, false); + getLog().complain("Did not catch a required exception!"); + return false; + } catch ( Throwable t ) { + while ( t != null && t instanceof Exception ) { + t = t.getCause(); + if ( t.equals(requiredException) ) { + getLog().display("Got a proper exception:"); + t.printStackTrace(getLog().getOutStream()); + return true; + } + } + + getLog().complain("Got wrong exception!"); + t.printStackTrace(getLog().getOutStream()); + return false; + } + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpoint/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpoint/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpoint/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpoint/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpoint/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpoint/Test.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/meth/func/jdi/breakpoint. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * Using JDI set a debugger breakpoint on a method inside a method handle sequence. + * Go few steps, obtaining various information from JVM. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build debuggee class + * @build vm.mlvm.share.jdi.MHDebuggee + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.func.jdi.breakpoint.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm PropertyResolvingWrapper + * vm.mlvm.meth.func.jdi.breakpoint.Test + * -verbose + * -arch=${os.family}-${os.simpleArch} + * -waittime=5 + * -debugee.vmkind=java + * -transport.address=dynamic + * -debugger.debuggeeClass vm.mlvm.share.jdi.MHDebuggee + */ + +package vm.mlvm.meth.func.jdi.breakpoint; + +import vm.mlvm.share.jdi.ArgumentHandler; +import vm.mlvm.share.jdi.BreakpointInfo; +import vm.mlvm.share.jdi.JDIBreakpointTest; +import vm.mlvm.share.jpda.StratumInfo; + +import java.util.ArrayList; +import java.util.List; + +public class Test extends JDIBreakpointTest { + // invokeMH:S100,invokePlain:S100,mhTarget,plainTarget,stop + @Override + protected List getBreakpoints(String debuggeeClassName) { + List result = new ArrayList<>(); + { + BreakpointInfo info = new BreakpointInfo("invokeMH"); + info.stepsToTrace = 100; + result.add(info); + } + { + BreakpointInfo info = new BreakpointInfo("invokePlain"); + info.stepsToTrace = 100; + result.add(info); + } + result.add(new BreakpointInfo("mhTarget")); + result.add(new BreakpointInfo("plainTarget")); + result.add(new BreakpointInfo("stop")); + + return result; + } + + + public static void main(String[] args) { + launch(new ArgumentHandler(args)); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/Test.java @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/meth/func/jdi/breakpointOtherStratum. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, fds, jdk, quarantine] + * VM Testbase comments: 8079713 8079714 + * VM Testbase readme: + * DESCRIPTION + * Performs debugging of invokedynamic call in vm.mlvm.share.jdi.INDIFY_Debuggee (with added + * source debug information) and verifies that JDI reports correct SDE locations. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build debuggee class + * @build vm.mlvm.share.jdi.MHDebuggee + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.func.jdi.breakpointOtherStratum.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @comment recompile SDE_MHDebuggeeBase with Stratum annotation processor + * @clean vm.mlvm.share.jpda.SDE_MHDebuggeeBase + * @run driver + * vm.mlvm.share.StratumClassesBuilder + * vmTestbase/vm/mlvm/share/jpda/SDE_MHDebuggeeBase.java + * + * @run main/othervm PropertyResolvingWrapper + * vm.mlvm.meth.func.jdi.breakpointOtherStratum.Test + * -verbose + * -arch=${os.family}-${os.simpleArch} + * -waittime=5 + * -debugee.vmkind=java + * -debugee.vmkeys="-cp ./bin/classes${path.separator}${test.class.path}" + * -transport.address=dynamic + * -debugger.debuggeeClass vm.mlvm.share.jdi.MHDebuggee + */ + +package vm.mlvm.meth.func.jdi.breakpointOtherStratum; + +import vm.mlvm.share.jdi.ArgumentHandler; +import vm.mlvm.share.jdi.BreakpointInfo; +import vm.mlvm.share.jdi.JDIBreakpointTest; +import vm.mlvm.share.jpda.StratumInfo; + +import java.util.ArrayList; +import java.util.List; + +public class Test extends JDIBreakpointTest { + @Override + protected List getBreakpoints(String debuggeeClassName) { + List result = new ArrayList<>(); + // invokeMH:S100/Logo=SDE_MHDebuggeeBase.logo:2 + { + BreakpointInfo info = new BreakpointInfo("invokeMH"); + info.stepsToTrace = 100; + info.stratumInfo = new StratumInfo("Logo", "SDE_MHDebuggeeBase.logo", 2); + result.add(info); + } + // invokePlain:S100/Logo=SDE_MHDebuggeeBase.logo:4 + { + BreakpointInfo info = new BreakpointInfo("invokePlain"); + info.stepsToTrace = 100; + info.stratumInfo = new StratumInfo("Logo", "SDE_MHDebuggeeBase.logo", 4); + result.add(info); + } + // mhTarget/Logo=SDE_MHDebuggeeBase.logo:3 + { + BreakpointInfo info = new BreakpointInfo("mhTarget"); + info.stratumInfo = new StratumInfo("Logo", "SDE_MHDebuggeeBase.logo", 3); + result.add(info); + } + // plainTarget/Logo=SDE_MHDebuggeeBase.logo:5 + { + BreakpointInfo info = new BreakpointInfo("plainTarget"); + info.stratumInfo = new StratumInfo("Logo", "SDE_MHDebuggeeBase.logo", 5); + result.add(info); + } + // stop/Logo=SDE_MHDebuggeeBase.logo:6 + { + BreakpointInfo info = new BreakpointInfo("stop"); + info.stratumInfo = new StratumInfo("Logo", "SDE_MHDebuggeeBase.logo", 6); + result.add(info); + } + return result; + } + + + public static void main(String[] args) { + launch(new ArgumentHandler(args)); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/Test.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.mixed.func.regression.b7087658; + +import java.util.List; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import vm.mlvm.share.MlvmTest; + +interface A { + Iterable m(List ls); +} + +interface B { + Iterable m(List l); +} + +interface AB extends A, B { } + +interface AA extends A { } + +public class Test extends MlvmTest { + + public static void main(String[] args) { MlvmTest.launch(args); } + + @Override + public boolean run() throws Throwable { + MethodHandle mh1 = MethodHandles.lookup().findVirtual(A.class, "m", MethodType.methodType(Iterable.class, List.class)); + MethodHandle mh2 = MethodHandles.lookup().findVirtual(B.class, "m", MethodType.methodType(Iterable.class, List.class)); + MethodHandle mh3 = MethodHandles.lookup().findVirtual(AB.class, "m", MethodType.methodType(Iterable.class, List.class)); + MethodHandle mh4 = MethodHandles.lookup().findVirtual(AA.class, "m", MethodType.methodType(Iterable.class, List.class)); + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/TestDescription.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @bug 7087658 + * + * @summary converted from VM Testbase vm/mlvm/meth/func/regression/b7087658. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * Test for CR 7087658 "MethodHandles.Lookup.findVirtual is confused by + * interface methods that are multiply inherited". + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.mixed.func.regression.b7087658.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.mixed.func.regression.b7087658.Test + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/Test.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.mixed.func.regression.b7127687; + +import nsk.share.Consts; +import vm.mlvm.share.MlvmTest; +import vm.mlvm.share.Env; +import vm.mlvm.share.CustomClassLoaders; + +import java.lang.invoke.MethodType; + +import java.util.List; +import java.util.ArrayList; + +import jdk.internal.org.objectweb.asm.ClassWriter; +import static jdk.internal.org.objectweb.asm.Opcodes.*; + +public class Test extends MlvmTest { + + final static int CLASSES_COUNT = 1000; + + public static void main(String[] args) { MlvmTest.launch(args); } + + @Override + public boolean run() throws Throwable { + List classes = new ArrayList(); + + //generating list of unique classes + for (int i = 0; i < CLASSES_COUNT; i++) { + classes.add(generateClass("Class" + i)); + } + + for (Class a : classes) { + for (Class b : classes) { + Env.traceNormal("Perform call MethodType.methodType(" + a + ", " + b + ")"); + MethodType.methodType(a, b); + } + } + + return true; + } + + + private static Class generateClass(String name) throws ClassNotFoundException{ + ClassWriter cw = new ClassWriter(0); + cw.visit(V1_1, ACC_PUBLIC, name, null, "java/lang/Object", null); + return CustomClassLoaders.makeClassBytesLoader(cw.toByteArray(), name).loadClass(name); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/TestDescription.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @bug 7127687 + * @modules java.base/jdk.internal.org.objectweb.asm + * + * @summary converted from VM Testbase vm/mlvm/meth/func/regression/b7127687. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * Test for CR 7127687 "MethodType leaks memory due to interning". + * This test generates a lot (N) unique classes and then creates N^2 + * instances of MethodType using MethodType.methodType() and generated classes. + * So previous implementation of MethodType.methodType() throws OOM exception + * in this test case. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.mixed.func.regression.b7127687.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm -Xmx64m vm.mlvm.mixed.func.regression.b7127687.Test + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/Test.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.mixed.func.regression.b7129034; + +import java.util.List; + +import java.lang.invoke.*; +import java.lang.reflect.*; + +import vm.mlvm.share.MlvmTest; + +public class Test extends MlvmTest { + + public Test obj; + public String str; + + public static void main(String[] args) { MlvmTest.launch(args); } + + @Override + public boolean run() throws Throwable { + MethodHandles.Lookup l = MethodHandles.publicLookup(); + Field field = Test.class.getField("str"); + MethodHandle mh = l.unreflectSetter(field); + MethodHandle filter = l.unreflectGetter(Test.class.getField("obj")); + mh = MethodHandles.filterArguments(mh, 0, filter); + try { + mh.invokeExact(new Test(), "hello"); + } catch (NullPointerException ignore) { + System.out.println("PASSED: Expected NPE thrown, no crash"); + } + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/TestDescription.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @bug 7129034 + * + * @summary converted from VM Testbase vm/mlvm/meth/func/regression/b7129034. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * Test for CR 7129034 "VM crash with a field setter method with a filterArguments". + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.mixed.func.regression.b7129034.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.mixed.func.regression.b7129034.Test + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/Argument.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/Argument.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/Argument.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +import nsk.share.test.TestUtils; + +public class Argument { + + private final Class type; + private final Object value; + private boolean isPreserved; + private String tag; + + public Argument(Class type, Object value) { + this(type, value, false, ""); + } + + public Argument(Class type, Object value, boolean isPreserved, String tag) { + this.type = type; + this.value = value; + this.isPreserved = isPreserved; + this.tag = tag; + } + + public Class getType() { + return this.type; + } + + public Object getValue() { + return this.value; + } + + public void setPreserved(boolean newValue) { + this.isPreserved = newValue; + } + + public boolean isPreserved() { + return this.isPreserved; + } + + public String getTag() { + return this.tag; + } + + public void setTag(String newTag) { + this.tag = newTag; + } + + public static Argument fromValue(Object value) { + return new Argument(value.getClass(), value); + } + + public static Argument fromPrimitiveValue(Object boxedValue) { + TestUtils.assertInCollection(TestTypes.UNBOX_MAP.keySet(), boxedValue.getClass()); + return new Argument(TestTypes.UNBOX_MAP.get(boxedValue.getClass()), boxedValue); + } + + public static Argument fromArray(Object[] a) { + boolean isProtected = false; + if ( a.length > 2 && a[2].getClass().equals(Boolean.class) ) + isProtected = (Boolean) a[2]; + + return new Argument((Class) a[0], a[1], isProtected, ""); + } + + @Override + public String toString() { + return getType().getName().replaceFirst("^java.lang.", "") + "=" + + (getType().equals(String.class) ? "{" + getValue() + "}" : getValue() == null ? "null" : getValue() ) + + ((! getTag().isEmpty() || isPreserved()) ? ("[" + (isPreserved() ? "!" : "") + getTag() + "]") : ""); + } + + @Override + public Argument clone() { + return new Argument(getType(), getValue(), isPreserved(), getTag()); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/Arguments.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/Arguments.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/Arguments.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +import java.lang.invoke.MethodType; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public final class Arguments { + + public static List listFromArray(Object[][] a) { + ArrayList result = new ArrayList(a.length); + + for (Object[] elem : a) { + result.add(Argument.fromArray(elem)); + } + + return result; + } + + public static Argument[] fromArray(Object[][] a) { + return listFromArray(a).toArray(new Argument[a.length]); + } + + public static Class[] typesArray(List vts) { + return typesArray(vts.toArray(new Argument[vts.size()])); + } + + public static Class[] typesArray(Argument[] vts) { + Class[] result = new Class[vts.length]; + for (int i = 0; i < vts.length; i++) + result[i] = vts[i].getType(); + return result; + } + + public static Object[] valuesArray(List vts) { + return valuesArray(vts.toArray(new Argument[vts.size()])); + } + + public static Object[] valuesArray(Argument[] vts) { + Object[] result = new Object[vts.length]; + for (int i = 0; i < vts.length; i++) + result[i] = vts[i].getValue(); + return result; + } + + public static Argument[] fromMethodType(boolean isVirtual, MethodType t, MethodParameterValueProvider vp) { + int virtualOffset = isVirtual ? 1 : 0; + Class[] paramTypes = t.parameterArray(); + Argument[] result = new Argument[paramTypes.length - virtualOffset]; + for (int i = virtualOffset; i < paramTypes.length; i++) { + result[i - virtualOffset] = new Argument(paramTypes[i], vp.getValue(t, i)); + } + return result; + } + + public static int[] findTag(List args, String tag) { + return findTag(args.toArray(new Argument[args.size()]), tag); + } + + public static int[] findTag(Argument[] args, String tag) { + int[] result = new int[args.length]; + int resCount = 0; + for ( int i = 0; i < args.length; i++ ) { + if ( args[i].getTag().equals(tag) ) + result[resCount++] = i; + } + + return Arrays.copyOf(result, resCount); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MHTransformationGen.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MHTransformationGen.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MHTransformationGen.java @@ -0,0 +1,491 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodType; +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +import nsk.share.test.LazyIntArrayToString; +import nsk.share.test.TestUtils; +import vm.mlvm.meth.share.transform.v2.MHArrayEnvelopeTFPair; +import vm.mlvm.meth.share.transform.v2.MHCall; +import vm.mlvm.meth.share.transform.v2.MHCollectSpreadTF; +import vm.mlvm.meth.share.transform.v2.MHConstantTF; +import vm.mlvm.meth.share.transform.v2.MHDropTF; +import vm.mlvm.meth.share.transform.v2.MHDropTF2; +import vm.mlvm.meth.share.transform.v2.MHFilterRetValTF; +import vm.mlvm.meth.share.transform.v2.MHFilterTF; +import vm.mlvm.meth.share.transform.v2.MHFoldTF; +import vm.mlvm.meth.share.transform.v2.MHIdentityTF; +import vm.mlvm.meth.share.transform.v2.MHInsertTF; +import vm.mlvm.meth.share.transform.v2.MHMacroTF; +import vm.mlvm.meth.share.transform.v2.MHOutboundCallTF; +import vm.mlvm.meth.share.transform.v2.MHOutboundVirtualCallTF; +import vm.mlvm.meth.share.transform.v2.MHPermuteTF; +import vm.mlvm.meth.share.transform.v2.MHSamTF; +import vm.mlvm.meth.share.transform.v2.MHTF; +import vm.mlvm.meth.share.transform.v2.MHTFPair; +import vm.mlvm.meth.share.transform.v2.MHThrowCatchTFPair; +import vm.mlvm.meth.share.transform.v2.MHVarargsCollectSpreadTF; +import vm.mlvm.share.Env; + +public class MHTransformationGen { + + public static final int MAX_CYCLES = 1000; + + private static final int MAX_ARGUMENTS = 10; + + private static final boolean FILTER_OUT_KNOWN_BUGS = false; + + private static final boolean USE_SAM = false; // Disabled in JDK7 + private static final boolean USE_THROW_CATCH = false; // Test bugs + + public static class ThrowCatchTestException extends Throwable { + private static final long serialVersionUID = -6749961303738648241L; + } + + @SuppressWarnings("unused") + public static MHMacroTF createSequence(Argument finalRetVal, Object boundObj, MethodHandle finalMH, Argument[] finalArgs) throws Throwable { + Env.traceDebug("Generating sequence."); + + MHMacroTF graph = new MHMacroTF("sequence"); + + MHTF outTF; + if ( boundObj != null ) + outTF = new MHOutboundVirtualCallTF(finalRetVal, boundObj, finalMH, finalArgs); + else + outTF = new MHOutboundCallTF(finalRetVal, finalMH, finalArgs); + + Env.traceDebug("Outbound call=%s", outTF); + graph.addTransformation(outTF); + + if ( MAX_CYCLES == 0 ) + return graph; + + List pendingPWTFs = new LinkedList(); + + for ( int i = nextInt(MAX_CYCLES); i > 0; i-- ) { + MHCall lastCall = graph.computeInboundCall(); + Argument[] lastArgs = lastCall.getArgs(); + MethodType type = lastCall.getTargetMH().type(); + Argument lastRetVal = lastCall.getRetVal(); + + int lastArgsSlots = computeVmSlotCount(lastArgs); + if ( boundObj != null ) + lastArgsSlots += TestTypes.getSlotsCount(boundObj.getClass()); + + Env.traceDebug("Current last call: %s", lastCall); + + MHTF tf = null; + MHTFPair tfPair = null; + + int nextCase = nextInt(12); + + Env.traceDebug("Adding case #" + nextCase); + try { + switch ( nextCase ) { + case 0: { // add next pending TF + if ( pendingPWTFs.size() > 0 ) { + MHTFPair pwtf = pendingPWTFs.remove(0); + tf = pwtf.getInboundTF(lastCall); + Env.traceDebug("(adding pending inbound transformation)"); + } + } + break; + + case 1: { // Drop arguments + int pos = nextInt(lastArgs.length); + int nArgs = nextInt(MAX_ARGUMENTS); + if ( nArgs == 0 ) + break; + + Argument[] values = new Argument[nArgs]; + for ( int j = 0; j < nArgs; j++ ) + values[j] = RandomArgumentGen.next(); + + int valuesSlots = computeVmSlotCount(values); + + int newValuesCount = nArgs; + while ( valuesSlots + lastArgsSlots > MAX_ARGUMENTS ) { + valuesSlots -= TestTypes.getSlotsCount(values[newValuesCount - 1].getType()); + --newValuesCount; + } + + if ( newValuesCount != nArgs ) + values = Arrays.copyOf(values, newValuesCount); + + if ( Env.getRNG().nextBoolean() ) + tf = new MHDropTF(lastCall, pos, values); + else + tf = new MHDropTF2(lastCall, pos, values); + } + break; + + case 2: { // Insert arguments + if ( lastArgs.length == 0 ) + break; + + int pos = nextInt(lastArgs.length); + + int p; + for ( p = pos; p < pos + lastArgs.length; p++ ) { + if ( ! lastArgs[p % lastArgs.length].isPreserved() ) + break; + } + + pos = p % lastArgs.length; + if ( lastArgs[pos].isPreserved() ) + break; + + int nArgs = 1 + nextInt(lastArgs.length - pos - 1); + + for ( p = pos + 1; p < pos + nArgs; p++ ) { + if ( lastArgs[p].isPreserved() ) + break; + } + + nArgs = p - pos; + + Argument[] values = Arrays.copyOfRange(lastArgs, pos, pos + nArgs); + + tf = new MHInsertTF(lastCall, pos, values, false); + } + break; + + case 3: { // Throw + catch + if ( ! USE_THROW_CATCH ) + break; + + if ( lastArgsSlots + 1 >= MAX_ARGUMENTS ) + break; + + Argument testArg = RandomArgumentGen.next(); + Env.traceDebug("testArgument=%s", testArg); + + Object testValue2; + boolean eqTest = (Boolean) RandomValueGen.next(Boolean.class); + if ( eqTest ) { + testValue2 = testArg.getValue(); + } else { + testValue2 = RandomValueGen.nextDistinct(testArg.getType(), testArg.getValue()); + } + + tfPair = new MHThrowCatchTFPair(lastCall, testArg, testValue2, eqTest, new ThrowCatchTestException()); + } + break; + + case 4: { // Permute arguments + + List targetArgNumbers = new LinkedList(); + for ( int n = 0; n < lastArgs.length; n++ ) + targetArgNumbers.add(n); + Collections.shuffle(targetArgNumbers, Env.getRNG()); + + Argument[] sourceArgs = new Argument[lastArgs.length]; + for ( int n = 0; n < lastArgs.length; n++ ) { + sourceArgs[targetArgNumbers.get(n)] = lastArgs[n]; + } + + MethodType newMT = MethodType.methodType(type.returnType(), Arguments.typesArray(sourceArgs)); + + // Java has no other means for converting Integer[] to int[] + int[] permuteArray = new int[targetArgNumbers.size()]; + for ( int n = 0; n < permuteArray.length; n++ ) + permuteArray[n] = targetArgNumbers.get(n); + + Env.traceDebug("Permute: permuteArray=%s; newMT=%s; oldMT=%s", new LazyIntArrayToString(permuteArray), newMT, lastCall.getTargetMH()); + + tf = new MHPermuteTF(lastCall, newMT, permuteArray); + } + break; + + case 5: { // Fold arguments + if ( lastArgs.length == 0 ) + break; + + Argument arg = lastArgs[0]; + if ( arg.isPreserved() ) + break; + + Argument[] restOfArgs = TestUtils.cdr(lastArgs); + + MHMacroTF mTF = new MHMacroTF("fold arguments"); + mTF.addOutboundCall(lastCall); + + MHCall combinerCall = mTF.addTransformation(new MHDropTF( + mTF.addTransformation(new MHConstantTF(arg)), + 0, restOfArgs + )); + + Env.traceDebug("combinerCall=%s", combinerCall); + Env.traceDebug("targetCall=%s", lastCall); + + mTF.addTransformation(new MHFoldTF( + lastCall, + combinerCall + )); + + tf = mTF; + } + break; + + case 6: { // Filter arguments + if ( lastArgs.length == 0 ) + break; + + int pos = nextInt(lastArgs.length); + int nArgs = 1 + nextInt(lastArgs.length - pos - 1); + + MHMacroTF mTF = new MHMacroTF("identity filter arguments"); + mTF.addOutboundCall(lastCall); + + MHCall[] filters = new MHCall[nArgs]; + for ( int n = 0; n < filters.length; n++ ) { + if ( nextInt(5) != 0 ) { + filters[n] = mTF.addTransformation(new MHIdentityTF(lastArgs[n + pos])); + } + } + + mTF.addTransformation(new MHFilterTF(lastCall, pos, filters)); + + tf = mTF; + } + break; + + case 7: { // filter + if ( lastArgs.length <= 1 ) + break; + + int pos = nextInt(lastArgs.length); + int nArgs; + if ( pos == lastArgs.length - 1 ) + nArgs = 1; + else + nArgs = 1 + nextInt(lastArgs.length - pos - 1); + + MHMacroTF mTF = new MHMacroTF("replace filter arguments"); + mTF.addOutboundCall(lastCall); + + MHCall[] filters = new MHCall[nArgs]; + + loop: + for ( int n = 0; n < nArgs; n++ ) { + Argument arg = lastArgs[pos + n]; + if ( nextInt(5) == 0 || arg.isPreserved() ) + continue; + + Class argType = arg.getType(); + Object value = RandomValueGen.next(argType); + Argument newArg = new Argument(argType, value); + + filters[n] = mTF.addTransformation(new MHDropTF( + mTF.addTransformation(new MHConstantTF(arg)), + 0, new Argument[] { newArg } + )); + } + + mTF.addTransformation(new MHFilterTF(lastCall, pos, filters)); + + tf = mTF; + } + break; + + case 8: { // Filter return value + if ( lastRetVal.isPreserved() ) + break; + + Class lastRetType = lastRetVal.getType(); + if ( lastRetType.equals(void.class) ) + break; + + Argument newRetVal = new Argument(lastRetType, RandomValueGen.next(lastRetType)); + + MHMacroTF mTF = new MHMacroTF("filter retval"); + mTF.addOutboundCall(lastCall); + mTF.addTransformation(new MHFilterRetValTF(lastCall, + mTF.addTransformation(new MHDropTF( + mTF.addTransformation(new MHConstantTF(newRetVal)), + 0, + new Argument[] { lastRetVal } + )) + )); + + tf = mTF; + } + break; + + case 9: { // SAM + if ( ! USE_SAM ) + break; + + tf = new MHSamTF(lastCall); + } + break; + + case 10: { // Envelope argument into array + if ( lastArgs.length >= 0 ) + break; + + int arraySize = 1 + nextInt(0xffff); + int arrayIdx = nextInt(arraySize); + int argNum = nextInt(lastArgs.length); + tfPair = new MHArrayEnvelopeTFPair(lastCall, argNum, arrayIdx, arraySize); + } + break; + + case 11: { // Collect + spread + if ( nextInt(1) == 0 ) + tf = new MHCollectSpreadTF(lastCall); + else + tf = new MHVarargsCollectSpreadTF(lastCall); + } + break; + } + + if ( FILTER_OUT_KNOWN_BUGS ) { + if ( tfPair != null ) { + Env.traceDebug("Checking transformation pair %s", tfPair); + + tfPair.getInboundTF(tfPair.getOutboundTF().computeInboundCall()).computeInboundCall(); + } else if ( tf != null ) { + Env.traceDebug("Checking transformation %s", tf); + tf.computeInboundCall(); + } + } + + } catch ( Throwable e ) { + if ( ! FILTER_OUT_KNOWN_BUGS ) + throw e; + + String msg = e.getMessage(); + for ( Throwable t = e.getCause(); t != null; t = t.getCause() ) { + msg += " "; + msg += t.getMessage(); + } + + if ( msg != null + && ! msg.contains("NONE SO FAR 2011-07-10") + ) { + throw e; + } + + Env.traceDebug("Failed to add transformation %s; Error: %s", tf, msg); + tfPair = null; + tf = null; + } + + if ( tfPair != null ) { + MHTF oTF = tfPair.getOutboundTF(); + Env.traceDebug("Adding outbound transformation %s", oTF); + graph.addTransformation(oTF); + pendingPWTFs.add(tfPair); + } else if ( tf != null ) { + Env.traceDebug("Adding transformation %s", tf); + graph.addTransformation(tf); + } else { + Env.traceDebug("Skipping transformation"); + } + } + + while ( pendingPWTFs.size() > 0 ) { + MHTFPair pwtf = pendingPWTFs.remove(0); + MHTF tf = pwtf.getInboundTF(graph.computeInboundCall()); + + Env.traceDebug("Adding pending inbound transformation: %s", tf); + graph.addTransformation(tf); + } + + Env.traceVerbose("MHTransformationGen produced graph: %s", graph); + + return graph; + } + + private static int computeVmSlotCount(Argument[] values) { + int count = 0; + for ( Argument v : values ) + count += TestTypes.getSlotsCount(v.getType()); + return count; + } + + public static Object callSequence(MHMacroTF seq, boolean checkRetVal) throws Throwable { + Env.traceVerbose("Calling sequence..."); + MHCall call = seq.computeInboundCall(); + Object result; + try { + if ( checkRetVal ) { + result = call.callAndCheckRetVal(); + } else { + result = call.call(); + } + } catch ( Throwable t ) { + Env.traceNormal(t, "Exception during calling a sequence"); + throw (Exception) (new Exception("Exception in sequence " + seq.toString()).initCause(t)); + } + Env.traceVerbose("Sequence result = %s", result); + return result; + } + + public static Object createAndCallSequence(Argument finalRetVal, Object boundObj, MethodHandle finalMH, Argument[] finalArgs, boolean checkRetVal) throws Throwable { + return callSequence(createSequence(finalRetVal, boundObj, finalMH, finalArgs), checkRetVal); + } + + public static void transformToMatchArgsNum(MHMacroTF graph, int argNumMin, int argNumMax) throws Throwable { + MHCall lastCall = graph.computeInboundCall(); + Argument[] lastArgs = lastCall.getArgs(); + + if ( lastArgs.length > argNumMax ) { + + // TODO: preserved args + MHTF tf = new MHInsertTF(lastCall, argNumMax, Arrays.copyOfRange(lastArgs, argNumMax, lastArgs.length), false); + Env.traceVerbose("Adding transformation to match %d limit: %s", argNumMax, tf); + graph.addTransformation(tf); + + } else if ( lastArgs.length < argNumMin ) { + + int argsToInsert = argNumMin - lastArgs.length; + + Argument[] values = new Argument[argsToInsert]; + for ( int j = 0; j < argsToInsert; j++ ) + values[j] = RandomArgumentGen.next(); + + int pos = 0; + + MHTF tf = new MHDropTF(lastCall, pos, values); + Env.traceVerbose("Adding transformation to match %d arguments: %s", argNumMin, tf); + graph.addTransformation(tf); + + } + } + + private static int nextInt(int i) { + if ( i == 0 ) + return 0; + else + return Env.getRNG().nextInt(i); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MHUtils.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MHUtils.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MHUtils.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +public final class MHUtils { + + public static void assertAssignableType(Object info, Class requiredType, Class actualType) throws IllegalArgumentException { + if ( ! requiredType.isAssignableFrom(actualType) ) { + throw new IllegalArgumentException("Illegal argument type for " + info + + ": required=" + requiredType + + "; actual=" + actualType); + } + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MethodParameterValueProvider.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MethodParameterValueProvider.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MethodParameterValueProvider.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +import java.lang.invoke.MethodType; + +public interface MethodParameterValueProvider { + + Object getValue(MethodType t, int paramNum); + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/PrimitiveTypeConverter.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/PrimitiveTypeConverter.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/PrimitiveTypeConverter.java @@ -0,0 +1,266 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// generated from vm/mlvm/meth/share/PrimitiveTypeConverter.jmpp + +package vm.mlvm.meth.share; + +public class PrimitiveTypeConverter { + + /** Unbox, cast and box */ + public static Object cast(Object fromValue, Class toType) { + + Class fromType = fromValue.getClass(); + + if ( Byte.class.equals(fromType) && toType.equals(byte.class) ) + return fromValue; + + if ( Byte.class.equals(fromType) && toType.equals(short.class) ) + return Short.valueOf((short) ((Byte) fromValue).byteValue()); + + if ( Byte.class.equals(fromType) && toType.equals(char.class) ) + return Character.valueOf((char) ((Byte) fromValue).byteValue()); + + if ( Byte.class.equals(fromType) && toType.equals(int.class) ) + return Integer.valueOf((int) ((Byte) fromValue).byteValue()); + + if ( Byte.class.equals(fromType) && toType.equals(long.class) ) + return Long.valueOf((long) ((Byte) fromValue).byteValue()); + + if ( Byte.class.equals(fromType) && toType.equals(float.class) ) + return Float.valueOf((float) ((Byte) fromValue).byteValue()); + + if ( Byte.class.equals(fromType) && toType.equals(double.class) ) + return Double.valueOf((double) ((Byte) fromValue).byteValue()); + + if ( Short.class.equals(fromType) && toType.equals(byte.class) ) + return Byte.valueOf((byte) ((Short) fromValue).shortValue()); + + if ( Short.class.equals(fromType) && toType.equals(short.class) ) + return fromValue; + + if ( Short.class.equals(fromType) && toType.equals(char.class) ) + return Character.valueOf((char) ((Short) fromValue).shortValue()); + + if ( Short.class.equals(fromType) && toType.equals(int.class) ) + return Integer.valueOf((int) ((Short) fromValue).shortValue()); + + if ( Short.class.equals(fromType) && toType.equals(long.class) ) + return Long.valueOf((long) ((Short) fromValue).shortValue()); + + if ( Short.class.equals(fromType) && toType.equals(float.class) ) + return Float.valueOf((float) ((Short) fromValue).shortValue()); + + if ( Short.class.equals(fromType) && toType.equals(double.class) ) + return Double.valueOf((double) ((Short) fromValue).shortValue()); + + if ( Character.class.equals(fromType) && toType.equals(byte.class) ) + return Byte.valueOf((byte) ((Character) fromValue).charValue()); + + if ( Character.class.equals(fromType) && toType.equals(short.class) ) + return Short.valueOf((short) ((Character) fromValue).charValue()); + + if ( Character.class.equals(fromType) && toType.equals(char.class) ) + return fromValue; + + if ( Character.class.equals(fromType) && toType.equals(int.class) ) + return Integer.valueOf((int) ((Character) fromValue).charValue()); + + if ( Character.class.equals(fromType) && toType.equals(long.class) ) + return Long.valueOf((long) ((Character) fromValue).charValue()); + + if ( Character.class.equals(fromType) && toType.equals(float.class) ) + return Float.valueOf((float) ((Character) fromValue).charValue()); + + if ( Character.class.equals(fromType) && toType.equals(double.class) ) + return Double.valueOf((double) ((Character) fromValue).charValue()); + + if ( Integer.class.equals(fromType) && toType.equals(byte.class) ) + return Byte.valueOf((byte) ((Integer) fromValue).intValue()); + + if ( Integer.class.equals(fromType) && toType.equals(short.class) ) + return Short.valueOf((short) ((Integer) fromValue).intValue()); + + if ( Integer.class.equals(fromType) && toType.equals(char.class) ) + return Character.valueOf((char) ((Integer) fromValue).intValue()); + + if ( Integer.class.equals(fromType) && toType.equals(int.class) ) + return fromValue; + + if ( Integer.class.equals(fromType) && toType.equals(long.class) ) + return Long.valueOf((long) ((Integer) fromValue).intValue()); + + if ( Integer.class.equals(fromType) && toType.equals(float.class) ) + return Float.valueOf((float) ((Integer) fromValue).intValue()); + + if ( Integer.class.equals(fromType) && toType.equals(double.class) ) + return Double.valueOf((double) ((Integer) fromValue).intValue()); + + if ( Long.class.equals(fromType) && toType.equals(byte.class) ) + return Byte.valueOf((byte) ((Long) fromValue).longValue()); + + if ( Long.class.equals(fromType) && toType.equals(short.class) ) + return Short.valueOf((short) ((Long) fromValue).longValue()); + + if ( Long.class.equals(fromType) && toType.equals(char.class) ) + return Character.valueOf((char) ((Long) fromValue).longValue()); + + if ( Long.class.equals(fromType) && toType.equals(int.class) ) + return Integer.valueOf((int) ((Long) fromValue).longValue()); + + if ( Long.class.equals(fromType) && toType.equals(long.class) ) + return fromValue; + + if ( Long.class.equals(fromType) && toType.equals(float.class) ) + return Float.valueOf((float) ((Long) fromValue).longValue()); + + if ( Long.class.equals(fromType) && toType.equals(double.class) ) + return Double.valueOf((double) ((Long) fromValue).longValue()); + + if ( Float.class.equals(fromType) && toType.equals(byte.class) ) + return Byte.valueOf((byte) ((Float) fromValue).floatValue()); + + if ( Float.class.equals(fromType) && toType.equals(short.class) ) + return Short.valueOf((short) ((Float) fromValue).floatValue()); + + if ( Float.class.equals(fromType) && toType.equals(char.class) ) + return Character.valueOf((char) ((Float) fromValue).floatValue()); + + if ( Float.class.equals(fromType) && toType.equals(int.class) ) + return Integer.valueOf((int) ((Float) fromValue).floatValue()); + + if ( Float.class.equals(fromType) && toType.equals(long.class) ) + return Long.valueOf((long) ((Float) fromValue).floatValue()); + + if ( Float.class.equals(fromType) && toType.equals(float.class) ) + return fromValue; + + if ( Float.class.equals(fromType) && toType.equals(double.class) ) + return Double.valueOf((double) ((Float) fromValue).floatValue()); + + if ( Double.class.equals(fromType) && toType.equals(byte.class) ) + return Byte.valueOf((byte) ((Double) fromValue).doubleValue()); + + if ( Double.class.equals(fromType) && toType.equals(short.class) ) + return Short.valueOf((short) ((Double) fromValue).doubleValue()); + + if ( Double.class.equals(fromType) && toType.equals(char.class) ) + return Character.valueOf((char) ((Double) fromValue).doubleValue()); + + if ( Double.class.equals(fromType) && toType.equals(int.class) ) + return Integer.valueOf((int) ((Double) fromValue).doubleValue()); + + if ( Double.class.equals(fromType) && toType.equals(long.class) ) + return Long.valueOf((long) ((Double) fromValue).doubleValue()); + + if ( Double.class.equals(fromType) && toType.equals(float.class) ) + return Float.valueOf((float) ((Double) fromValue).doubleValue()); + + if ( Double.class.equals(fromType) && toType.equals(double.class) ) + return fromValue; + + throw new IllegalArgumentException("Can't cast [" + fromValue + "] to " + toType); + } + + /** Unbox, do primitive widening conversion (JLS 5.1.2) and box */ + public static Object convert(Object fromValue, Class toType) { + Class fromType = fromValue.getClass(); + + if ( Byte.class.equals(fromType) && toType.equals(byte.class) ) + return fromValue; + + if ( Short.class.equals(fromType) && toType.equals(short.class) ) + return fromValue; + + if ( Byte.class.equals(fromType) && toType.equals(short.class) ) + return Short.valueOf((short) ((Byte) fromValue).byteValue()); + + if ( Integer.class.equals(fromType) && toType.equals(int.class) ) + return fromValue; + + if ( Byte.class.equals(fromType) && toType.equals(int.class) ) + return Integer.valueOf((int) ((Byte) fromValue).byteValue()); + + if ( Short.class.equals(fromType) && toType.equals(int.class) ) + return Integer.valueOf((int) ((Short) fromValue).shortValue()); + + if ( Character.class.equals(fromType) && toType.equals(int.class) ) + return Integer.valueOf((int) ((Character) fromValue).charValue()); + + if ( Long.class.equals(fromType) && toType.equals(long.class) ) + return fromValue; + + if ( Byte.class.equals(fromType) && toType.equals(long.class) ) + return Long.valueOf((long) ((Byte) fromValue).byteValue()); + + if ( Short.class.equals(fromType) && toType.equals(long.class) ) + return Long.valueOf((long) ((Short) fromValue).shortValue()); + + if ( Character.class.equals(fromType) && toType.equals(long.class) ) + return Long.valueOf((long) ((Character) fromValue).charValue()); + + if ( Integer.class.equals(fromType) && toType.equals(long.class) ) + return Long.valueOf((long) ((Integer) fromValue).intValue()); + + if ( Float.class.equals(fromType) && toType.equals(float.class) ) + return fromValue; + + if ( Byte.class.equals(fromType) && toType.equals(float.class) ) + return Float.valueOf((float) ((Byte) fromValue).byteValue()); + + if ( Short.class.equals(fromType) && toType.equals(float.class) ) + return Float.valueOf((float) ((Short) fromValue).shortValue()); + + if ( Character.class.equals(fromType) && toType.equals(float.class) ) + return Float.valueOf((float) ((Character) fromValue).charValue()); + + if ( Integer.class.equals(fromType) && toType.equals(float.class) ) + return Float.valueOf((float) ((Integer) fromValue).intValue()); + + if ( Long.class.equals(fromType) && toType.equals(float.class) ) + return Float.valueOf((float) ((Long) fromValue).longValue()); + + if ( Double.class.equals(fromType) && toType.equals(double.class) ) + return fromValue; + + if ( Byte.class.equals(fromType) && toType.equals(double.class) ) + return Double.valueOf((double) ((Byte) fromValue).byteValue()); + + if ( Short.class.equals(fromType) && toType.equals(double.class) ) + return Double.valueOf((double) ((Short) fromValue).shortValue()); + + if ( Character.class.equals(fromType) && toType.equals(double.class) ) + return Double.valueOf((double) ((Character) fromValue).charValue()); + + if ( Integer.class.equals(fromType) && toType.equals(double.class) ) + return Double.valueOf((double) ((Integer) fromValue).intValue()); + + if ( Long.class.equals(fromType) && toType.equals(double.class) ) + return Double.valueOf((double) ((Long) fromValue).longValue()); + + if ( Float.class.equals(fromType) && toType.equals(double.class) ) + return Double.valueOf((double) ((Float) fromValue).floatValue()); + + throw new IllegalArgumentException("Can't convert [" + fromValue + "] to " + toType); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/PrimitiveTypeConverter.jmpp b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/PrimitiveTypeConverter.jmpp new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/PrimitiveTypeConverter.jmpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +public class PrimitiveTypeConverter { + + /** Unbox, cast and box */ + public static Object cast(Object fromValue, Class toType) { + + Class fromType = fromValue.getClass(); +# +# String[] ptypes = new String[] { "byte", "short", "char", "int", "long", "float", "double" }; +# String[] btypes = new String[] { "Byte", "Short", "Character", "Integer", "Long", "Float", "Double" }; +# +# for ( int f = 0; f < ptypes.length; f++ ) { +# String fb = btypes[f]; +# String fp = ptypes[f]; +# for ( int t = 0; t < ptypes.length; t++ ) { +# String tp = ptypes[t]; +# String tb = btypes[t]; + + if ( @fb.class.equals(fromType) && toType.equals(@tp.class) ) +# +# if ( f == t ) { +# + return fromValue; +# +# } else { +# + return @tb.valueOf((@tp) ((@fb) fromValue).@(fp)Value()); +# +# } +# } +# } + + throw new IllegalArgumentException("Can't cast [" + fromValue + "] to " + toType); + } + + /** Unbox, do primitive widening conversion (JLS 5.1.2) and box */ + public static Object convert(Object fromValue, Class toType) { + Class fromType = fromValue.getClass(); +# +# for ( int t = 0; t < ptypes.length; t++ ) { +# String tp = ptypes[t]; +# String tb = btypes[t]; +# +# if ( tp.equals("char") ) continue; +# + + if ( @tb.class.equals(fromType) && toType.equals(@tp.class) ) + return fromValue; +# +# for ( int f = 0; f < t; f++ ) { +# String fp = ptypes[f]; +# String fb = btypes[f]; + + if ( @fb.class.equals(fromType) && toType.equals(@tp.class) ) + return @tb.valueOf((@tp) ((@fb) fromValue).@(fp)Value()); +# } +# } + + throw new IllegalArgumentException("Can't convert [" + fromValue + "] to " + toType); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomArgumentGen.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomArgumentGen.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomArgumentGen.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +public class RandomArgumentGen { + + public static Argument next() throws InstantiationException, IllegalAccessException { + return next(RandomTypeGen.next()); + } + + public static Argument next(Class type) throws InstantiationException, IllegalAccessException { + return new Argument(type, RandomValueGen.next(type)); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomArgumentsGen.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomArgumentsGen.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomArgumentsGen.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +import java.lang.invoke.MethodType; + +public final class RandomArgumentsGen { + + public static Argument[] createRandomArgs(boolean isVirtual, final MethodType mt) { + return Arguments.fromMethodType(isVirtual, mt, new MethodParameterValueProvider() { + @Override + public Object getValue(MethodType t, int paramNum) { + try { + return RandomValueGen.next(t.parameterType(paramNum)); + } catch (Exception e) { + return null; + } + } + }); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomMTGen.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomMTGen.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomMTGen.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +import java.lang.invoke.MethodType; + +import vm.mlvm.share.Env; + +public class RandomMTGen { + + private static final int MAX_ARGS = 10; + + public static MethodType generateRandomMT() { + Class rtype = RandomTypeGen.next(); + Class[] ptypes = new Class[Env.getRNG().nextInt(MAX_ARGS)]; + for ( int i = 0; i < ptypes.length; i++ ) { + ptypes[i] = RandomTypeGen.next(); + } + + return MethodType.methodType(rtype, ptypes); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomTypeGen.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomTypeGen.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomTypeGen.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +import vm.mlvm.share.Env; + +public class RandomTypeGen { + + public static Class next() { + return TestTypes.TYPES[Env.getRNG().nextInt(TestTypes.TYPES.length)]; + } + + public static void main(String[] args) { + for (int i = 0; i < 10; i++) + System.out.println(next()); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomValueGen.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomValueGen.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomValueGen.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +public class RandomValueGen { + + private static final int MAX_DISTINCT_TRIES = 11; + + /* + * Primitive values are returned boxed. void is returned as null String + * contains 0..100 random characters + */ + public static Object next(Class type) throws InstantiationException, IllegalAccessException { + return TestTypes.nextRandomValueForType(type); + } + + public static Object nextDistinct(Class type, Object notEqualTo) throws InstantiationException, IllegalAccessException { + Object nonEqualValue; + for ( int i = MAX_DISTINCT_TRIES; i > 0; i -- ){ + nonEqualValue = next(type); + if ( ! nonEqualValue.equals(notEqualTo) ) + return nonEqualValue; + } + + // A workaround for booleans. Sometimes RNG produces long series of trues or falses + if ( type.equals(Boolean.class) || type.equals(boolean.class) ) + return new Boolean(! (Boolean) notEqualTo); + + throw new InstantiationException("Can't create distinct value for type=[" + type.getName() + "]; value=[" + notEqualTo + "]"); + } + + public static void main(String[] args) { + for (int i = 0; i < 10; i++) { + Class type = RandomTypeGen.next(); + Object value; + try { + value = next(type); + System.out.println("type=[" + type + "], value=[" + value + "]"); + } catch (Exception e) { + System.err.println("type=[" + type + "]"); + e.printStackTrace(); + } + } + } + + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/SimpleOpMethodHandles.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/SimpleOpMethodHandles.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/SimpleOpMethodHandles.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +public class SimpleOpMethodHandles { + + public static boolean eq(Object o1, Object o2) { + return o1.equals(o2); + } + + public static boolean not(boolean a) { + return ! a; + } + + public static MethodHandle notMH() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic(SimpleOpMethodHandles.class, "not", MethodType.methodType(boolean.class, boolean.class)); + } + + public static MethodHandle eqMH() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic(SimpleOpMethodHandles.class, "eq", MethodType.methodType(boolean.class, Object.class, Object.class)); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/SimpleUnitTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/SimpleUnitTest.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/SimpleUnitTest.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; +import vm.share.options.Option; + +public class SimpleUnitTest extends MlvmTest { + + @Option(name = "failOnce", default_value = "false", description = "exit after the first failure") + private boolean failOnce = true; + + public SimpleUnitTest() {} + + public SimpleUnitTest test1(int a, float b) { + Env.traceNormal("test1(%d, %f) called", a, b); + return this; + } + + private static SimpleUnitTest sut = new SimpleUnitTest(); + + public static SimpleUnitTest test2(int a, float b) { + Env.traceNormal("test2(%d, %f) called", a, b); + return sut; + } + + public static int test3(int a) { + Env.traceNormal("test3(%d) called", a); + return a; + } + + public void test4() { + Env.traceNormal("test4() called"); + } + + public SimpleUnitTest test5() { + Env.traceNormal("test5() called"); + return this; + } + + public static void main(String[] args) { MlvmTest.launch(args); } + + @Override + public boolean run() throws Throwable { + try { + Argument retArg; + retArg = new Argument(SimpleUnitTest.class, sut); + retArg.setPreserved(true); + + Argument intArg = new Argument(int.class, new Integer(1)); + + for ( ;; ) { + try { + switch ( Env.getRNG().nextInt(5) ) { + case 0: + MHTransformationGen.createAndCallSequence( + retArg, + sut, + MethodHandles.lookup().findVirtual( + SimpleUnitTest.class, + "test1", + MethodType.methodType(SimpleUnitTest.class, int.class, float.class) + ), + new Argument[] { new Argument(int.class, new Integer(1)), new Argument(float.class, new Float(1.0)) }, + true); + break; + + case 1: + MHTransformationGen.createAndCallSequence( + retArg, + null, + MethodHandles.lookup().findStatic( + SimpleUnitTest.class, + "test2", + MethodType.methodType(SimpleUnitTest.class, int.class, float.class) + ), + new Argument[] { new Argument(int.class, new Integer(1)), new Argument(float.class, new Float(1.0)) }, + true); + break; + + case 2: + MHTransformationGen.createAndCallSequence( + intArg, + null, + MethodHandles.lookup().findStatic( + SimpleUnitTest.class, + "test3", + MethodType.methodType(int.class, int.class) + ), + new Argument[] { intArg }, + true); + break; + + case 3: + MHTransformationGen.createAndCallSequence( + new Argument(void.class, null), + sut, + MethodHandles.lookup().findVirtual( + SimpleUnitTest.class, + "test4", + MethodType.methodType(void.class) + ), + new Argument[0], + false); + break; + + default: + MHTransformationGen.createAndCallSequence( + retArg, + sut, + MethodHandles.lookup().findVirtual( + SimpleUnitTest.class, + "test5", + MethodType.methodType(SimpleUnitTest.class) + ), + new Argument[0], + true); + break; + + } + } catch ( Throwable e ) { + Env.getLog().complain("Caught exception", e); + if ( failOnce ) + return false; + } + } + } catch ( Throwable t ) { + t.printStackTrace(); + return false; + } + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/TestTypes.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/TestTypes.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/TestTypes.java @@ -0,0 +1,313 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import nsk.share.test.TestUtils; +import vm.mlvm.share.Env; + +public class TestTypes { + + public static final Class[] TYPES = { + // void.class + boolean.class, byte.class, char.class, short.class, int.class, long.class, + float.class, double.class, Object.class, String.class + }; + + public static final Map, Class> BOX_MAP = new HashMap, Class>(); + public static final Map, Class> UNBOX_MAP = new HashMap, Class>(); + static { + BOX_MAP.put(boolean.class, Boolean.class); + BOX_MAP.put(byte.class, Byte.class); + BOX_MAP.put(char.class, Character.class); + BOX_MAP.put(short.class, Short.class); + BOX_MAP.put(int.class, Integer.class); + BOX_MAP.put(long.class, Long.class); + BOX_MAP.put(float.class, Float.class); + BOX_MAP.put(double.class, Double.class); + + for ( Entry, Class> e : BOX_MAP.entrySet() ) { + UNBOX_MAP.put(e.getValue(), e.getKey()); + } + } + + public static final Class[] PRIMITIVE_WIDENING_HIERARCHY = { + byte.class, short.class, char.class, int.class, long.class, float.class, double.class + }; + + public static boolean isBoxedType(Class type) { + return BOX_MAP.values().contains(type); + } + + private static void addPrimitiveAndBoxed(List> list, Class type) { + list.add(type); + list.add(BOX_MAP.get(type)); + } + + /** + * WPC = JLS 5.1.2 Widening Primitive Conversions + * @param type + * @return + */ + private static void addWPCAssignableTypesFor(List> result, Class type) { + if ( type.equals(short.class) ) { + addPrimitiveAndBoxed(result, byte.class); + } + + if ( type.equals(int.class) || type.equals(long.class) || type.equals(float.class) || type.equals(double.class) ) { + for ( int p = 0; p < PRIMITIVE_WIDENING_HIERARCHY.length; p++ ) { + Class c = PRIMITIVE_WIDENING_HIERARCHY[p]; + addPrimitiveAndBoxed(result, c); + + if ( c.equals(type) ) + break; + } + } + } + + /** + * NPC = JLS 5.1.3 Narrowing Primitive Conversions + * + JLS 5.1.4 Widening and Narrowing Primitive Conversions + */ + private static void addNPCAssignableTypesFor(List> result, Class type) { + // JLS 5.1.4 + if ( type.equals(char.class) ) { + addPrimitiveAndBoxed(result, byte.class); + } + + // JLS 5.1.3 + int p = 0; + for ( ; p < PRIMITIVE_WIDENING_HIERARCHY.length; p++ ) { + if ( PRIMITIVE_WIDENING_HIERARCHY[p].equals(type) ) + break; + } + + for ( ; p < PRIMITIVE_WIDENING_HIERARCHY.length; p++ ) { + addPrimitiveAndBoxed(result, PRIMITIVE_WIDENING_HIERARCHY[p]); + } + } + + public static Class[] getAssignableTypesFor(Class type) { + if ( type.equals(void.class) ) + return new Class[0]; + + if ( type.isPrimitive() ) { + List> result = new LinkedList>(); + addPrimitiveAndBoxed(result, type); + addWPCAssignableTypesFor(result, type); + return (Class[]) result.toArray(); + } + + if ( type.equals(Object.class) ) + return new Class[] { Object.class, String.class }; + + if ( type.equals(String.class) ) + return new Class[] { String.class }; + + throw new IllegalArgumentException("Don't know how to handle type " + type); + } + + public static Class[] getExplicitlyCastTypesFor(Class type) { + return TYPES; + } + + public static boolean canConvertType(Class from, Class to, boolean isRetType) { + return (Boolean) convert(from, null, to, isRetType, true); + } + + public static boolean canExplicitlyCastType(Class from, Class to, boolean isRetType) { + return true; // TODO: can use explicitCaseArguments() to convert "from" to "to" + } + + /** convert an argument according to the rules defined in MethodHandles.convertArguments() */ + public static Argument convertArgument(Argument from, Class toType, boolean isRetType) throws ClassCastException { + Class fromType = from.getType(); + + if ( fromType.equals(toType) ) + return from; + + Object toValue = convert(fromType, from.getValue(), toType, isRetType, false); + return new Argument(toType, toValue, from.isPreserved(), from.getTag()); + } + + /** convert an argument according to the rules defined in MethodHandles.convertArguments() */ + private static Object convert(Class fromType, Object fromValue, Class toType, boolean isRetType, boolean dryRun) { + if ( ! dryRun ) { + if ( ! fromType.isPrimitive() ) + TestUtils.assertTrue(fromType.isAssignableFrom(fromValue.getClass()), "fromType " + fromType + " is not assignable from the type of fromValue " + fromValue); + else + TestUtils.assertTrue(BOX_MAP.get(fromType).isAssignableFrom(fromValue.getClass()), "Boxed fromType " + fromType + " is not assignable from the type of fromValue " + fromValue); + } + + // JLS 5.1.1 Identity conversion + if ( fromType.equals(toType) ) + return dryRun ? Boolean.TRUE : fromValue; + + Class exactFromType = fromValue.getClass(); + + Throwable cause = null; + + try { + if ( isRetType ) { + // If the return type T1 is void, any returned value is discarded + if ( toType.equals(void.class) ) + return dryRun ? true : null; + + // If the return type T0 is void and T1 a reference, a null value is introduced. + if ( fromType.equals(void.class) && ! toType.isPrimitive() ) + return dryRun ? true : null; + + // If the return type T0 is void and T1 a primitive, a zero value is introduced. + if ( fromType.equals(void.class) && toType.isPrimitive() ) { + return dryRun ? true : BOX_MAP.get(toType).newInstance(); + } + } + + // If T0 and T1 are references, then a cast to T1 is applied. + // (The types do not need to be related in any particular way.) + if ( ! fromType.isPrimitive() && ! toType.isPrimitive() ) { + return dryRun ? toType.isAssignableFrom(fromType) + : toType.cast(fromValue); + } + + // If T0 and T1 are primitives, then a Java method invocation conversion + // (JLS 5.3) is applied, if one exists. + if ( fromType.isPrimitive() && toType.isPrimitive() ) { + if ( dryRun ) { + for ( Class tt : getAssignableTypesFor(toType) ) { + if ( tt.equals(fromType) ) + return true; + } + + return false; + } else { + return PrimitiveTypeConverter.convert(fromValue, toType); + } + } + + // If T0 is a primitive and T1 a reference, a boxing conversion is applied + // if one exists, possibly followed by a reference conversion to a superclass. + // T1 must be a wrapper class or a supertype of one. + if ( fromType.isPrimitive() && ! toType.isPrimitive() ) { + return dryRun ? toType.isAssignableFrom(BOX_MAP.get(fromType)) + : toType.cast(fromType.cast(fromValue)); + } + + // If T0 is a reference and T1 a primitive, an unboxing conversion will be applied + // at runtime, possibly followed by a Java method invocation conversion (JLS 5.3) + // on the primitive value. (These are the widening conversions.) T0 must be + // a wrapper class or a supertype of one. (In the case where T0 is Object, + // these are the conversions allowed by java.lang.reflect.Method.invoke.) + if ( ! fromType.isPrimitive() && toType.isPrimitive() ) { + if ( dryRun ) { + if ( ! BOX_MAP.values().contains(exactFromType) ) + return false; + + + } + + return dryRun ? toType.isAssignableFrom(BOX_MAP.get(fromType)) + : toType.cast(fromType.cast(fromValue)); + } + + } catch ( Throwable t ) { + cause = t; + } + + if ( dryRun ) + return Boolean.FALSE; + else + throw (ClassCastException) (new ClassCastException("Can't convert value [" + fromValue + "] from type [" + fromType + "] to type [" + toType + "]")).initCause(cause); + } + + public static Argument explicitCastArgument(Argument from, Class toType, boolean isRetType) { + return from; // TODO + } + + public static Object nextRandomValueForType(Class type) throws InstantiationException, IllegalAccessException { + if (type.equals(void.class)) + return null; + + if (type.equals(boolean.class) || type.equals(Boolean.class)) + return new Boolean(Env.getRNG().nextInt(2) == 0); + + if (type.equals(byte.class) || type.equals(Byte.class)) + return new Byte((byte) Env.getRNG().nextInt(1 << Byte.SIZE)); + + if (type.equals(int.class) || type.equals(Integer.class)) + return new Integer(Env.getRNG().nextInt()); + + if (type.equals(short.class) || type.equals(Short.class)) + return new Short((short) Env.getRNG().nextInt(1 << Short.SIZE)); + + if (type.equals(long.class) || type.equals(Long.class)) + return new Long(Env.getRNG().nextLong()); + + if (type.equals(float.class) || type.equals(Float.class)) + return new Float(Env.getRNG().nextFloat()); + + if (type.equals(double.class) || type.equals(Double.class)) + return new Double(Env.getRNG().nextDouble()); + + if (type.equals(char.class) || type.equals(Character.class)) + return new Character((char) (32 + Env.getRNG().nextInt(96))); + + if (type.equals(Object.class)) + return new Object(); + + if (type.equals(String.class)) { + StringBuilder sb = new StringBuilder(); + for (int i = Env.getRNG().nextInt(100); i > 0; i--) + sb.append(nextRandomValueForType(char.class)); + return sb.toString(); + } + + throw new IllegalArgumentException("Don't know how to handle type " + type); + } + + public static int getSlotsCount(Class type) { + if (type.equals(void.class)) + return 0; + + if ( type.equals(boolean.class) || type.equals(Boolean.class) + || type.equals(byte.class) || type.equals(Byte.class) + || type.equals(int.class) || type.equals(Integer.class) + || type.equals(short.class) || type.equals(Short.class) + || type.equals(float.class) || type.equals(Float.class) + || type.equals(char.class) || type.equals(Character.class) + || Object.class.isAssignableFrom(type) ) + return 1; + + if ( type.equals(long.class) || type.equals(Long.class) + || type.equals(double.class) || type.equals(Double.class)) + return 2; + + throw new IllegalArgumentException("Don't know how to handle type " + type); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArrayEnvelopeTFPair.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArrayEnvelopeTFPair.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArrayEnvelopeTFPair.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.reflect.Array; + +import vm.mlvm.meth.share.Argument; + +public class MHArrayEnvelopeTFPair extends MHEnvelopeArgTFPair { + + public MHArrayEnvelopeTFPair(MHCall outboundTarget, int argNum, int arrayIdx, int arraySize) { + super(outboundTarget, + "ArrayGetSet_" + outboundTarget.hashCode(), + argNum, + getLocatorArg(arrayIdx), + getEnvelopeArg(outboundTarget.getArgs()[argNum], arrayIdx, arraySize)); + + if ( arrayIdx > arraySize ) + throw new IllegalArgumentException("Array index [" + arrayIdx + "] should be less than array size [" + arraySize + "]"); + } + + private static Argument getLocatorArg(int arrayIdx) { + return new Argument(int.class, arrayIdx); + } + + private static Argument getEnvelopeArg(Argument componentArg, int arrayIdx, int arraySize) { + Object array = Array.newInstance(componentArg.getType(), arraySize); + Array.set(array, arrayIdx, componentArg.getValue()); + return new Argument(array.getClass(), array); + } + + @Override + protected MHTF computeGetTF(Argument envelopeArg, Argument envelopeLocatorArg) { + return new MHArrayGetElemTF(envelopeArg, envelopeLocatorArg); + } + + @Override + protected MHTF computeSetTF(Argument envelopeArg, Argument envelopeLocatorArg, Argument componentArg) { + return new MHArraySetElemTF(envelopeArg, envelopeLocatorArg, componentArg); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArrayGetElemTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArrayGetElemTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArrayGetElemTF.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.reflect.Array; + +import vm.mlvm.meth.share.Argument; + +public class MHArrayGetElemTF extends MHNullaryTF { + + private final Argument arrayArg; + private final Argument idxArg; + private final int idx; + + public MHArrayGetElemTF(Argument array, Argument idxArg) { + this.arrayArg = array; + this.idxArg = idxArg; + this.idx = (Integer) idxArg.getValue(); + } + + @Override + protected void check() throws IllegalArgumentException { + if ( ! this.arrayArg.getType().isArray() ) + throw new IllegalArgumentException("Argument " + this.arrayArg + " should be an array!"); + + if ( ! this.idxArg.getType().equals(int.class) ) + throw new IllegalArgumentException("Argument " + this.idxArg + " should be of type int!"); + + if ( this.idx < 0 || this.idx >= Array.getLength(this.arrayArg.getValue()) ) + throw new IllegalArgumentException("Index " + this.idxArg + " is out of bounds for array " + this.arrayArg); + } + + @Override + protected Argument computeRetVal() { + return new Argument(this.arrayArg.getType().getComponentType(), Array.get(this.arrayArg.getValue(), idx)); + } + + @Override + protected Argument[] computeInboundArgs() { + return new Argument[] { arrayArg, idxArg }; + } + + @Override + protected MethodHandle computeInboundMH() { + return MethodHandles.arrayElementGetter(this.arrayArg.getType()); + } + + @Override + protected String getName() { + return "arrayElementGetter"; + } + + @Override + protected String getDescription() { + return "array=" + this.arrayArg + "; idx=" + this.idxArg; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArraySetElemTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArraySetElemTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArraySetElemTF.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.reflect.Array; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.MHUtils; + +public class MHArraySetElemTF extends MHNullaryTF { + + private final Argument arrayArg; + private final Argument idxArg; + private final int idx; + private final Argument newValueArg; + + public MHArraySetElemTF(Argument array, Argument idxArg, Argument newValue) { + this.arrayArg = array; + this.idxArg = idxArg; + this.idx = (Integer) idxArg.getValue(); + this.newValueArg = newValue; + } + + @Override + protected void check() throws IllegalArgumentException { + if ( ! this.arrayArg.getType().isArray() ) + throw new IllegalArgumentException("Argument " + this.arrayArg + " should be an array!"); + + if ( ! this.idxArg.getType().equals(int.class) ) + throw new IllegalArgumentException("Argument " + this.idxArg + " should be of type int!"); + + if ( this.idx < 0 || this.idx >= Array.getLength(this.arrayArg.getValue()) ) + throw new IllegalArgumentException("Index " + this.idx + " is out of bounds for array " + this.arrayArg); + + MHUtils.assertAssignableType("Can't assign new value to array", this.arrayArg.getType().getComponentType(), this.newValueArg.getType()); + } + + @Override + protected Argument computeRetVal() { + return new Argument(void.class, null); + } + + @Override + protected Argument[] computeInboundArgs() { + return new Argument[] { this.arrayArg, this.idxArg, this.newValueArg }; + } + + @Override + protected MethodHandle computeInboundMH() { + return MethodHandles.arrayElementSetter(this.arrayArg.getType()); + } + + @Override + protected String getName() { + return "arrayElementSetter"; + } + + @Override + protected String getDescription() { + return "array=" + this.arrayArg + "; idx=" + this.idxArg + "; newValue=" + this.newValueArg; + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHBasicUnaryTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHBasicUnaryTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHBasicUnaryTF.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; + +import vm.mlvm.meth.share.Argument; + +public abstract class MHBasicUnaryTF extends MHUnaryTF { + + protected MHBasicUnaryTF(final MHCall target) { + super(target); + } + + // Syntax sugar + + @Override + protected void check() throws IllegalArgumentException { + check(getTargetCall().getArgs()); + } + + @Override + protected Argument computeRetVal() { + return computeRetVal(getTargetCall().getRetVal()); + } + + @Override + protected Argument[] computeInboundArgs() { + return computeInboundArgs(getTargetCall().getArgs()); + } + + @Override + protected MethodHandle computeInboundMH() throws NoSuchMethodException, IllegalAccessException { + return computeInboundMH(getTargetCall().getTargetMH()); + } + + protected void check(Argument[] targetArgs) throws IllegalArgumentException { + } + + protected Argument computeRetVal(Argument targetRetVal) { + return targetRetVal; + } + + protected Argument[] computeInboundArgs(Argument[] targetArgs) { + return targetArgs; + } + + protected MethodHandle computeInboundMH(MethodHandle targetMH) throws NoSuchMethodException, IllegalAccessException { + return targetMH; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHBindTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHBindTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHBindTF.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import vm.mlvm.meth.share.Argument; + +public class MHBindTF extends MHInsertTF { + + protected MHBindTF(MHCall target, Argument bindToValue, boolean canDropProtected) { + super(target, 0, new Argument[] { bindToValue }, canDropProtected); + } + + @Override + protected String getName() { + return "bindTo"; + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCall.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCall.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCall.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.util.Arrays; + +import nsk.share.test.LazyObjectArrayToString; +import nsk.share.test.LazyFormatString; +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.Arguments; +import vm.mlvm.meth.share.MHUtils; +import vm.mlvm.share.Env; + +public class MHCall { + + private static final boolean TRACE = false; + private static final boolean TRACE_COMPLAIN_VALUE_MISMATCHES = false; + + private final MHTF _target; + private final Argument[] _args; + private final Argument _retVal; + private final MethodHandle _targetMH; + + MHCall(Argument retVal, MHTF target, MethodHandle targetMH, Argument[] args) { + _args = args; + _target = target; + _retVal = retVal; + + if ( TRACE ) { + try { + targetMH = MethodHandles.explicitCastArguments( + MethodHandles.lookup().findVirtual(MHCall.class, "trace", MethodType.methodType(Object.class, MethodHandle.class, Object[].class)) + .bindTo(this) + .bindTo(targetMH.asSpreader(Object[].class, targetMH.type().parameterCount())) + .asCollector(Object[].class, targetMH.type().parameterCount()), + targetMH.type()); + } catch ( Exception e ) { + Env.complain(e, "Can't add tracing to MHCall %s", this); + } + } + + _targetMH = targetMH; + Env.traceDebug("Created MHCall: %s", this); + } + + @SuppressWarnings("unused") + private Object trace(MethodHandle targetMH, Object[] args) throws Throwable { + try { + Env.traceNormal("Invoking %s\n\t\targuments=%s", _target, new LazyObjectArrayToString(args)); + + for ( int i = 0; i < args.length; i++ ) { + Object actualArg = args[i]; + Object goldenArg = _args[i].getValue(); + if ( actualArg != null && ! actualArg.equals(goldenArg) || actualArg == null && goldenArg != null ) { + if ( TRACE_COMPLAIN_VALUE_MISMATCHES ) + Env.complain("\t\tArgument " + i + " mismatch: actual=%s, required=%s", actualArg, goldenArg); + else + Env.traceNormal("\t\tArgument " + i + " mismatch: actual=%s, required=%s", actualArg, goldenArg); + } + } + + Object result = targetMH.invoke((Object[]) args); + + Env.traceNormal("Returning from %s\n\t\tresult=%s", _target, result); + + Object requiredRetVal = _retVal.getValue(); + if ( result != null && ! result.equals(requiredRetVal) || result == null && requiredRetVal != null ) { + if ( TRACE_COMPLAIN_VALUE_MISMATCHES ) + Env.complain("\t\tResult mismatch: actual=%s, required=%s", result, requiredRetVal); + else + Env.traceNormal("\t\tResult mismatch: actual=%s, required=%s", result, requiredRetVal); + } + + return result; + } catch ( Throwable t ){ + Env.traceNormal(t, "Exception caught after calling %s", _target); + throw t; + } + } + + public Argument getRetVal() { + return _retVal; + } + + /** + * @return May return null if target is not a transformation (but, say, a user's MH) + */ + public MHTF getTarget() { + return _target; + } + + public MethodHandle getTargetMH() { + return _targetMH; + } + + public Argument[] getArgs() { + return _args; + } + + public void check() throws IllegalArgumentException { + MethodType mt = _targetMH.type(); + for ( int i = 0; i < mt.parameterCount(); i++ ) { + MHUtils.assertAssignableType(new LazyFormatString("argument %i in %s", i, this), mt.parameterType(i), _args[i].getType()); + } + + MHUtils.assertAssignableType(new LazyFormatString("return type in %s", this), mt.returnType(), _retVal.getType()); + } + + public Object call() throws Throwable { + if ( ! _retVal.getType().equals(void.class) ) + return (Object) _targetMH.invokeWithArguments(Arguments.valuesArray(_args)); + else { + _targetMH.invokeWithArguments(Arguments.valuesArray(_args)); + return null; + } + } + + public Object callAndCheckRetVal() throws Throwable { + Object r = call(); + + if ( ! _retVal.getType().equals(void.class) && ! r.equals(_retVal.getValue()) ) + throw new IllegalArgumentException("Call returned wrong value: " + + "actual=" + r + + "; expected=" + _retVal.getValue()); + return r; + } + + @Override + public String toString() { + return "MHCall: target=" + _target + "; args=" + Arrays.toString(_args) + "; retVal=" + _retVal + "; targetMH=" + _targetMH; + } + + String prettyPrint(String topPrefix, String subPrefix) { + return topPrefix + "MHCall: target = " + _target + "\n" + + subPrefix + " arguments = " + Arrays.toString(_args) + "\n" + + subPrefix + " retVal = " + _retVal + "\n" + + subPrefix + " targetMH = " + _targetMH; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCastTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCastTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCastTF.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodType; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.Arguments; +import vm.mlvm.meth.share.TestTypes; + +public abstract class MHCastTF extends MHBasicUnaryTF { + + protected final Argument[] newArgs; + protected final Argument newRetVal; + protected final MethodType newMT; + + protected MHCastTF(MHCall target, Class newRetType, Class[] newArgTypes) { + super(target); + + Argument[] targetArgs = target.getArgs(); + + if ( newArgTypes.length != targetArgs.length ) + throw new IllegalArgumentException("newArgTypes length (" + newArgTypes.length + ") should be equal to argument count (" + targetArgs.length + ")"); + + this.newArgs = new Argument[newArgTypes.length]; + for ( int i = 0; i < this.newArgs.length; i++ ) { + if ( ! TestTypes.canConvertType(targetArgs[i].getType(), this.newArgs[i].getType(), false) ) + throw new IllegalArgumentException("Can't convert argument #" + i + " from [" + targetArgs[i].getType() + " to [" + this.newArgs[i].getType()); + + this.newArgs[i] = convert(targetArgs[i], newArgTypes[i], false); + } + + this.newRetVal = convert(target.getRetVal(), newRetType, true); + + this.newMT = MethodType.methodType(this.newRetVal.getType(), Arguments.typesArray(this.newArgs)); + } + + protected abstract Argument convert(Argument argument, Class newClass, boolean isRetType); + + @Override + protected abstract MethodHandle computeInboundMH(MethodHandle targetMH) throws NoSuchMethodException, IllegalAccessException; + + @Override + protected Argument[] computeInboundArgs(Argument[] targetArgs) { + return this.newArgs; + } + + @Override + protected Argument computeRetVal(Argument targetRetVal) { + return this.newRetVal; + } + + @Override + protected String getDescription() { + return "newRetVal=[" + this.newRetVal + "]; newArgs=[" + this.newArgs + "]"; + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCollectSpreadBaseTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCollectSpreadBaseTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCollectSpreadBaseTF.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodType; + +public abstract class MHCollectSpreadBaseTF extends MHBasicUnaryTF { + + public MHCollectSpreadBaseTF(MHCall target) { + super(target); + } + + @Override + protected MethodHandle computeInboundMH(MethodHandle targetMH) throws NoSuchMethodException, IllegalAccessException { + return computeCollectorMH(computeSpreaderMH(targetMH), targetMH.type()); + } + + protected abstract MethodHandle computeCollectorMH(MethodHandle spreaderMH, MethodType targetType); + protected abstract MethodHandle computeSpreaderMH(MethodHandle targetMH); + + @Override + protected String getDescription() { + return ""; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCollectSpreadTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCollectSpreadTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCollectSpreadTF.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodType; + +public class MHCollectSpreadTF extends MHCollectSpreadBaseTF { + + public MHCollectSpreadTF(MHCall target) { + super(target); + } + + @Override + protected MethodHandle computeCollectorMH(MethodHandle spreaderMH, MethodType targetType) { + return spreaderMH.asCollector(Object[].class, targetType.parameterCount()).asType(targetType); + } + + @Override + protected MethodHandle computeSpreaderMH(MethodHandle targetMH) { + return targetMH.asSpreader(Object[].class, targetMH.type().parameterCount()); + } + + @Override + protected String getName() { + return "CollectSpread"; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHConstantTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHConstantTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHConstantTF.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; + +import vm.mlvm.meth.share.Argument; + +// TODO: cover widening/narrowing conversions +public class MHConstantTF extends MHNullaryTF { + + protected final Argument retVal; + + public MHConstantTF(Argument retVal) { + this.retVal = retVal; + } + + @Override + protected void check() throws IllegalArgumentException { + } + + @Override + protected Argument computeRetVal() { + return this.retVal; + } + + @Override + protected Argument[] computeInboundArgs() { + return new Argument[0]; + } + + @Override + protected MethodHandle computeInboundMH() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.constant(retVal.getType(), retVal.getValue()); + } + + @Override + protected String getName() { + return "constant"; + } + + @Override + protected String getDescription() { + return "retVal=" + retVal; + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHConvertTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHConvertTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHConvertTF.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.TestTypes; + +public class MHConvertTF extends MHCastTF { + + protected MHConvertTF(MHCall target, Class newRetType, Class[] newArgTypes) { + super(target, newRetType, newArgTypes); + } + + @Override + protected Argument convert(Argument argument, Class newClass, boolean isRetType) { + return TestTypes.convertArgument(argument, newClass, isRetType); + } + + @Override + protected MethodHandle computeInboundMH(MethodHandle targetMH) throws NoSuchMethodException, IllegalAccessException { + throw new RuntimeException("Internal error: Functionality disabled in JDK7"); + /* + return MethodHandles.convertArguments(targetMH, this.newMT); + */ + } + + @Override + protected String getName() { + return "convertArguments"; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHDropTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHDropTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHDropTF.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.WrongMethodTypeException; +import java.util.Arrays; + +import nsk.share.test.TestUtils; +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.Arguments; + +public class MHDropTF extends MHInsertOrDropTF { + + public MHDropTF(MHCall target, int pos, Argument[] values) { + super(target, pos, values); + } + + @Override + protected void check() { + int argCount = target.getArgs().length; + if ( pos > argCount ) + throw new WrongMethodTypeException("position " + pos + " is invalid. Target has only " + argCount + " arguments"); + } + + @Override + protected Argument[] computeInboundArgs(Argument[] targetArgs) { + return TestUtils.concatArrays( + Arrays.copyOfRange(targetArgs, 0, this.pos), + this.values, + Arrays.copyOfRange(targetArgs, this.pos, targetArgs.length)); + } + + @Override + protected MethodHandle computeInboundMH(MethodHandle targetMH) { + return MethodHandles.dropArguments(targetMH, this.pos, Arguments.typesArray(this.values)); + } + + @Override + protected String getName() { + return "dropArguments"; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHDropTF2.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHDropTF2.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHDropTF2.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.util.Arrays; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.Arguments; + +/** + * This is fully equivalent version of MHDropTF that just covers another version of dropArguments() + */ + +public class MHDropTF2 extends MHDropTF { + + public MHDropTF2(MHCall target, int pos, Argument[] values) { + super(target, pos, values); + } + + @Override + protected MethodHandle computeInboundMH(MethodHandle targetMH) { + // We increase coverage by using different methods + return MethodHandles.dropArguments(targetMH, this.pos, Arrays.asList(Arguments.typesArray(this.values))); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHEnvelopeArgTFPair.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHEnvelopeArgTFPair.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHEnvelopeArgTFPair.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.Arguments; + +public abstract class MHEnvelopeArgTFPair extends MHTFPair { + + private final String _tag; + private final int _argNum; + protected final Argument _envelopeArg; + protected final Argument _envelopeLocatorArg; + private final Argument _componentArg; + + public MHEnvelopeArgTFPair(MHCall outboundTarget, String tag, int argNum, Argument envelope, Argument envelopeLocator) { + super(outboundTarget); + + _tag = tag; + _argNum = argNum; + + envelopeLocator.setPreserved(true); + envelopeLocator.setTag(tag + "_Locator"); + _envelopeLocatorArg = envelopeLocator; + + Argument arg = outboundTarget.getArgs()[argNum]; + _componentArg = arg; + + envelope.setTag(tag + "_Envelope"); + envelope.setPreserved(true); + _envelopeArg = envelope; + } + + @Override + public MHTF getOutboundTF() { + try { + MHMacroTF mTF = new MHMacroTF("envelope arg outbound"); + mTF.addOutboundCall(outboundTarget); + + Argument[] outArgs = outboundTarget.getArgs(); + + mTF.addTransformation(new MHPermuteTF( + mTF.addTransformation(new MHFoldTF( + mTF.addTransformation(new MHPermuteTF(outboundTarget, + MHPermuteTF.moveArgsInPermuteArray(MHPermuteTF.getIdentityPermuteArray(outArgs.length), 0, 1, _argNum) + )), + mTF.addTransformation(computeGetTF(_envelopeArg, _envelopeLocatorArg)) + )), + MHPermuteTF.moveArgsInPermuteArray(MHPermuteTF.getIdentityPermuteArray(outArgs.length + 1), _argNum, 2, 0) + )); + + return mTF; + } catch ( Exception e ) { + throw (IllegalArgumentException) (new IllegalArgumentException("Exception when creating TF")).initCause(e); + } + } + + protected abstract MHTF computeGetTF(Argument envelopeArg2, Argument envelopeLocatorArg2); + + @Override + public MHTF getInboundTF(MHCall target) { + try { + Argument[] outArgs = target.getArgs(); + + int[] arrayArgIdxs = Arguments.findTag(outArgs, _tag + "_Envelope"); + if ( arrayArgIdxs.length != 1 ) + throw new IllegalArgumentException("There should be only one argument tagged [" + _tag + "_Envelope], but there are " + arrayArgIdxs); + int arrayArgIdx = arrayArgIdxs[0]; + + int[] idxArgIdxs = Arguments.findTag(outArgs, _tag + "_Locator"); + if ( idxArgIdxs.length != 1 ) + throw new IllegalArgumentException("There should be only one argument tagged [" + _tag + "_Locator], but there are " + idxArgIdxs); + int idxArgIdx = idxArgIdxs[0]; + + MHMacroTF mTF = new MHMacroTF("envelope arg inbound"); + mTF.addOutboundCall(target); + + int[] innerPermuteArray = MHPermuteTF.getIdentityPermuteArray(outArgs.length); + + if ( arrayArgIdx < idxArgIdx ) + innerPermuteArray = MHPermuteTF.moveArgsInPermuteArray(MHPermuteTF.moveArgsInPermuteArray(innerPermuteArray, 0, 1, arrayArgIdx), 0, 1, idxArgIdx); + else + innerPermuteArray = MHPermuteTF.moveArgsInPermuteArray(MHPermuteTF.moveArgsInPermuteArray(innerPermuteArray, 0, 1, idxArgIdx), 0, 1, arrayArgIdx); + + mTF.addTransformation(new MHPermuteTF( + mTF.addTransformation(new MHInsertTF( + mTF.addTransformation(new MHFoldTF( + mTF.addTransformation(new MHPermuteTF(target, innerPermuteArray)), + mTF.addTransformation(computeSetTF(_envelopeArg, _envelopeLocatorArg, _componentArg)) + )), + 0, new Argument[] { _envelopeArg, _envelopeLocatorArg }, true + )), + MHPermuteTF.moveArgsInPermuteArray(MHPermuteTF.getIdentityPermuteArray(outArgs.length), arrayArgIdx, 1, 0) + )); + + return mTF; + } catch ( Exception e ) { + throw (IllegalArgumentException) (new IllegalArgumentException("Exception when creating TF")).initCause(e); + } + } + + protected abstract MHTF computeSetTF(Argument envelopeArg2, Argument envelopeLocatorArg2, Argument componentArg2); +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHExplicitCastTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHExplicitCastTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHExplicitCastTF.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.TestTypes; + +public class MHExplicitCastTF extends MHCastTF { + + protected MHExplicitCastTF(MHCall target, Class newRetType, Class[] newArgTypes) { + super(target, newRetType, newArgTypes); + } + + @Override + protected Argument convert(Argument argument, Class newClass, boolean isRetType) { + return TestTypes.explicitCastArgument(argument, newClass, isRetType); + } + + @Override + protected MethodHandle computeInboundMH(MethodHandle targetMH) { + return MethodHandles.explicitCastArguments(targetMH, this.newMT); + } + + @Override + protected String getName() { + return "explicitCastArguments"; + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFilterRetValTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFilterRetValTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFilterRetValTF.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.WrongMethodTypeException; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.MHUtils; + +public class MHFilterRetValTF extends MHNaryTF { + + protected final MHCall target, filter; + + public MHFilterRetValTF(MHCall target, MHCall filter) { + this.target = target; + this.filter = filter; + } + + @Override + protected void check() throws IllegalArgumentException { + if ( this.filter.getArgs().length != 1 ) + throw new WrongMethodTypeException("Filter should have exactly one argument, but has: " + this.filter.getArgs()); + + MHUtils.assertAssignableType("target return type to filter parameter", + this.filter.getArgs()[0].getType(), this.target.getRetVal().getType()); + } + + @Override + protected Argument computeRetVal() { + return this.filter.getRetVal(); + } + + @Override + protected Argument[] computeInboundArgs() { + return this.target.getArgs(); + } + + @Override + protected MethodHandle computeInboundMH() { + return MethodHandles.filterReturnValue(target.getTargetMH(), filter.getTargetMH()); + } + + @Override + public MHCall[] getOutboundCalls() { + return new MHCall[] { target, filter }; + } + + @Override + protected String getName() { + return "filterReturnValue"; + } + + @Override + protected String getDescription() { + return "filter=" + this.filter; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFilterTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFilterTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFilterTF.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.WrongMethodTypeException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import nsk.share.test.TestUtils; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.MHUtils; + +public class MHFilterTF extends MHNaryTF { + + protected final MHCall _target, _filters[]; + protected final int _pos; + + public MHFilterTF(MHCall target, int pos, MHCall[] filters) { + _target = target; + _pos = pos; + _filters = filters; + } + + @Override + protected void check() throws IllegalArgumentException { + Argument[] targetArgs = _target.getArgs(); + for ( int i = 0; i < _filters.length; i++ ) { + MHCall f = _filters[i]; + if ( f == null ) + continue; + + int p = i + _pos; + + if ( f.getArgs().length != 1 ) + throw new WrongMethodTypeException("Filter " + i + " should have exactly one argument, but has: " + f.getArgs()); + + MHUtils.assertAssignableType("filter return type to target parameter " + i, + targetArgs[p].getType(), + f.getRetVal().getType()); + } + } + + @Override + protected Argument computeRetVal() { + return _target.getRetVal(); + } + + @Override + protected Argument[] computeInboundArgs() { + Argument[] result = _target.getArgs().clone(); + + for ( int i = 0; i < _filters.length; i++ ) { + MHCall f = _filters[i]; + if ( f != null ) + result[i + _pos] = f.getArgs()[0]; + } + + return result; + } + + @Override + protected MethodHandle computeInboundMH() { + MethodHandle[] filterMHs = new MethodHandle[_filters.length]; + for ( int i = 0; i < _filters.length; i++ ) { + MHCall f = _filters[i]; + if ( f != null ) + filterMHs[i] = f.getTargetMH(); + } + return MethodHandles.filterArguments(_target.getTargetMH(), _pos, filterMHs); + } + + @Override + public MHCall[] getOutboundCalls() { + Set calls = new HashSet(); + calls.add(_target); + calls.addAll(Arrays.asList(_filters)); + calls.remove(null); + return calls.toArray(new MHCall[0]); + } + + @Override + protected String getName() { + return "filterArguments"; + } + + @Override + protected String getDescription() { + return "pos=" + _pos + "; filters=" + Arrays.toString(_filters); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFoldTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFoldTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFoldTF.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.util.Arrays; + +import nsk.share.test.TestUtils; +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.MHUtils; + +public class MHFoldTF extends MHNaryTF { + + protected final MHCall _combiner, _target; + + public MHFoldTF(MHCall target, MHCall combiner) { + _target = target; + _combiner = combiner; + } + + @Override + protected void check() throws IllegalArgumentException { + Argument[] targetArgs = _target.getArgs(); + Argument[] combinerArgs = _combiner.getArgs(); + + MHUtils.assertAssignableType( + "combiner result assignable to parameter 0", + targetArgs[0].getType(), + _combiner.getRetVal().getType()); + + for ( int i = 0; i < combinerArgs.length; i++ ) { + MHUtils.assertAssignableType( + "combiner parameter " + i + " assignable to target parameter " + (i + 1), + combinerArgs[i].getType(), + targetArgs[i + 1].getType()); + } + } + + @Override + protected Argument computeRetVal() { + return _target.getRetVal(); + } + + @Override + protected Argument[] computeInboundArgs() { + return TestUtils.cdr(_target.getArgs()); + } + + @Override + protected MethodHandle computeInboundMH() { + return MethodHandles.foldArguments(_target.getTargetMH(), _combiner.getTargetMH()); + } + + @Override + public MHCall[] getOutboundCalls() { + return new MHCall[] { _target, _combiner }; + } + + @Override + protected String getName() { + return "foldArguments"; + } + + @Override + protected String getDescription() { + return "combiner=" + _combiner; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHIdentityTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHIdentityTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHIdentityTF.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; + +import vm.mlvm.meth.share.Argument; + +public class MHIdentityTF extends MHNullaryTF { + + private final Argument _arg; + + public MHIdentityTF(Argument arg) { + _arg = arg; + } + + @Override + protected void check() throws IllegalArgumentException { + } + + @Override + protected Argument computeRetVal() { + return _arg; + } + + @Override + protected Argument[] computeInboundArgs() { + return new Argument[] { _arg }; + } + + @Override + protected MethodHandle computeInboundMH() { + return MethodHandles.identity(_arg.getType()); + } + + @Override + protected String getName() { + return "identity"; + } + + @Override + protected String getDescription() { + return "arg=" + _arg; + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHInsertOrDropTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHInsertOrDropTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHInsertOrDropTF.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import vm.mlvm.meth.share.Argument; + +public abstract class MHInsertOrDropTF extends MHBasicUnaryTF { + + protected final int pos; + protected final Argument[] values; + + protected MHInsertOrDropTF(MHCall target, int pos, Argument[] values) { + super(target); + this.pos = pos; + this.values = values; + } + + @Override + protected String getDescription() { + StringBuilder sb = new StringBuilder(); + int p = this.pos; + for ( Argument a : this.values ) { + sb.append("[").append(p).append("] ").append(a).append(", "); + ++p; + } + if ( sb.length() > 2 ) + sb.setLength(sb.length() - 2); + return sb.toString(); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHInsertTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHInsertTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHInsertTF.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.WrongMethodTypeException; +import java.util.Arrays; + +import nsk.share.test.TestUtils; +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.Arguments; +import vm.mlvm.meth.share.MHUtils; + +public class MHInsertTF extends MHInsertOrDropTF { + + protected final boolean _canDropProtected; + + public MHInsertTF(MHCall target, int pos, Argument[] values, boolean canDropProtected) { + super(target, pos, values); + _canDropProtected = canDropProtected; + } + + @Override + protected void check(Argument[] targetArgs) throws IllegalArgumentException { + super.check(targetArgs); + + for (int i = this.pos; i < Math.min(targetArgs.length, this.pos + this.values.length); i++) { + if ( ! _canDropProtected && targetArgs[i].isPreserved() ) { + throw new WrongMethodTypeException("Dropping a protected argument #" + i + + ": " + targetArgs[i]); + + } + + MHUtils.assertAssignableType("argument " + i, targetArgs[i].getType(), this.values[i - this.pos].getType()); + } + } + + @Override + protected Argument[] computeInboundArgs(Argument[] targetArgs) { + return TestUtils.concatArrays( + Arrays.copyOfRange(targetArgs, 0, this.pos), + Arrays.copyOfRange(targetArgs, this.pos + this.values.length, targetArgs.length)); + } + + @Override + protected MethodHandle computeInboundMH(MethodHandle targetMH) { + return MethodHandles.insertArguments(targetMH, this.pos, Arguments.valuesArray(this.values)); + } + + @Override + protected String getName() { + return "insertArguments"; + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHMacroTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHMacroTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHMacroTF.java @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.io.*; +import java.util.*; + +import vm.mlvm.share.Env; + +import nsk.share.test.TestUtils; + + +public class MHMacroTF extends MHTF { + + private final String name; + private final Collection calls = new HashSet<>(); + private final Collection outboundCalls = new LinkedHashSet<>(); + private MHCall inboundCall = null; + private final Collection tfs = new LinkedHashSet<>(); + + public MHMacroTF(String name) { + this.name = name; + } + + private void addNewInboundCall(MHCall call) { + TestUtils.assertNotInCollection(this.calls, call); + + this.inboundCall = call; + this.calls.add(call); + } + + public void addOutboundCall(MHCall call) { + TestUtils.assertNotInCollection(this.calls, call); + + this.calls.add(call); + this.outboundCalls.add(call); + } + + public MHCall addTransformation(MHTF tf) throws IllegalArgumentException, + NoSuchMethodException, IllegalAccessException { + TestUtils.assertNotInCollection(this.tfs, tf); + for (MHCall c : tf.getOutboundCalls()) { + TestUtils.assertInCollection(this.calls, c); + } + + Env.traceDebug("MHMacroTF: adding %s", tf); + + this.tfs.add(tf); + MHCall inboundCall = tf.computeInboundCall(); + addNewInboundCall(inboundCall); + + Env.traceDebug("MHMacroTF: current inbound call: %s", inboundCall); + + return inboundCall; + } + + @Override + public MHCall computeInboundCall() { + return inboundCall; + } + + @Override + public MHCall[] getOutboundCalls() { + return this.outboundCalls.toArray(new MHCall[0]); + } + + @Override + public MHTF[] getSubTFs() { + return this.tfs.toArray(new MHTF[0]); + } + + @Override + protected String getName() { + return name + " graph"; + } + + @Override + protected String getDescription() { + StringBuilder result = new StringBuilder("\n"); + Deque printElements = new ArrayDeque<>(); + printElements.add(new PrettyPrintElement("", " ", inboundCall, true)); + PrettyPrintElement current; + while (!printElements.isEmpty()) { + current = printElements.pop(); + appendElement(result, printElements, current.topCallPrefix, + current.subCallPrefix, current.topCall, + current.isRecursive); + } + String filename = getName() + "-" + + Long.toString(System.currentTimeMillis(), Character.MAX_RADIX) + + ".txt"; + try (Writer writer = new FileWriter(filename)) { + writer.write(result.toString()); + } catch (IOException e) { + return result.toString(); + } + return "see " + filename; + } + + private void appendElement(StringBuilder result, + Deque deque, String topCallPrefix, + String subCallPrefix, MHCall topCall, boolean isRecursive) { + MHCall[] outCalls = topCall.getTarget().getOutboundCalls(); + boolean printSubTree = (isRecursive && outCalls.length > 0); + result.append(topCall.prettyPrint(topCallPrefix + "->", + subCallPrefix + (printSubTree ? "|" : " ") + " ") + "\n"); + if (printSubTree) { + for (int n = outCalls.length - 1, i = n; i >= 0; --i) { + MHCall outCall = outCalls[i]; + boolean isLastSubtree = (i == n); + String curTopCallPrefix = subCallPrefix + + (isLastSubtree ? "\\" : "|") + + "--"; + String curSubCallPrefix = subCallPrefix + + (isLastSubtree ? " " : "|") + + " "; + deque.addFirst(new PrettyPrintElement(curTopCallPrefix, + curSubCallPrefix, outCall, + !outboundCalls.contains(outCall))); + } + } + } + + + private static class PrettyPrintElement { + final String topCallPrefix; + final String subCallPrefix; + final MHCall topCall; + final boolean isRecursive; + + private PrettyPrintElement(String topCallPrefix, + String subCallPrefix, MHCall topCall, boolean isRecursive) { + this.topCallPrefix = topCallPrefix; + this.subCallPrefix = subCallPrefix; + this.topCall = topCall; + this.isRecursive = isRecursive; + } + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHNaryTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHNaryTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHNaryTF.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; + +import vm.mlvm.meth.share.Argument; + +public class MHNaryTF extends MHPrimitiveTF { + + @Override + protected void check() throws IllegalArgumentException { + // TODO Auto-generated method stub + + } + + @Override + protected Argument computeRetVal() { + // TODO Auto-generated method stub + return null; + } + + @Override + protected Argument[] computeInboundArgs() { + // TODO Auto-generated method stub + return null; + } + + @Override + protected MethodHandle computeInboundMH() throws NoSuchMethodException, IllegalAccessException { + // TODO Auto-generated method stub + return null; + } + + @Override + public MHCall[] getOutboundCalls() { + // TODO Auto-generated method stub + return null; + } + + @Override + protected String getName() { + // TODO Auto-generated method stub + return null; + } + + @Override + protected String getDescription() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHNullaryTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHNullaryTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHNullaryTF.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +public abstract class MHNullaryTF extends MHPrimitiveTF { + + @Override + public MHCall[] getOutboundCalls() { + return new MHCall[0]; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHOutboundCallTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHOutboundCallTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHOutboundCallTF.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.util.Arrays; + +import vm.mlvm.meth.share.Argument; + +public class MHOutboundCallTF extends MHNullaryTF { + + private final Argument retVal; + private final MethodHandle mh; + private final Argument[] args; + + public MHOutboundCallTF(Argument retVal, MethodHandle mh, Argument[] args) { + this.retVal = retVal; + this.mh = mh; + this.args = args; + } + + @Override + protected void check() throws IllegalArgumentException { + } + + @Override + protected Argument computeRetVal() { + return this.retVal; + } + + @Override + protected Argument[] computeInboundArgs() { + return this.args; + } + + @Override + protected MethodHandle computeInboundMH() { + return this.mh; + } + + @Override + protected String getName() { + return "outboundCall"; + } + + @Override + protected String getDescription() { + return "retVal=" + this.retVal + "; mh=" + this.mh + "; args=" + Arrays.toString(this.args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHOutboundVirtualCallTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHOutboundVirtualCallTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHOutboundVirtualCallTF.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; + +import vm.mlvm.meth.share.Argument; + +public class MHOutboundVirtualCallTF extends MHOutboundCallTF { + + private final Object boundObj; + + public MHOutboundVirtualCallTF(Argument retVal, Object boundObj, MethodHandle mh, Argument[] args) { + super(retVal, mh, args); + this.boundObj = boundObj; + } + + @Override + protected MethodHandle computeInboundMH() { + return super.computeInboundMH().bindTo(boundObj); + } + + @Override + protected String getName() { + return "outboundVirtualCall"; + } + + @Override + protected String getDescription() { + return super.getDescription() + "; boundObj=" + boundObj; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHPermuteTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHPermuteTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHPermuteTF.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.invoke.WrongMethodTypeException; +import java.util.Arrays; + +import nsk.share.test.LazyIntArrayToString; +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.MHUtils; +import vm.mlvm.share.Env; + +public class MHPermuteTF extends MHBasicUnaryTF { + + private final int[] _reorderArray; + private final MethodType _sourceMT; + + public MHPermuteTF(MHCall target, MethodType sourceMT, int[] reorderArray) { + super(target); + _reorderArray = reorderArray; + _sourceMT = sourceMT; + } + + public MHPermuteTF(MHCall target, int[] reorderArray) { + this(target, getPermutedMT(target.getTargetMH().type(), reorderArray), reorderArray); + } + + @Override + protected void check(Argument[] targetArgs) throws IllegalArgumentException { + super.check(targetArgs); + + if ( _sourceMT.parameterCount() < _reorderArray.length ) { + throw new WrongMethodTypeException("reorderArray requires at least " + + _reorderArray.length + " target arguments, but only " + + _sourceMT.parameterCount() + " are given"); + } + + for ( int i = 0; i < _reorderArray.length; i++ ) { + MHUtils.assertAssignableType("reorderArray element " + i, + targetArgs[i].getType(), + _sourceMT.parameterType(_reorderArray[i])); + } + } + + @Override + protected MethodHandle computeInboundMH(MethodHandle targetMH) { + MethodHandle r = MethodHandles.permuteArguments(targetMH, _sourceMT, _reorderArray); + Env.traceDebug("permute: inType=%s; targetType=%s; reorder=%s", + r.type(), targetMH.type(), new LazyIntArrayToString(_reorderArray)); + return r; + } + + @Override + protected Argument[] computeInboundArgs(Argument[] targetArgs) { + Argument[] resultArgs = new Argument[_sourceMT.parameterCount()]; + + for ( int i = 0; i < targetArgs.length; i++ ) { + resultArgs[_reorderArray[i]] = targetArgs[i]; + } + + for ( int i = 0; i < resultArgs.length; i++ ) { + if ( resultArgs[i] == null ) { + resultArgs[i] = new Argument(_sourceMT.parameterType(i), null); + } + } + + return resultArgs; + } + + @Override + protected String getName() { + return "permuteArguments"; + } + + @Override + protected String getDescription() { + return "sourceMT=" + _sourceMT + "; reorder=" + Arrays.toString(_reorderArray); + } + + public static MethodType getPermutedMT(MethodType targetMT, int[] reorderArray) { + int srcParamCount = 0; + for ( int t = 0; t < reorderArray.length; t++ ) + srcParamCount = Math.max(srcParamCount, reorderArray[t] + 1); + + Class[] paramTypes = new Class[srcParamCount]; + + for ( int t = 0; t < reorderArray.length; t++ ) + paramTypes[reorderArray[t]] = targetMT.parameterType(t); + + for ( int s = 0; s < paramTypes.length; s++ ) + if ( paramTypes[s] == null ) + throw new IllegalArgumentException("Type of parameter #" + s + " is not defined"); + + return MethodType.methodType(targetMT.returnType(), paramTypes); + } + + public static int[] getIdentityPermuteArray(int argCount) { + int[] result = new int[argCount]; + for ( int i = 0; i < argCount; i++ ) + result[i] = i; + return result; + } + + public static int[] moveArgsInPermuteArray(int[] array, int oldPos, int count, int newPos) { + if ( newPos == oldPos ) + return array; + + int[] result = new int[array.length]; + + if ( newPos < oldPos ) { + System.arraycopy(array, 0, result, 0, newPos); + System.arraycopy(array, newPos, result, newPos + count, oldPos - newPos); + System.arraycopy(array, oldPos + count, result, oldPos + count, array.length - oldPos - count); + } else { + System.arraycopy(array, 0, result, 0, oldPos); + System.arraycopy(array, oldPos + count, result, oldPos, newPos - oldPos - count); + System.arraycopy(array, newPos + count, result, newPos + count, array.length - newPos - count); + } + System.arraycopy(array, oldPos, result, newPos, count); + + return result; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHPrimitiveTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHPrimitiveTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHPrimitiveTF.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; + +import vm.mlvm.meth.share.Argument; + +public abstract class MHPrimitiveTF extends MHTF { + + @Override + public MHCall computeInboundCall() throws IllegalArgumentException, NoSuchMethodException, IllegalAccessException { + check(); + MHCall result = new MHCall( + computeRetVal(), + this, + computeInboundMH(), + computeInboundArgs()); + result.check(); + return result; + } + + protected abstract void check() throws IllegalArgumentException; + protected abstract Argument computeRetVal(); + protected abstract Argument[] computeInboundArgs(); + protected abstract MethodHandle computeInboundMH() throws NoSuchMethodException, IllegalAccessException; + + @Override + public MHTF[] getSubTFs() { + return new MHTF[0]; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHSamTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHSamTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHSamTF.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +public class MHSamTF extends MHBasicUnaryTF { + + public static interface SAM { + public Object run(Object[] o) throws Throwable; + } + + public static class SAMCaller { + private final SAM sam; + + public SAMCaller(SAM sam) { + this.sam = sam; + } + + public Object callSAM(Object[] o) throws Throwable { + return sam.run(o); + } + } + + public MHSamTF(MHCall target) { + super(target); + } + + @Override + protected MethodHandle computeInboundMH(MethodHandle targetMH) throws NoSuchMethodException, IllegalAccessException { + throw new RuntimeException("Internal error: Functionality is disabled in JDK7"); + /* + MethodHandle mh = targetMH.asSpreader(Object[].class, targetMH.type().parameterCount()); + + SAM sam = MethodHandles.asInstance(mh, SAM.class); + + // The checks below aimed to increase coverage + MethodHandle mhCopy = MethodHandles.wrapperInstanceTarget(sam); + if ( ! mh.equals(mhCopy) ) { + throw new IllegalArgumentException("wrapperInstanceTarget returned a different MH: [" + mhCopy + "]; original was [" + mh + "]"); + } + + Class samClass = MethodHandles.wrapperInstanceType(sam); + if ( ! SAM.class.equals(samClass) ) { + throw new IllegalArgumentException("wrapperInstanceType returned a different class: [" + samClass + "]; original was [" + SAM.class + "]"); + } + + if ( ! MethodHandles.isWrapperInstance(sam) ) { + throw new IllegalArgumentException("isWrapperInstance returned false for SAM object: [" + sam + "]"); + } + + return MethodHandles.convertArguments( + MethodHandles.lookup().findVirtual(SAMCaller.class, "callSAM", MethodType.methodType(Object.class, Object[].class)) + .bindTo(new SAMCaller(sam)) + .asCollector(Object[].class, targetMH.type().parameterCount()), + targetMH.type()); + + */ + } + + @Override + protected String getName() { + return "SAM"; + } + + @Override + protected String getDescription() { + return ""; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHTF.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +public abstract class MHTF { + + public abstract MHCall[] getOutboundCalls(); + public abstract MHCall computeInboundCall() throws NoSuchMethodException, IllegalArgumentException, IllegalAccessException; + + public abstract MHTF[] getSubTFs(); + + @Override + public final String toString() { + return "MH " + getName() + " TF: " + getDescription(); + } + + protected abstract String getName(); + protected abstract String getDescription(); +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHTFPair.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHTFPair.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHTFPair.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +/** + * Pairwise transformation container + */ +public abstract class MHTFPair { + + protected final MHCall outboundTarget; + + protected MHTFPair(MHCall outboundTarget) { + this.outboundTarget = outboundTarget; + } + + public abstract MHTF getOutboundTF(); + public abstract MHTF getInboundTF(MHCall inboundTarget); +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHThrowCatchTFPair.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHThrowCatchTFPair.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHThrowCatchTFPair.java @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.Arguments; +import vm.mlvm.meth.share.SimpleOpMethodHandles; +import vm.mlvm.share.Env; + +public class MHThrowCatchTFPair extends MHTFPair { + + private final String id; + private final Argument testArg; + private final Object testValue2; + private final boolean testEq; + private final Throwable _exception; + + private class ThrowTF extends MHDropTF { + + public ThrowTF(MHCall outboundCall) { + super(outboundCall, 0, new Argument[] { testArg }); + } + + @Override + protected MethodHandle computeInboundMH(MethodHandle targetMH) { + try { + Argument testArg = MHThrowCatchTFPair.this.testArg; + + MethodType targetType = targetMH.type().insertParameterTypes(0, testArg.getType()); + + MHMacroTF mTF = new MHMacroTF("throwCatch throw part"); + mTF.addOutboundCall(getTargetCall()); +/* + MHCall testCall = + mTF.addTransformation(new MHInsertTF( + mTF.addTransformation(new MHExplicitCastTF( + mTF.addTransformation(new MHEqualityTestTF(testArg)), + boolean.class, new Class[] { testArg.getType(), testArg.getType() })), + 0, new Argument[] { testArg }, false)); +*/ + MethodHandle testMH = MethodHandles.insertArguments( + MethodHandles.explicitCastArguments( + SimpleOpMethodHandles.eqMH(), + MethodType.methodType(boolean.class, testArg.getType(), testArg.getType())), + 0, testArg.getValue()); + + MethodHandle normalBranchMH = MethodHandles.dropArguments(targetMH, 0, testArg.getType()); + + MethodHandle throwingBranchMH = + MethodHandles.dropArguments( + MethodHandles.insertArguments( + MethodHandles.throwException(targetType.returnType(), _exception.getClass()), + 0, _exception), + 0, targetType.parameterArray()); + + MethodHandle thenMH, elseMH; + if ( MHThrowCatchTFPair.this.testEq ) { + thenMH = throwingBranchMH; + elseMH = normalBranchMH; + } else { + testMH = MethodHandles.filterReturnValue(testMH, SimpleOpMethodHandles.notMH()); + elseMH = throwingBranchMH; + thenMH = normalBranchMH; + } + + Env.traceDebug("ThrowCatchTFPair: targetMH=%s; testMH=%s; thenMH=%s; elseMH=%s", + targetMH.type(), testMH.type(), thenMH.type(), elseMH.type()); + + return MethodHandles.guardWithTest(testMH, thenMH, elseMH); + } catch ( Throwable t ) { + throw (IllegalArgumentException) (new IllegalArgumentException("Can't create throw/catch TF")).initCause(t); + } + } + } + + private class CatchTF extends MHInsertTF { + + public CatchTF(MHCall target, int argIdx) { + super(target, argIdx, new Argument[] { testArg }, true); + } + + @Override + protected MethodHandle computeInboundMH(MethodHandle targetMH) { + try { + MethodHandle catchTargetMH = MethodHandles.insertArguments(targetMH, this.pos, MHThrowCatchTFPair.this.testArg.getValue()); + MethodHandle catchHandlerMH = MethodHandles.dropArguments( + MethodHandles.insertArguments(targetMH, this.pos, MHThrowCatchTFPair.this.testValue2), + 0, _exception.getClass()); + + return MethodHandles.catchException(catchTargetMH, _exception.getClass(), catchHandlerMH); + } catch ( Throwable t ) { + IllegalArgumentException e = new IllegalArgumentException("Can't create a transformation"); + e.initCause(t); + throw e; + } + } + } + public MHThrowCatchTFPair(MHCall outboundTarget, Argument testArg, Object testValue2, boolean testEq, Throwable exc) { + super(outboundTarget); + this.id = "ThrowCatch_" + hashCode(); + + this.testArg = testArg.clone(); + this.testArg.setPreserved(true); + this.testArg.setTag(this.id); + + this.testValue2 = testValue2; + this.testEq = testEq; + _exception = exc; + } + + @Override + public MHTF getOutboundTF() { + return new ThrowTF(this.outboundTarget); + } + + @Override + public MHTF getInboundTF(MHCall inboundTarget) { + int[] tagged = Arguments.findTag(inboundTarget.getArgs(), this.id); + + if ( tagged.length != 1 ) { + throw new IllegalArgumentException("Can't find exactly one argument tagged " + this.id + + " from inner transformation (found indexes: " + tagged + ")"); + } + + return new CatchTF(inboundTarget, tagged[0]); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHUnaryTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHUnaryTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHUnaryTF.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +public abstract class MHUnaryTF extends MHPrimitiveTF { + + protected MHCall target; + + protected MHUnaryTF(final MHCall target) { + this.target = target; + } + + @Override + public MHCall[] getOutboundCalls() { + return new MHCall[] { this.target }; + } + + public MHCall getTargetCall() { + return this.target; + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHVarargsCollectSpreadTF.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHVarargsCollectSpreadTF.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHVarargsCollectSpreadTF.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.meth.share.transform.v2; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodType; + +import nsk.share.test.TestUtils; + +public class MHVarargsCollectSpreadTF extends MHCollectSpreadBaseTF { + + public MHVarargsCollectSpreadTF(MHCall target) { + super(target); + } + + @Override + protected MethodHandle computeCollectorMH(MethodHandle spreaderMH, MethodType targetType) { + MethodHandle ret = spreaderMH.asVarargsCollector(Object[].class).asType(targetType); + // Increase coverage + TestUtils.assertTrue(ret.isVarargsCollector(), "isVarargsCollection() should return true" ); + return ret; + } + + @Override + protected MethodHandle computeSpreaderMH(MethodHandle targetMH) { + return targetMH.asSpreader(Object[].class, targetMH.type().parameterCount()); + } + + @Override + protected String getName() { + return "VarargsCollectSpread"; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/Test.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/meth/stress/compiler/deoptimize. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine] + * VM Testbase comments: 8079642 8079714 + * VM Testbase readme: + * DESCRIPTION + * The test creates and calls MH sequences (see vm/mlvm/mh/func/sequences test) causing compilation + * (by calling sequence 10000 times) and deoptimization (by using uncommon traps). + * See vm.mlvm.meth.stress.java.sequences.Test for details on MH sequences. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.stress.compiler.deoptimize.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * -XX:ReservedCodeCacheSize=100m + * vm.mlvm.meth.stress.compiler.deoptimize.Test + * -threadsPerCpu 4 + * -threadsExtra 2 + */ + +package vm.mlvm.meth.stress.compiler.deoptimize; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.MHTransformationGen; +import vm.mlvm.meth.share.RandomArgumentsGen; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; +import vm.mlvm.share.MultiThreadedTest; + +// TODO: check deopt using vm.mlvm.share.comp framework +public class Test extends MultiThreadedTest { + + static class A { + Object m() { + return new Integer(0); + } + } + + static class B extends A { + @Override + Object m() { + return new Integer(1); + } + } + + static class TestData { + final A _a; + final int _expectedResult; + + TestData(A a) { + _a = a; + _expectedResult = (Integer) a.m(); + } + + Object m() { + return _a.m(); + } + } + + volatile TestData _data = new TestData(new A()); + + volatile boolean _testDone = false; + + final MethodHandle _mh; + final Argument[] _finalArgs; + + public Test() throws Throwable { + _mh = MethodHandles.lookup().findVirtual(TestData.class, "m", MethodType.methodType(Object.class)); + _finalArgs = RandomArgumentsGen.createRandomArgs(true, _mh.type()); + } + + @Override + protected void initializeTest() throws Throwable { + super.initializeTest(); + if (calcThreadNum() < 2) { + throw new IllegalArgumentException("Number of threads should be 2 or more"); + } + } + + private void sleepAndDeoptimize() throws Throwable { + try { + Thread.sleep(3000); + // Force deoptimization in uncommon trap logic + Env.traceNormal("Deoptimizing"); + _data = new TestData((A) Test.class.getClassLoader().loadClass(Test.class.getName() + "$B").newInstance()); + Thread.sleep(3000); + } finally { + this._testDone = true; + } + } + + @Override + protected boolean runThread(int threadNum) throws Throwable { + if ( threadNum == 0 ) { + sleepAndDeoptimize(); + return true; + } + + while ( ! Test.this._testDone) { + TestData dataSnapshot = _data; + Integer expectedResult = (Integer) dataSnapshot._a.m(); + Argument retVal = new Argument(Object.class, expectedResult); + retVal.setPreserved(true); + + MHTransformationGen.createAndCallSequence(retVal, dataSnapshot, _mh, _finalArgs, true); + } + + return true; + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/Test.java @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/meth/stress/compiler/i2c_c2i. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine] + * VM Testbase comments: 8079714 + * VM Testbase readme: + * DESCRIPTION + * The test attempts to check MethodHandle i2c and c2i adapters by using sequences. + * Then it forces compilation of some of intermediate method handles. The test enables + * diagnostic printing of compilation and analyse it's own standard output + * to see if method is really has been compiled. When some subsequence is compiled, + * the test calls the whole sequence and forces decompilation (by using uncommon trap logic) + * of some smaller subsequence. This way both i2c and c2i adapters are created. + * The test compares result of calling the sequence of MHs with the results computed + * by the test and fails if the result is different. + * The test is a random one, it makes random sequences of MH and calls random subsequences. + * To facilitate reproducing test failures, it prints it's random seed, which can be fed + * to test when reproducing a problem. + * See vm.mlvm.meth.stress.java.sequences.Test for details on MH sequences. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.stress.compiler.i2c_c2i.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.meth.stress.compiler.i2c_c2i.Test + */ + +package vm.mlvm.meth.stress.compiler.i2c_c2i; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.util.concurrent.CyclicBarrier; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.MHTransformationGen; +import vm.mlvm.meth.share.RandomArgumentsGen; +import vm.mlvm.meth.share.transform.v2.MHMacroTF; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; + +// TODO: check that i2c/c2i adapters are really created +// TODO: check deopt using vm.mlvm.share.comp framework +// TODO: use multi-threaded test framework +public class Test extends MlvmTest { + + private static final int THREADS + = Runtime.getRuntime().availableProcessors(); + + Object finalTarget() { + return new Integer(0); + } + + static class A { + MHMacroTF trList; + + A(MHMacroTF trList) { + this.trList = trList; + } + + Object m() throws Throwable { + Env.traceNormal("Original m() in thread " + + Thread.currentThread().getName()); + return MHTransformationGen.callSequence(this.trList, false); + } + } + + static class B extends A { + B() { + super(null); + } + + @Override + Object m() throws Throwable { + Env.traceNormal("Deoptimized m() in thread " + + Thread.currentThread().getName()); + return new Integer(1); + } + } + + volatile A intermediateTarget; + + Object callIntemediateTarget() throws Throwable { + return this.intermediateTarget.m(); + } + + CyclicBarrier startBarrier = new CyclicBarrier(THREADS + 1); + + volatile boolean testDone = false; + + @Override + public boolean run() throws Throwable { + + final MethodHandle mhB = MethodHandles.lookup().findVirtual(Test.class, + "finalTarget", MethodType.methodType(Object.class)); + + final Argument finalRetVal = Argument.fromValue(new Integer(0)); + finalRetVal.setPreserved(true); + + this.intermediateTarget = new A( + MHTransformationGen.createSequence(finalRetVal, Test.this, mhB, + RandomArgumentsGen.createRandomArgs(true, mhB.type()))); + + final MethodHandle mhM = MethodHandles.lookup().findVirtual(Test.class, + "callIntemediateTarget", MethodType.methodType(Object.class)); + + final Argument[] finalArgs = RandomArgumentsGen.createRandomArgs(true, + mhM.type()); + + Thread[] threads = new Thread[THREADS]; + for (int t = 0; t < THREADS; t++) { + (threads[t] = new Thread("Stresser " + t) { + + public void run() { + try { + MHMacroTF tList = MHTransformationGen.createSequence( + finalRetVal, Test.this, mhM, finalArgs); + Test.this.startBarrier.await(); + while ( ! Test.this.testDone) { + int e = (Integer) Test.this.intermediateTarget.m(); + int r = (Integer) MHTransformationGen.callSequence( + tList, false); + if (r != e) + Env.traceNormal("Wrong result in thread " + + getName() + ", but this is OK"); + } + Env.traceVerbose("Thread " + getName()+ ": work done"); + } catch (Throwable t) { + markTestFailed("Exception in thread " + getName(), t); + } + } + }).start(); + } + + this.startBarrier.await(); + Env.traceImportant("Threads started"); + + Thread.sleep(3000); + + Env.traceImportant("Deoptimizing"); + // Force deoptimization in uncommon trap logic + this.intermediateTarget = (A) Test.class.getClassLoader().loadClass( + Test.class.getName() + "$B").newInstance(); + + Thread.sleep(3000); + + this.testDone = true; + for (int t = 0; t < THREADS; t++) { + threads[t].join(); + } + return true; + } + + public static void main(String[] args) { + MlvmTest.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/inlineMHTarget/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/inlineMHTarget/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/inlineMHTarget/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/inlineMHTarget/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/inlineMHTarget/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/inlineMHTarget/Test.java @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/meth/stress/compiler/inlineMHTarget. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * The test creates MH to short methods that are likely to be inlined and + * verifies that they are inlined into MH code correctly. + * See vm.mlvm.meth.stress.java.sequences.Test for details on MH sequences. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.stress.compiler.inlineMHTarget.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.meth.stress.compiler.inlineMHTarget.Test -stressIterationsFactor 100 + */ + +package vm.mlvm.meth.stress.compiler.inlineMHTarget; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodHandles.Lookup; +import java.lang.invoke.MethodType; + +import nsk.share.test.Stresser; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; + +// TODO: check compilation using vm.mlvm.share.comp framework +// TODO: enhance to check NxN primitive types +public class Test extends MlvmTest { + + private static final int ITERATIONS = 10000; // Should be enough to trigger compilation + + private static final int THE_CONSTANT = 42; + private int field = 96; + + static int i(int i) { return i; } + static int k(int i) { return THE_CONSTANT; } + int getter() { return this.field; } + + int iplusk(int i) { return i(i) + k(i) + getter(); } + + static int mh_iplusk(MethodHandle a, MethodHandle b, MethodHandle c, int i) throws Throwable { + return (int) a.invokeExact(i) + (int) b.invokeExact(i) + (int) c.invokeExact(); + } + + @Override + public boolean run() throws Throwable { + Lookup l = MethodHandles.lookup(); + MethodHandle ipluskMH = l.findVirtual( + Test.class, "iplusk", MethodType.methodType(int.class, int.class) + ).bindTo(this); + + MethodHandle iMH = MethodHandles.identity(int.class); + MethodHandle kMH = MethodHandles.dropArguments(MethodHandles.constant(int.class, THE_CONSTANT), 0, int.class); + MethodHandle getterMH = l.findGetter(Test.class, "field", int.class).bindTo(this); + MethodHandle mh_ipluskMH = MethodHandles.insertArguments( + l.findStatic(Test.class, "mh_iplusk", MethodType.methodType(int.class, MethodHandle.class, MethodHandle.class, MethodHandle.class, int.class)), + 0, iMH, kMH, getterMH); + + int mh1Result = 0, mh2Result = 0, directResult = 0; + Stresser s = createStresser(); + s.start(1); + try { + while ( s.continueExecution() ) { + for (int i = 0; i < ITERATIONS; i++) { + s.iteration(); + mh1Result += (int) ipluskMH.invokeExact(i); + mh2Result += (int) mh_ipluskMH.invokeExact(i); + directResult += iplusk(i); + } + } + } finally { + s.finish(); + } + + if (mh1Result != directResult || mh2Result != directResult) { + Env.complain("Sum computed using MH 1=" + mh1Result + + "; Sum computed using MH 2=" + mh2Result + + "; using direct calls=" + directResult); + return false; + } + + return true; + } + + public static void main(String[] args) { + MlvmTest.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/sequences/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/sequences/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/sequences/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/sequences/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/sequences/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/sequences/Test.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/meth/stress/compiler/sequences. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine] + * VM Testbase comments: 8079714 + * VM Testbase readme: + * DESCRIPTION + * Create various long sequences of method handles, adding/removing/joining/splitting arguments. + * Don't verify correctness of results. Just try to stress compiler. + * See vm.mlvm.meth.stress.java.sequences.Test for details on MH sequences. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.stress.compiler.sequences.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * vm.mlvm.meth.stress.compiler.sequences.Test + * -threadsPerCpu 1 + * -threadsExtra 2 + * -stressIterationsFactor 1000 + */ + +package vm.mlvm.meth.stress.compiler.sequences; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import nsk.share.test.Stresser; +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.MHTransformationGen; +import vm.mlvm.meth.share.RandomArgumentsGen; +import vm.mlvm.share.MlvmTest; +import vm.mlvm.share.MultiThreadedTest; + +//TODO: check deoptimization using vm.mlvm.share.comp framework +public class Test extends MultiThreadedTest { + + Object target(int i, String s, Float f) { + return i + s + f; + } + + final MethodHandle _mh; + final Argument[] _finalArgs; + final Argument _retVal; + + public Test() throws Throwable { + super(); + + _mh = MethodHandles.lookup().findVirtual( + Test.class, + "target", + MethodType.methodType(Object.class, int.class, String.class, Float.class)); + + _finalArgs = RandomArgumentsGen.createRandomArgs(true, _mh.type()); + _retVal = Argument.fromValue(target( + (Integer) _finalArgs[0].getValue(), + (String) _finalArgs[1].getValue(), + (Float) _finalArgs[2].getValue())); + _retVal.setPreserved(true); + } + + @Override + public boolean runThread(int threadNum) throws Throwable { + + Stresser stresser = createStresser(); + stresser.start(1); + try { + while ( stresser.continueExecution() ) { + stresser.iteration(); + MHTransformationGen.callSequence(MHTransformationGen.createSequence(_retVal, Test.this, _mh, _finalArgs), true); + } + } finally { + stresser.finish(); + } + + return true; + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/Test.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/meth/stress/gc/callSequencesDuringGC. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine] + * VM Testbase comments: 8079714 + * VM Testbase readme: + * DESCRIPTION + * The test verifies that MH logic is not affected by garbage collector and garbage collector + * correctly walks through references in MHs. + * The test has 3 threads: + * - Thread 1 creates sequences of MH (see vm/mlvm/mh/func/sequences test) and calls them + * - Thread 2 tries to overflow heap with different objects and arrays + * - Thread 3 periodically calls GC + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.stress.gc.callSequencesDuringGC.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.meth.stress.gc.callSequencesDuringGC.Test -stressIterationsFactor 1000 + */ + +package vm.mlvm.meth.stress.gc.callSequencesDuringGC; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.util.List; + +import nsk.share.gc.gp.GarbageProducer; +import nsk.share.gc.gp.GarbageProducers; +import nsk.share.test.Stresser; +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.MHTransformationGen; +import vm.mlvm.meth.share.RandomArgumentsGen; +import vm.mlvm.share.MlvmTest; + +public class Test extends MlvmTest { + + public static void main(String[] args) { + MlvmTest.launch(args); + } + + @Override + public boolean run() throws Throwable { + + GCThread dustmanThread = new GCThread(); + dustmanThread.setDaemon(true); + dustmanThread.start(); + + LitterThread litterThread = new LitterThread(); + litterThread.setDaemon(true); + litterThread.start(); + + Stresser stresser = createStresser(); + try { + stresser.start(1); + + while (stresser.continueExecution()) { + stresser.iteration(); + + String s = "Ziggy"; + + final MethodHandle mhM0 = MethodHandles.lookup().findVirtual( + String.class, "toString", + MethodType.methodType(String.class)); + + Argument[] finalArgs = RandomArgumentsGen.createRandomArgs(true, mhM0.type()); + Argument retVal = Argument.fromValue(s); + retVal.setPreserved(true); + MHTransformationGen.callSequence(MHTransformationGen.createSequence(retVal, s, mhM0, finalArgs), true); + } + + return true; + } finally { + stresser.finish(); + } + } + + private static class LitterThread extends Thread { + @Override + public void run() { + try { + @SuppressWarnings("rawtypes") + List gpList = new GarbageProducers() + .getAllProducers(); + + for (;;) { + @SuppressWarnings("rawtypes") + GarbageProducer gp = gpList.get(getRNG().nextInt( + gpList.size())); + gp.create(Runtime.getRuntime().maxMemory() / 100); + + Thread.sleep(10); + } + } catch (InterruptedException e) { + } + } + } + + private static class GCThread extends Thread { + @Override + public void run() { + try { + for (;;) { + System.gc(); + Thread.sleep(50); + } + } catch (InterruptedException e) { + } + } + + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMH/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMH/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMH/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMH/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMH/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMH/Test.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/meth/stress/gc/createLotsOfMH. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * The test creates lots of MH to see if they are garbage collected and don't overflow different + * generations of heap (MH used to be allocated in PermGen, but since then they are moved + * to Eden and OldGen). + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.stress.gc.createLotsOfMH.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.meth.stress.gc.createLotsOfMH.Test -stressIterationsFactor 100000 + */ + +package vm.mlvm.meth.stress.gc.createLotsOfMH; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodHandles.Lookup; +import java.lang.invoke.MethodType; + +import nsk.share.test.Stresser; +import vm.mlvm.share.MlvmTest; + +// TODO: add other Lookup.findXXX methods + +public class Test extends MlvmTest { + + public static void main(String[] args) { + MlvmTest.launch(args); + } + + @Override + public boolean run() throws Throwable { + Stresser stresser = createStresser(); + try { + stresser.start(1); + Lookup lookup = MethodHandles.lookup(); + MethodHandle lastMH = lookup.findStatic(getClass(), "main", + MethodType.methodType(void.class, String[].class)); + + getLog().display( + "Verifying that no OOME is thrown when creating MHs in a loop"); + getLog().display( + "Free memory on start (MB): " + + Runtime.getRuntime().freeMemory() / 1024 / 1024); + + while (stresser.continueExecution()) { + stresser.iteration(); + switch (getRNG().nextInt(3)) { + case 0: + lastMH = lookup.findConstructor(String.class, + MethodType.methodType(void.class, String.class)); + break; + case 1: + lastMH = lookup.findVirtual(getClass(), "run", + MethodType.methodType(boolean.class)); + break; + case 2: + lastMH = lookup.findStatic(ClassLoader.class, + "getSystemClassLoader", + MethodType.methodType(ClassLoader.class)); + break; + } + } + + getLog().display( + "Free memory on end (MB): " + + Runtime.getRuntime().freeMemory() / 1024 / 1024); + getLog().display("MHs created: " + stresser.getIteration()); + + return true; + } finally { + stresser.finish(); + } + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMHConsts/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMHConsts/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMHConsts/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMHConsts/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMHConsts/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMHConsts/Test.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @modules java.base/jdk.internal.org.objectweb.asm + * + * @summary converted from VM Testbase vm/mlvm/meth/stress/gc/createLotsOfMHConsts. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * The test loads lots of MH constants (by loading a class that has many of them many times + * using different classloaders) to see if they are garbage collected and don't overflow + * different generations of heap. + * + * @library /vmTestbase + * /test/lib + * /vmTestbase/vm/mlvm/patches + * + * @comment patch for java.base + * @build java.base/* + * + * @comment build generator + * @build vm.mlvm.cp.share.GenCPFullOfMH + * + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.stress.gc.createLotsOfMHConsts.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm + * vm.mlvm.meth.stress.gc.createLotsOfMHConsts.Test + * -stressIterationsFactor 100000 + * -generator vm.mlvm.cp.share.GenCPFullOfMH + */ + +package vm.mlvm.meth.stress.gc.createLotsOfMHConsts; + +import nsk.share.test.Stresser; +import vm.mlvm.share.ClassfileGeneratorTest; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; + +public class Test extends ClassfileGeneratorTest { + + public static void main(String[] args) { + MlvmTest.launch(args); + } + + @Override + public boolean run() throws Throwable { + Stresser stresser = createStresser(); + try { + stresser.start(1); + while (stresser.continueExecution()) { + stresser.iteration(); + super.run(); + } + + return true; + + } catch ( OutOfMemoryError e ) { + Env.traceNormal(e, "Caught an OOME. This is OK."); + return true; + } finally { + stresser.finish(); + } + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/java/sequences/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/java/sequences/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/java/sequences/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/java/sequences/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/java/sequences/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/java/sequences/Test.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/meth/stress/java/sequences. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine] + * VM Testbase comments: 8079714 + * VM Testbase readme: + * DESCRIPTION + * Creates a sequence of method handles that manipulates arguments. The following manipulations are used: + * - Numeric conversions + * - Boxing and unboxing + * - Adding arguments, binding arguments + * - Deleting arguments + * - Reordering arguments + * - Array scattering and gathering + * - A MH that calls pair of methods ("guardWithTest") + * - The test calculates the "correct result" of calling the sequence of method handles by using it's own logic and compares it with the result of calling MHs. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.stress.java.sequences.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.meth.stress.java.sequences.Test + */ + +package vm.mlvm.meth.stress.java.sequences; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.MHTransformationGen; +import vm.mlvm.meth.share.RandomArgumentsGen; +import vm.mlvm.share.MlvmTest; + +public class Test extends MlvmTest { + + public static void main(String[] args) { + MlvmTest.launch(args); + } + + public static class Example { + private Argument[] finalArgs; + private boolean eqI; + private boolean eqS; + private boolean eqF; + + public String m0(int i, String s, Float f) { + this.eqI = this.finalArgs[0].getValue().equals(i); + this.eqS = this.finalArgs[1].getValue().equals(s); + this.eqF = this.finalArgs[2].getValue().equals(f); + + return "i=" + i + " (" + this.eqI + "); " + "s=" + s + " (" + this.eqS + + "); " + "f=" + f + " (" + this.eqF + "); "; + } + + public void setFinalArgs(Argument[] finalArgs) { + this.finalArgs = finalArgs; + } + + public boolean areParametersEqual() { + return this.eqI && this.eqS && this.eqF; + } + } + + @Override + public boolean run() throws Throwable { + + final Example e = new Example(); + + final MethodHandle mhM0 = MethodHandles.lookup().findVirtual( + Example.class, + "m0", + MethodType.methodType(String.class, int.class, String.class, Float.class)); + + Argument[] finalArgs = RandomArgumentsGen.createRandomArgs(true, mhM0.type()); + e.setFinalArgs(finalArgs); + + Argument finalRetVal = Argument.fromValue(e.m0((int) (Integer) finalArgs[0].getValue(), (String) finalArgs[1].getValue(), (Float) finalArgs[2].getValue())); + + MHTransformationGen.callSequence(MHTransformationGen.createSequence(finalRetVal, e, mhM0, finalArgs), false); + + if (!e.areParametersEqual()) { + getLog().complain("Unexpected argument values were received at the final method"); + return false; + } + + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/Test.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/meth/stress/jdi/breakpointInCompiledCode. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, jdk, quarantine] + * VM Testbase comments: 8079714 + * VM Testbase readme: + * DESCRIPTION + * Execute a MethodHandle 10000 times to trigger Hotspot compilation. Set a debugger breakpoint on MH. + * Make few debugger steps, obtaining various information from JVM. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build debuggee class + * @build vm.mlvm.share.jdi.MHDebuggee + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.stress.jdi.breakpointInCompiledCode.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm PropertyResolvingWrapper + * vm.mlvm.meth.stress.jdi.breakpointInCompiledCode.Test + * -verbose + * -arch=${os.family}-${os.simpleArch} + * -waittime=5 + * -debugee.vmkind=java + * -transport.address=dynamic + * -debugger.debuggeeClass vm.mlvm.share.jdi.MHDebuggee + * -debuggee.iterations 2000 + * -debugee.vmkeys="${test.vm.opts} ${test.java.opts}" + */ + +package vm.mlvm.meth.stress.jdi.breakpointInCompiledCode; + +import vm.mlvm.share.jdi.ArgumentHandler; +import vm.mlvm.share.jdi.BreakpointInfo; +import vm.mlvm.share.jdi.JDIBreakpointTest; + +import java.util.ArrayList; +import java.util.List; + +public class Test extends JDIBreakpointTest { + // invokeMH:S100,invokePlain:S100,mhTarget,plainTarget,stop + @Override + protected List getBreakpoints(String debuggeeClassName) { + List result = new ArrayList<>(); + { + BreakpointInfo info = new BreakpointInfo("invokeMH"); + info.stepsToTrace = 100; + result.add(info); + } + { + BreakpointInfo info = new BreakpointInfo("invokePlain"); + info.stepsToTrace = 100; + result.add(info); + } + result.add(new BreakpointInfo("mhTarget")); + result.add(new BreakpointInfo("plainTarget")); + result.add(new BreakpointInfo("stop")); + + return result; + } + + public static void main(String[] args) { + launch(new ArgumentHandler(args)); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/Test.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/meth/stress/jni/nativeAndMH. + * VM Testbase keywords: [feature_mlvm, nonconcurrent] + * VM Testbase readme: + * DESCRIPTION + * The test obtains a MH to a native method and call it. The native method in turn, calls + * another method handle and so on. + * The test verifies that arguments are correctly passed between native methods and MHs. + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.meth.stress.jni.nativeAndMH.Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm/native + * vm.mlvm.meth.stress.jni.nativeAndMH.Test + * -stressIterationsFactor 1000 + * -threadsPerCpu 20 + * -threadsExtra 20 + */ + +package vm.mlvm.meth.stress.jni.nativeAndMH; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import nsk.share.test.Stresser; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; +import vm.mlvm.share.MultiThreadedTest; + +public class Test extends MultiThreadedTest { + + private static final String RETURN_VALUE = "test"; + + static { + System.loadLibrary("nativeAndMH"); + } + + private static native Object native01(Object a1, String a2, Object a3, Object a4, Object a5, Object a6, MethodHandle mh); + + private static final MethodType MT_calledFromNative = MethodType.methodType( + Object.class, + Object.class, Object.class, int.class, long.class, double.class, float.class); + + private static Object calledFromNative(Object s1, Object s2, int i, long l, double d, float f) { + return RETURN_VALUE; + } + + @Override + protected boolean runThread(int threadNum) throws Throwable { + MethodHandle mh = MethodHandles.lookup().findStatic( + Test.class, + "calledFromNative", + MT_calledFromNative); + + Stresser stresser = createStresser(); + stresser.start(1); + + while ( stresser.continueExecution() ) { + stresser.iteration(); + + String retValMH = (String) (Object) mh.invokeExact((Object) "test1", (Object) "test2", 3, 4L, 5D, 6F); + String retValNative = (String) native01("test1", "test2", 3, 4L, 5D, 6F, mh).toString(); + + if ( ! retValMH.equals(RETURN_VALUE) || ! retValNative.equals(RETURN_VALUE) ) + markTestFailed("Gold value: " + RETURN_VALUE + "; MH returned: " + retValMH + "; Native returned: " + retValNative); + else + Env.traceVerbose("Gold value: " + RETURN_VALUE + "; MH returned: " + retValMH + "; Native returned: " + retValNative); + } + + stresser.finish(); + stresser.printExecutionInfo(getLog().getOutStream()); + + return true; + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/libnativeAndMH.c b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/libnativeAndMH.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/libnativeAndMH.c @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include "nsk_tools.c" +#include "jni_tools.c" +#include "nativeAndMH.c" diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/nativeAndMH.c b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/nativeAndMH.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/nativeAndMH.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include +#include "jni.h" +#include "jni_tools.h" + +#define ARGS_COUNT 6 + +JNIEXPORT jobject JNICALL +Java_vm_mlvm_meth_stress_jni_nativeAndMH_Test_native01( + JNIEnv * pEnv, jclass clazz, + jstring a1, + jobject a2, + jobject a3, + jobject a4, + jobject a5, + jobject a6, + jobject mhToCall) +{ + jclass mhClass; + jmethodID mid; + jclass objectClass; + jobjectArray arguments; + jobject result; + + if ( ! NSK_JNI_VERIFY(pEnv, (mhClass = NSK_CPP_STUB2(GetObjectClass, pEnv, mhToCall)) != NULL) ) + return NULL; + + if ( ! NSK_JNI_VERIFY(pEnv, NULL != (mid = NSK_CPP_STUB4(GetMethodID, pEnv, mhClass, + "invokeWithArguments", + "([Ljava/lang/Object;)Ljava/lang/Object;"))) ) + return NULL; + + NSK_JNI_VERIFY(pEnv, NULL != (objectClass = NSK_CPP_STUB2(FindClass, pEnv, "java/lang/Object"))); + + NSK_JNI_VERIFY(pEnv, NULL != (arguments = NSK_CPP_STUB4(NewObjectArray, pEnv, ARGS_COUNT, objectClass, NULL))); + + NSK_JNI_VERIFY_VOID(pEnv, NSK_CPP_STUB4(SetObjectArrayElement, pEnv, arguments, 0, a1)); + NSK_JNI_VERIFY_VOID(pEnv, NSK_CPP_STUB4(SetObjectArrayElement, pEnv, arguments, 1, a2)); + NSK_JNI_VERIFY_VOID(pEnv, NSK_CPP_STUB4(SetObjectArrayElement, pEnv, arguments, 2, a3)); + NSK_JNI_VERIFY_VOID(pEnv, NSK_CPP_STUB4(SetObjectArrayElement, pEnv, arguments, 3, a4)); + NSK_JNI_VERIFY_VOID(pEnv, NSK_CPP_STUB4(SetObjectArrayElement, pEnv, arguments, 4, a5)); + NSK_JNI_VERIFY_VOID(pEnv, NSK_CPP_STUB4(SetObjectArrayElement, pEnv, arguments, 5, a6)); + + // Swap arguments + NSK_JNI_VERIFY(pEnv, NULL != (result = NSK_CPP_STUB4(CallObjectMethod, pEnv, mhToCall, mid, arguments))); + return result; +} + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/INDIFY_Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/INDIFY_Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/INDIFY_Test.java @@ -0,0 +1,18304 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// generated from vm/mlvm/mixed/stress/java/findDeadlock/INDIFY_Test.jmpp + +package vm.mlvm.mixed.stress.java.findDeadlock; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.invoke.MutableCallSite; +import java.lang.management.ManagementFactory; +import java.lang.management.ThreadMXBean; +import java.lang.reflect.Method; +import java.util.concurrent.CyclicBarrier; +import java.util.concurrent.locks.ReentrantLock; + +import nsk.share.test.Stresser; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Test extends MlvmTest { + + public static final int THREAD_NUM = 999; + public static final int ITERATIONS = 1000; + + static ThreadMXBean _threadMXBean = ManagementFactory.getThreadMXBean(); + + static Thread[] _threads = new Thread[THREAD_NUM]; + static ReentrantLock[] _locks = new ReentrantLock[THREAD_NUM]; + static MethodHandle[] _mh = new MethodHandle[THREAD_NUM]; + static MutableCallSite[] _cs = new MutableCallSite[THREAD_NUM]; + + static CyclicBarrier _threadRaceStartBarrier; + static volatile boolean _testFailed; + static volatile boolean _testDone; + static volatile int _iteration; + + private static int nextLock(int n) { return (n + 1) % THREAD_NUM; } + + private static boolean lock(String place, int n, boolean lockInterruptible) throws Throwable { + boolean locked = false; + place = Thread.currentThread().getName() + ": " + place; + if ( ! lockInterruptible ) { + Env.traceVerbose(place + ": Locking " + n); + _locks[n].lock(); + locked = true; + } else { + try { + Env.traceVerbose(place + ": Locking interruptibly " + n); + _locks[n].lockInterruptibly(); + locked = true; + + if ( ! _testDone ) + throw new Exception(place + ": LOCKED " + n); + else + Env.traceVerbose(place + ": LOCKED " + n); + + } catch ( InterruptedException swallow ) { + Env.traceVerbose(place + ": interrupted while locking " + n); + } + } + + return locked; + } + + private static boolean unlock(String place, int n) throws Throwable { + place = Thread.currentThread().getName() + ": " + place; + Env.traceVerbose(place + ": Unlocking " + n); + _locks[n].unlock(); + Env.traceVerbose(place + ": UNLOCKED " + n); + return false; + } + + static Object bsmt(int lockNum, Object l, Object n, Object m) throws Throwable { + DeadlockedThread thread = (DeadlockedThread) Thread.currentThread(); + + if ( l instanceof MethodHandles.Lookup ) { + // Method is used as BSM + Env.traceVerbose(thread.getName() + ": Entered BSM. Lock=" + lockNum); + + if ( _iteration > 0 ) + throw new Exception("BSM called twice!"); + + switch ( lockNum % 3 ) { + case 0: + thread._lockedCurrent = lock("BSM", lockNum, false); + _threadRaceStartBarrier.await(); + thread._lockedNext = lock("BSM", nextLock(lockNum), true); + break; + + case 1: + thread._lockedCurrent = lock("BSM", lockNum, false); + break; + + case 2: + // Do everything in target method + break; + } + + return (_cs[lockNum] = new MutableCallSite(_mh[lockNum])); + + } else { + // Method is used as target + Env.traceVerbose(thread.getName() + ": Entered target method. Lock=" + lockNum); + + try { + if ( _iteration > 0 ) { + + switch ( lockNum % 3 ) { + case 0: + thread._lockedCurrent = lock("Target", lockNum, false); + _threadRaceStartBarrier.await(); + thread._lockedNext = lock("Target", nextLock(lockNum), true); + break; + + case 1: + thread._lockedCurrent = lock("Target", lockNum, false); + _threadRaceStartBarrier.await(); + Env.traceVerbose(thread.getName() + ": Entering synchronize ( " + lockNum + " )"); + synchronized ( _locks[nextLock(lockNum)] ) { + } + Env.traceVerbose(thread.getName() + ": Exited synchronize ( " + lockNum + " )"); + break; + + case 2: + Env.traceVerbose(thread.getName() + ": Entering synchronize ( " + lockNum + " )"); + synchronized ( _locks[lockNum] ) { + _threadRaceStartBarrier.await(); + thread._lockedNext = lock("Target", nextLock(lockNum), true); + thread._lockedNext = unlock("Target", nextLock(lockNum)); + } + Env.traceVerbose(thread.getName() + ": Exited synchronize ( " + lockNum + " )"); + break; + } + + } else { + switch ( lockNum % 3 ) { + case 0: + // Everything is done in BSM + break; + + case 1: + _threadRaceStartBarrier.await(); + thread._lockedNext = lock("Target", nextLock(lockNum), true); + break; + + case 2: + thread._lockedCurrent = lock("Target", lockNum, false); + _threadRaceStartBarrier.await(); + thread._lockedNext = lock("Target", nextLock(lockNum), true); + break; + } + + } + + return null; + } finally { + if ( thread._lockedNext ) + thread._lockedNext = unlock("Target", nextLock(lockNum)); + if ( thread._lockedCurrent ) + thread._lockedCurrent = unlock("Target", lockNum); + } + } + } + + // BSM + Indy pairs + // 0 + private static MethodType MT_bootstrap0 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap0 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap0", MT_bootstrap0 ()); + } + + private static MethodHandle INDY_call0; + private static MethodHandle INDY_call0 () throws Throwable { + if (INDY_call0 != null) return INDY_call0; + CallSite cs = (CallSite) MH_bootstrap0 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap0 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper0 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call0 ().invokeExact(o1, o2, o3); } + + static Object bootstrap0 (Object l, Object n, Object t) throws Throwable { return _mh[ 0 ].invokeExact(l, n, t); } + + // 1 + private static MethodType MT_bootstrap1 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap1 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap1", MT_bootstrap1 ()); + } + + private static MethodHandle INDY_call1; + private static MethodHandle INDY_call1 () throws Throwable { + if (INDY_call1 != null) return INDY_call1; + CallSite cs = (CallSite) MH_bootstrap1 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap1 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper1 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call1 ().invokeExact(o1, o2, o3); } + + static Object bootstrap1 (Object l, Object n, Object t) throws Throwable { return _mh[ 1 ].invokeExact(l, n, t); } + + // 2 + private static MethodType MT_bootstrap2 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap2 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap2", MT_bootstrap2 ()); + } + + private static MethodHandle INDY_call2; + private static MethodHandle INDY_call2 () throws Throwable { + if (INDY_call2 != null) return INDY_call2; + CallSite cs = (CallSite) MH_bootstrap2 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap2 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper2 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call2 ().invokeExact(o1, o2, o3); } + + static Object bootstrap2 (Object l, Object n, Object t) throws Throwable { return _mh[ 2 ].invokeExact(l, n, t); } + + // 3 + private static MethodType MT_bootstrap3 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap3 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap3", MT_bootstrap3 ()); + } + + private static MethodHandle INDY_call3; + private static MethodHandle INDY_call3 () throws Throwable { + if (INDY_call3 != null) return INDY_call3; + CallSite cs = (CallSite) MH_bootstrap3 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap3 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper3 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call3 ().invokeExact(o1, o2, o3); } + + static Object bootstrap3 (Object l, Object n, Object t) throws Throwable { return _mh[ 3 ].invokeExact(l, n, t); } + + // 4 + private static MethodType MT_bootstrap4 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap4 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap4", MT_bootstrap4 ()); + } + + private static MethodHandle INDY_call4; + private static MethodHandle INDY_call4 () throws Throwable { + if (INDY_call4 != null) return INDY_call4; + CallSite cs = (CallSite) MH_bootstrap4 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap4 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper4 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call4 ().invokeExact(o1, o2, o3); } + + static Object bootstrap4 (Object l, Object n, Object t) throws Throwable { return _mh[ 4 ].invokeExact(l, n, t); } + + // 5 + private static MethodType MT_bootstrap5 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap5 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap5", MT_bootstrap5 ()); + } + + private static MethodHandle INDY_call5; + private static MethodHandle INDY_call5 () throws Throwable { + if (INDY_call5 != null) return INDY_call5; + CallSite cs = (CallSite) MH_bootstrap5 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap5 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper5 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call5 ().invokeExact(o1, o2, o3); } + + static Object bootstrap5 (Object l, Object n, Object t) throws Throwable { return _mh[ 5 ].invokeExact(l, n, t); } + + // 6 + private static MethodType MT_bootstrap6 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap6 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap6", MT_bootstrap6 ()); + } + + private static MethodHandle INDY_call6; + private static MethodHandle INDY_call6 () throws Throwable { + if (INDY_call6 != null) return INDY_call6; + CallSite cs = (CallSite) MH_bootstrap6 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap6 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper6 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call6 ().invokeExact(o1, o2, o3); } + + static Object bootstrap6 (Object l, Object n, Object t) throws Throwable { return _mh[ 6 ].invokeExact(l, n, t); } + + // 7 + private static MethodType MT_bootstrap7 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap7 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap7", MT_bootstrap7 ()); + } + + private static MethodHandle INDY_call7; + private static MethodHandle INDY_call7 () throws Throwable { + if (INDY_call7 != null) return INDY_call7; + CallSite cs = (CallSite) MH_bootstrap7 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap7 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper7 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call7 ().invokeExact(o1, o2, o3); } + + static Object bootstrap7 (Object l, Object n, Object t) throws Throwable { return _mh[ 7 ].invokeExact(l, n, t); } + + // 8 + private static MethodType MT_bootstrap8 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap8 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap8", MT_bootstrap8 ()); + } + + private static MethodHandle INDY_call8; + private static MethodHandle INDY_call8 () throws Throwable { + if (INDY_call8 != null) return INDY_call8; + CallSite cs = (CallSite) MH_bootstrap8 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap8 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper8 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call8 ().invokeExact(o1, o2, o3); } + + static Object bootstrap8 (Object l, Object n, Object t) throws Throwable { return _mh[ 8 ].invokeExact(l, n, t); } + + // 9 + private static MethodType MT_bootstrap9 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap9 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap9", MT_bootstrap9 ()); + } + + private static MethodHandle INDY_call9; + private static MethodHandle INDY_call9 () throws Throwable { + if (INDY_call9 != null) return INDY_call9; + CallSite cs = (CallSite) MH_bootstrap9 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap9 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper9 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call9 ().invokeExact(o1, o2, o3); } + + static Object bootstrap9 (Object l, Object n, Object t) throws Throwable { return _mh[ 9 ].invokeExact(l, n, t); } + + // 10 + private static MethodType MT_bootstrap10 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap10 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap10", MT_bootstrap10 ()); + } + + private static MethodHandle INDY_call10; + private static MethodHandle INDY_call10 () throws Throwable { + if (INDY_call10 != null) return INDY_call10; + CallSite cs = (CallSite) MH_bootstrap10 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap10 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper10 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call10 ().invokeExact(o1, o2, o3); } + + static Object bootstrap10 (Object l, Object n, Object t) throws Throwable { return _mh[ 10 ].invokeExact(l, n, t); } + + // 11 + private static MethodType MT_bootstrap11 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap11 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap11", MT_bootstrap11 ()); + } + + private static MethodHandle INDY_call11; + private static MethodHandle INDY_call11 () throws Throwable { + if (INDY_call11 != null) return INDY_call11; + CallSite cs = (CallSite) MH_bootstrap11 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap11 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper11 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call11 ().invokeExact(o1, o2, o3); } + + static Object bootstrap11 (Object l, Object n, Object t) throws Throwable { return _mh[ 11 ].invokeExact(l, n, t); } + + // 12 + private static MethodType MT_bootstrap12 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap12 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap12", MT_bootstrap12 ()); + } + + private static MethodHandle INDY_call12; + private static MethodHandle INDY_call12 () throws Throwable { + if (INDY_call12 != null) return INDY_call12; + CallSite cs = (CallSite) MH_bootstrap12 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap12 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper12 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call12 ().invokeExact(o1, o2, o3); } + + static Object bootstrap12 (Object l, Object n, Object t) throws Throwable { return _mh[ 12 ].invokeExact(l, n, t); } + + // 13 + private static MethodType MT_bootstrap13 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap13 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap13", MT_bootstrap13 ()); + } + + private static MethodHandle INDY_call13; + private static MethodHandle INDY_call13 () throws Throwable { + if (INDY_call13 != null) return INDY_call13; + CallSite cs = (CallSite) MH_bootstrap13 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap13 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper13 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call13 ().invokeExact(o1, o2, o3); } + + static Object bootstrap13 (Object l, Object n, Object t) throws Throwable { return _mh[ 13 ].invokeExact(l, n, t); } + + // 14 + private static MethodType MT_bootstrap14 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap14 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap14", MT_bootstrap14 ()); + } + + private static MethodHandle INDY_call14; + private static MethodHandle INDY_call14 () throws Throwable { + if (INDY_call14 != null) return INDY_call14; + CallSite cs = (CallSite) MH_bootstrap14 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap14 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper14 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call14 ().invokeExact(o1, o2, o3); } + + static Object bootstrap14 (Object l, Object n, Object t) throws Throwable { return _mh[ 14 ].invokeExact(l, n, t); } + + // 15 + private static MethodType MT_bootstrap15 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap15 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap15", MT_bootstrap15 ()); + } + + private static MethodHandle INDY_call15; + private static MethodHandle INDY_call15 () throws Throwable { + if (INDY_call15 != null) return INDY_call15; + CallSite cs = (CallSite) MH_bootstrap15 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap15 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper15 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call15 ().invokeExact(o1, o2, o3); } + + static Object bootstrap15 (Object l, Object n, Object t) throws Throwable { return _mh[ 15 ].invokeExact(l, n, t); } + + // 16 + private static MethodType MT_bootstrap16 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap16 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap16", MT_bootstrap16 ()); + } + + private static MethodHandle INDY_call16; + private static MethodHandle INDY_call16 () throws Throwable { + if (INDY_call16 != null) return INDY_call16; + CallSite cs = (CallSite) MH_bootstrap16 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap16 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper16 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call16 ().invokeExact(o1, o2, o3); } + + static Object bootstrap16 (Object l, Object n, Object t) throws Throwable { return _mh[ 16 ].invokeExact(l, n, t); } + + // 17 + private static MethodType MT_bootstrap17 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap17 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap17", MT_bootstrap17 ()); + } + + private static MethodHandle INDY_call17; + private static MethodHandle INDY_call17 () throws Throwable { + if (INDY_call17 != null) return INDY_call17; + CallSite cs = (CallSite) MH_bootstrap17 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap17 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper17 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call17 ().invokeExact(o1, o2, o3); } + + static Object bootstrap17 (Object l, Object n, Object t) throws Throwable { return _mh[ 17 ].invokeExact(l, n, t); } + + // 18 + private static MethodType MT_bootstrap18 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap18 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap18", MT_bootstrap18 ()); + } + + private static MethodHandle INDY_call18; + private static MethodHandle INDY_call18 () throws Throwable { + if (INDY_call18 != null) return INDY_call18; + CallSite cs = (CallSite) MH_bootstrap18 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap18 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper18 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call18 ().invokeExact(o1, o2, o3); } + + static Object bootstrap18 (Object l, Object n, Object t) throws Throwable { return _mh[ 18 ].invokeExact(l, n, t); } + + // 19 + private static MethodType MT_bootstrap19 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap19 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap19", MT_bootstrap19 ()); + } + + private static MethodHandle INDY_call19; + private static MethodHandle INDY_call19 () throws Throwable { + if (INDY_call19 != null) return INDY_call19; + CallSite cs = (CallSite) MH_bootstrap19 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap19 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper19 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call19 ().invokeExact(o1, o2, o3); } + + static Object bootstrap19 (Object l, Object n, Object t) throws Throwable { return _mh[ 19 ].invokeExact(l, n, t); } + + // 20 + private static MethodType MT_bootstrap20 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap20 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap20", MT_bootstrap20 ()); + } + + private static MethodHandle INDY_call20; + private static MethodHandle INDY_call20 () throws Throwable { + if (INDY_call20 != null) return INDY_call20; + CallSite cs = (CallSite) MH_bootstrap20 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap20 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper20 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call20 ().invokeExact(o1, o2, o3); } + + static Object bootstrap20 (Object l, Object n, Object t) throws Throwable { return _mh[ 20 ].invokeExact(l, n, t); } + + // 21 + private static MethodType MT_bootstrap21 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap21 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap21", MT_bootstrap21 ()); + } + + private static MethodHandle INDY_call21; + private static MethodHandle INDY_call21 () throws Throwable { + if (INDY_call21 != null) return INDY_call21; + CallSite cs = (CallSite) MH_bootstrap21 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap21 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper21 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call21 ().invokeExact(o1, o2, o3); } + + static Object bootstrap21 (Object l, Object n, Object t) throws Throwable { return _mh[ 21 ].invokeExact(l, n, t); } + + // 22 + private static MethodType MT_bootstrap22 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap22 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap22", MT_bootstrap22 ()); + } + + private static MethodHandle INDY_call22; + private static MethodHandle INDY_call22 () throws Throwable { + if (INDY_call22 != null) return INDY_call22; + CallSite cs = (CallSite) MH_bootstrap22 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap22 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper22 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call22 ().invokeExact(o1, o2, o3); } + + static Object bootstrap22 (Object l, Object n, Object t) throws Throwable { return _mh[ 22 ].invokeExact(l, n, t); } + + // 23 + private static MethodType MT_bootstrap23 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap23 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap23", MT_bootstrap23 ()); + } + + private static MethodHandle INDY_call23; + private static MethodHandle INDY_call23 () throws Throwable { + if (INDY_call23 != null) return INDY_call23; + CallSite cs = (CallSite) MH_bootstrap23 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap23 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper23 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call23 ().invokeExact(o1, o2, o3); } + + static Object bootstrap23 (Object l, Object n, Object t) throws Throwable { return _mh[ 23 ].invokeExact(l, n, t); } + + // 24 + private static MethodType MT_bootstrap24 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap24 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap24", MT_bootstrap24 ()); + } + + private static MethodHandle INDY_call24; + private static MethodHandle INDY_call24 () throws Throwable { + if (INDY_call24 != null) return INDY_call24; + CallSite cs = (CallSite) MH_bootstrap24 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap24 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper24 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call24 ().invokeExact(o1, o2, o3); } + + static Object bootstrap24 (Object l, Object n, Object t) throws Throwable { return _mh[ 24 ].invokeExact(l, n, t); } + + // 25 + private static MethodType MT_bootstrap25 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap25 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap25", MT_bootstrap25 ()); + } + + private static MethodHandle INDY_call25; + private static MethodHandle INDY_call25 () throws Throwable { + if (INDY_call25 != null) return INDY_call25; + CallSite cs = (CallSite) MH_bootstrap25 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap25 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper25 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call25 ().invokeExact(o1, o2, o3); } + + static Object bootstrap25 (Object l, Object n, Object t) throws Throwable { return _mh[ 25 ].invokeExact(l, n, t); } + + // 26 + private static MethodType MT_bootstrap26 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap26 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap26", MT_bootstrap26 ()); + } + + private static MethodHandle INDY_call26; + private static MethodHandle INDY_call26 () throws Throwable { + if (INDY_call26 != null) return INDY_call26; + CallSite cs = (CallSite) MH_bootstrap26 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap26 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper26 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call26 ().invokeExact(o1, o2, o3); } + + static Object bootstrap26 (Object l, Object n, Object t) throws Throwable { return _mh[ 26 ].invokeExact(l, n, t); } + + // 27 + private static MethodType MT_bootstrap27 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap27 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap27", MT_bootstrap27 ()); + } + + private static MethodHandle INDY_call27; + private static MethodHandle INDY_call27 () throws Throwable { + if (INDY_call27 != null) return INDY_call27; + CallSite cs = (CallSite) MH_bootstrap27 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap27 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper27 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call27 ().invokeExact(o1, o2, o3); } + + static Object bootstrap27 (Object l, Object n, Object t) throws Throwable { return _mh[ 27 ].invokeExact(l, n, t); } + + // 28 + private static MethodType MT_bootstrap28 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap28 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap28", MT_bootstrap28 ()); + } + + private static MethodHandle INDY_call28; + private static MethodHandle INDY_call28 () throws Throwable { + if (INDY_call28 != null) return INDY_call28; + CallSite cs = (CallSite) MH_bootstrap28 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap28 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper28 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call28 ().invokeExact(o1, o2, o3); } + + static Object bootstrap28 (Object l, Object n, Object t) throws Throwable { return _mh[ 28 ].invokeExact(l, n, t); } + + // 29 + private static MethodType MT_bootstrap29 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap29 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap29", MT_bootstrap29 ()); + } + + private static MethodHandle INDY_call29; + private static MethodHandle INDY_call29 () throws Throwable { + if (INDY_call29 != null) return INDY_call29; + CallSite cs = (CallSite) MH_bootstrap29 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap29 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper29 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call29 ().invokeExact(o1, o2, o3); } + + static Object bootstrap29 (Object l, Object n, Object t) throws Throwable { return _mh[ 29 ].invokeExact(l, n, t); } + + // 30 + private static MethodType MT_bootstrap30 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap30 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap30", MT_bootstrap30 ()); + } + + private static MethodHandle INDY_call30; + private static MethodHandle INDY_call30 () throws Throwable { + if (INDY_call30 != null) return INDY_call30; + CallSite cs = (CallSite) MH_bootstrap30 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap30 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper30 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call30 ().invokeExact(o1, o2, o3); } + + static Object bootstrap30 (Object l, Object n, Object t) throws Throwable { return _mh[ 30 ].invokeExact(l, n, t); } + + // 31 + private static MethodType MT_bootstrap31 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap31 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap31", MT_bootstrap31 ()); + } + + private static MethodHandle INDY_call31; + private static MethodHandle INDY_call31 () throws Throwable { + if (INDY_call31 != null) return INDY_call31; + CallSite cs = (CallSite) MH_bootstrap31 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap31 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper31 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call31 ().invokeExact(o1, o2, o3); } + + static Object bootstrap31 (Object l, Object n, Object t) throws Throwable { return _mh[ 31 ].invokeExact(l, n, t); } + + // 32 + private static MethodType MT_bootstrap32 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap32 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap32", MT_bootstrap32 ()); + } + + private static MethodHandle INDY_call32; + private static MethodHandle INDY_call32 () throws Throwable { + if (INDY_call32 != null) return INDY_call32; + CallSite cs = (CallSite) MH_bootstrap32 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap32 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper32 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call32 ().invokeExact(o1, o2, o3); } + + static Object bootstrap32 (Object l, Object n, Object t) throws Throwable { return _mh[ 32 ].invokeExact(l, n, t); } + + // 33 + private static MethodType MT_bootstrap33 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap33 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap33", MT_bootstrap33 ()); + } + + private static MethodHandle INDY_call33; + private static MethodHandle INDY_call33 () throws Throwable { + if (INDY_call33 != null) return INDY_call33; + CallSite cs = (CallSite) MH_bootstrap33 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap33 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper33 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call33 ().invokeExact(o1, o2, o3); } + + static Object bootstrap33 (Object l, Object n, Object t) throws Throwable { return _mh[ 33 ].invokeExact(l, n, t); } + + // 34 + private static MethodType MT_bootstrap34 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap34 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap34", MT_bootstrap34 ()); + } + + private static MethodHandle INDY_call34; + private static MethodHandle INDY_call34 () throws Throwable { + if (INDY_call34 != null) return INDY_call34; + CallSite cs = (CallSite) MH_bootstrap34 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap34 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper34 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call34 ().invokeExact(o1, o2, o3); } + + static Object bootstrap34 (Object l, Object n, Object t) throws Throwable { return _mh[ 34 ].invokeExact(l, n, t); } + + // 35 + private static MethodType MT_bootstrap35 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap35 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap35", MT_bootstrap35 ()); + } + + private static MethodHandle INDY_call35; + private static MethodHandle INDY_call35 () throws Throwable { + if (INDY_call35 != null) return INDY_call35; + CallSite cs = (CallSite) MH_bootstrap35 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap35 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper35 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call35 ().invokeExact(o1, o2, o3); } + + static Object bootstrap35 (Object l, Object n, Object t) throws Throwable { return _mh[ 35 ].invokeExact(l, n, t); } + + // 36 + private static MethodType MT_bootstrap36 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap36 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap36", MT_bootstrap36 ()); + } + + private static MethodHandle INDY_call36; + private static MethodHandle INDY_call36 () throws Throwable { + if (INDY_call36 != null) return INDY_call36; + CallSite cs = (CallSite) MH_bootstrap36 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap36 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper36 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call36 ().invokeExact(o1, o2, o3); } + + static Object bootstrap36 (Object l, Object n, Object t) throws Throwable { return _mh[ 36 ].invokeExact(l, n, t); } + + // 37 + private static MethodType MT_bootstrap37 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap37 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap37", MT_bootstrap37 ()); + } + + private static MethodHandle INDY_call37; + private static MethodHandle INDY_call37 () throws Throwable { + if (INDY_call37 != null) return INDY_call37; + CallSite cs = (CallSite) MH_bootstrap37 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap37 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper37 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call37 ().invokeExact(o1, o2, o3); } + + static Object bootstrap37 (Object l, Object n, Object t) throws Throwable { return _mh[ 37 ].invokeExact(l, n, t); } + + // 38 + private static MethodType MT_bootstrap38 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap38 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap38", MT_bootstrap38 ()); + } + + private static MethodHandle INDY_call38; + private static MethodHandle INDY_call38 () throws Throwable { + if (INDY_call38 != null) return INDY_call38; + CallSite cs = (CallSite) MH_bootstrap38 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap38 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper38 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call38 ().invokeExact(o1, o2, o3); } + + static Object bootstrap38 (Object l, Object n, Object t) throws Throwable { return _mh[ 38 ].invokeExact(l, n, t); } + + // 39 + private static MethodType MT_bootstrap39 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap39 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap39", MT_bootstrap39 ()); + } + + private static MethodHandle INDY_call39; + private static MethodHandle INDY_call39 () throws Throwable { + if (INDY_call39 != null) return INDY_call39; + CallSite cs = (CallSite) MH_bootstrap39 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap39 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper39 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call39 ().invokeExact(o1, o2, o3); } + + static Object bootstrap39 (Object l, Object n, Object t) throws Throwable { return _mh[ 39 ].invokeExact(l, n, t); } + + // 40 + private static MethodType MT_bootstrap40 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap40 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap40", MT_bootstrap40 ()); + } + + private static MethodHandle INDY_call40; + private static MethodHandle INDY_call40 () throws Throwable { + if (INDY_call40 != null) return INDY_call40; + CallSite cs = (CallSite) MH_bootstrap40 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap40 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper40 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call40 ().invokeExact(o1, o2, o3); } + + static Object bootstrap40 (Object l, Object n, Object t) throws Throwable { return _mh[ 40 ].invokeExact(l, n, t); } + + // 41 + private static MethodType MT_bootstrap41 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap41 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap41", MT_bootstrap41 ()); + } + + private static MethodHandle INDY_call41; + private static MethodHandle INDY_call41 () throws Throwable { + if (INDY_call41 != null) return INDY_call41; + CallSite cs = (CallSite) MH_bootstrap41 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap41 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper41 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call41 ().invokeExact(o1, o2, o3); } + + static Object bootstrap41 (Object l, Object n, Object t) throws Throwable { return _mh[ 41 ].invokeExact(l, n, t); } + + // 42 + private static MethodType MT_bootstrap42 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap42 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap42", MT_bootstrap42 ()); + } + + private static MethodHandle INDY_call42; + private static MethodHandle INDY_call42 () throws Throwable { + if (INDY_call42 != null) return INDY_call42; + CallSite cs = (CallSite) MH_bootstrap42 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap42 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper42 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call42 ().invokeExact(o1, o2, o3); } + + static Object bootstrap42 (Object l, Object n, Object t) throws Throwable { return _mh[ 42 ].invokeExact(l, n, t); } + + // 43 + private static MethodType MT_bootstrap43 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap43 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap43", MT_bootstrap43 ()); + } + + private static MethodHandle INDY_call43; + private static MethodHandle INDY_call43 () throws Throwable { + if (INDY_call43 != null) return INDY_call43; + CallSite cs = (CallSite) MH_bootstrap43 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap43 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper43 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call43 ().invokeExact(o1, o2, o3); } + + static Object bootstrap43 (Object l, Object n, Object t) throws Throwable { return _mh[ 43 ].invokeExact(l, n, t); } + + // 44 + private static MethodType MT_bootstrap44 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap44 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap44", MT_bootstrap44 ()); + } + + private static MethodHandle INDY_call44; + private static MethodHandle INDY_call44 () throws Throwable { + if (INDY_call44 != null) return INDY_call44; + CallSite cs = (CallSite) MH_bootstrap44 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap44 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper44 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call44 ().invokeExact(o1, o2, o3); } + + static Object bootstrap44 (Object l, Object n, Object t) throws Throwable { return _mh[ 44 ].invokeExact(l, n, t); } + + // 45 + private static MethodType MT_bootstrap45 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap45 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap45", MT_bootstrap45 ()); + } + + private static MethodHandle INDY_call45; + private static MethodHandle INDY_call45 () throws Throwable { + if (INDY_call45 != null) return INDY_call45; + CallSite cs = (CallSite) MH_bootstrap45 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap45 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper45 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call45 ().invokeExact(o1, o2, o3); } + + static Object bootstrap45 (Object l, Object n, Object t) throws Throwable { return _mh[ 45 ].invokeExact(l, n, t); } + + // 46 + private static MethodType MT_bootstrap46 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap46 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap46", MT_bootstrap46 ()); + } + + private static MethodHandle INDY_call46; + private static MethodHandle INDY_call46 () throws Throwable { + if (INDY_call46 != null) return INDY_call46; + CallSite cs = (CallSite) MH_bootstrap46 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap46 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper46 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call46 ().invokeExact(o1, o2, o3); } + + static Object bootstrap46 (Object l, Object n, Object t) throws Throwable { return _mh[ 46 ].invokeExact(l, n, t); } + + // 47 + private static MethodType MT_bootstrap47 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap47 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap47", MT_bootstrap47 ()); + } + + private static MethodHandle INDY_call47; + private static MethodHandle INDY_call47 () throws Throwable { + if (INDY_call47 != null) return INDY_call47; + CallSite cs = (CallSite) MH_bootstrap47 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap47 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper47 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call47 ().invokeExact(o1, o2, o3); } + + static Object bootstrap47 (Object l, Object n, Object t) throws Throwable { return _mh[ 47 ].invokeExact(l, n, t); } + + // 48 + private static MethodType MT_bootstrap48 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap48 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap48", MT_bootstrap48 ()); + } + + private static MethodHandle INDY_call48; + private static MethodHandle INDY_call48 () throws Throwable { + if (INDY_call48 != null) return INDY_call48; + CallSite cs = (CallSite) MH_bootstrap48 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap48 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper48 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call48 ().invokeExact(o1, o2, o3); } + + static Object bootstrap48 (Object l, Object n, Object t) throws Throwable { return _mh[ 48 ].invokeExact(l, n, t); } + + // 49 + private static MethodType MT_bootstrap49 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap49 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap49", MT_bootstrap49 ()); + } + + private static MethodHandle INDY_call49; + private static MethodHandle INDY_call49 () throws Throwable { + if (INDY_call49 != null) return INDY_call49; + CallSite cs = (CallSite) MH_bootstrap49 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap49 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper49 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call49 ().invokeExact(o1, o2, o3); } + + static Object bootstrap49 (Object l, Object n, Object t) throws Throwable { return _mh[ 49 ].invokeExact(l, n, t); } + + // 50 + private static MethodType MT_bootstrap50 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap50 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap50", MT_bootstrap50 ()); + } + + private static MethodHandle INDY_call50; + private static MethodHandle INDY_call50 () throws Throwable { + if (INDY_call50 != null) return INDY_call50; + CallSite cs = (CallSite) MH_bootstrap50 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap50 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper50 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call50 ().invokeExact(o1, o2, o3); } + + static Object bootstrap50 (Object l, Object n, Object t) throws Throwable { return _mh[ 50 ].invokeExact(l, n, t); } + + // 51 + private static MethodType MT_bootstrap51 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap51 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap51", MT_bootstrap51 ()); + } + + private static MethodHandle INDY_call51; + private static MethodHandle INDY_call51 () throws Throwable { + if (INDY_call51 != null) return INDY_call51; + CallSite cs = (CallSite) MH_bootstrap51 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap51 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper51 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call51 ().invokeExact(o1, o2, o3); } + + static Object bootstrap51 (Object l, Object n, Object t) throws Throwable { return _mh[ 51 ].invokeExact(l, n, t); } + + // 52 + private static MethodType MT_bootstrap52 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap52 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap52", MT_bootstrap52 ()); + } + + private static MethodHandle INDY_call52; + private static MethodHandle INDY_call52 () throws Throwable { + if (INDY_call52 != null) return INDY_call52; + CallSite cs = (CallSite) MH_bootstrap52 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap52 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper52 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call52 ().invokeExact(o1, o2, o3); } + + static Object bootstrap52 (Object l, Object n, Object t) throws Throwable { return _mh[ 52 ].invokeExact(l, n, t); } + + // 53 + private static MethodType MT_bootstrap53 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap53 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap53", MT_bootstrap53 ()); + } + + private static MethodHandle INDY_call53; + private static MethodHandle INDY_call53 () throws Throwable { + if (INDY_call53 != null) return INDY_call53; + CallSite cs = (CallSite) MH_bootstrap53 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap53 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper53 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call53 ().invokeExact(o1, o2, o3); } + + static Object bootstrap53 (Object l, Object n, Object t) throws Throwable { return _mh[ 53 ].invokeExact(l, n, t); } + + // 54 + private static MethodType MT_bootstrap54 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap54 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap54", MT_bootstrap54 ()); + } + + private static MethodHandle INDY_call54; + private static MethodHandle INDY_call54 () throws Throwable { + if (INDY_call54 != null) return INDY_call54; + CallSite cs = (CallSite) MH_bootstrap54 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap54 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper54 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call54 ().invokeExact(o1, o2, o3); } + + static Object bootstrap54 (Object l, Object n, Object t) throws Throwable { return _mh[ 54 ].invokeExact(l, n, t); } + + // 55 + private static MethodType MT_bootstrap55 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap55 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap55", MT_bootstrap55 ()); + } + + private static MethodHandle INDY_call55; + private static MethodHandle INDY_call55 () throws Throwable { + if (INDY_call55 != null) return INDY_call55; + CallSite cs = (CallSite) MH_bootstrap55 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap55 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper55 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call55 ().invokeExact(o1, o2, o3); } + + static Object bootstrap55 (Object l, Object n, Object t) throws Throwable { return _mh[ 55 ].invokeExact(l, n, t); } + + // 56 + private static MethodType MT_bootstrap56 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap56 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap56", MT_bootstrap56 ()); + } + + private static MethodHandle INDY_call56; + private static MethodHandle INDY_call56 () throws Throwable { + if (INDY_call56 != null) return INDY_call56; + CallSite cs = (CallSite) MH_bootstrap56 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap56 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper56 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call56 ().invokeExact(o1, o2, o3); } + + static Object bootstrap56 (Object l, Object n, Object t) throws Throwable { return _mh[ 56 ].invokeExact(l, n, t); } + + // 57 + private static MethodType MT_bootstrap57 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap57 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap57", MT_bootstrap57 ()); + } + + private static MethodHandle INDY_call57; + private static MethodHandle INDY_call57 () throws Throwable { + if (INDY_call57 != null) return INDY_call57; + CallSite cs = (CallSite) MH_bootstrap57 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap57 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper57 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call57 ().invokeExact(o1, o2, o3); } + + static Object bootstrap57 (Object l, Object n, Object t) throws Throwable { return _mh[ 57 ].invokeExact(l, n, t); } + + // 58 + private static MethodType MT_bootstrap58 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap58 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap58", MT_bootstrap58 ()); + } + + private static MethodHandle INDY_call58; + private static MethodHandle INDY_call58 () throws Throwable { + if (INDY_call58 != null) return INDY_call58; + CallSite cs = (CallSite) MH_bootstrap58 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap58 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper58 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call58 ().invokeExact(o1, o2, o3); } + + static Object bootstrap58 (Object l, Object n, Object t) throws Throwable { return _mh[ 58 ].invokeExact(l, n, t); } + + // 59 + private static MethodType MT_bootstrap59 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap59 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap59", MT_bootstrap59 ()); + } + + private static MethodHandle INDY_call59; + private static MethodHandle INDY_call59 () throws Throwable { + if (INDY_call59 != null) return INDY_call59; + CallSite cs = (CallSite) MH_bootstrap59 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap59 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper59 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call59 ().invokeExact(o1, o2, o3); } + + static Object bootstrap59 (Object l, Object n, Object t) throws Throwable { return _mh[ 59 ].invokeExact(l, n, t); } + + // 60 + private static MethodType MT_bootstrap60 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap60 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap60", MT_bootstrap60 ()); + } + + private static MethodHandle INDY_call60; + private static MethodHandle INDY_call60 () throws Throwable { + if (INDY_call60 != null) return INDY_call60; + CallSite cs = (CallSite) MH_bootstrap60 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap60 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper60 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call60 ().invokeExact(o1, o2, o3); } + + static Object bootstrap60 (Object l, Object n, Object t) throws Throwable { return _mh[ 60 ].invokeExact(l, n, t); } + + // 61 + private static MethodType MT_bootstrap61 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap61 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap61", MT_bootstrap61 ()); + } + + private static MethodHandle INDY_call61; + private static MethodHandle INDY_call61 () throws Throwable { + if (INDY_call61 != null) return INDY_call61; + CallSite cs = (CallSite) MH_bootstrap61 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap61 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper61 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call61 ().invokeExact(o1, o2, o3); } + + static Object bootstrap61 (Object l, Object n, Object t) throws Throwable { return _mh[ 61 ].invokeExact(l, n, t); } + + // 62 + private static MethodType MT_bootstrap62 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap62 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap62", MT_bootstrap62 ()); + } + + private static MethodHandle INDY_call62; + private static MethodHandle INDY_call62 () throws Throwable { + if (INDY_call62 != null) return INDY_call62; + CallSite cs = (CallSite) MH_bootstrap62 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap62 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper62 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call62 ().invokeExact(o1, o2, o3); } + + static Object bootstrap62 (Object l, Object n, Object t) throws Throwable { return _mh[ 62 ].invokeExact(l, n, t); } + + // 63 + private static MethodType MT_bootstrap63 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap63 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap63", MT_bootstrap63 ()); + } + + private static MethodHandle INDY_call63; + private static MethodHandle INDY_call63 () throws Throwable { + if (INDY_call63 != null) return INDY_call63; + CallSite cs = (CallSite) MH_bootstrap63 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap63 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper63 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call63 ().invokeExact(o1, o2, o3); } + + static Object bootstrap63 (Object l, Object n, Object t) throws Throwable { return _mh[ 63 ].invokeExact(l, n, t); } + + // 64 + private static MethodType MT_bootstrap64 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap64 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap64", MT_bootstrap64 ()); + } + + private static MethodHandle INDY_call64; + private static MethodHandle INDY_call64 () throws Throwable { + if (INDY_call64 != null) return INDY_call64; + CallSite cs = (CallSite) MH_bootstrap64 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap64 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper64 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call64 ().invokeExact(o1, o2, o3); } + + static Object bootstrap64 (Object l, Object n, Object t) throws Throwable { return _mh[ 64 ].invokeExact(l, n, t); } + + // 65 + private static MethodType MT_bootstrap65 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap65 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap65", MT_bootstrap65 ()); + } + + private static MethodHandle INDY_call65; + private static MethodHandle INDY_call65 () throws Throwable { + if (INDY_call65 != null) return INDY_call65; + CallSite cs = (CallSite) MH_bootstrap65 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap65 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper65 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call65 ().invokeExact(o1, o2, o3); } + + static Object bootstrap65 (Object l, Object n, Object t) throws Throwable { return _mh[ 65 ].invokeExact(l, n, t); } + + // 66 + private static MethodType MT_bootstrap66 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap66 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap66", MT_bootstrap66 ()); + } + + private static MethodHandle INDY_call66; + private static MethodHandle INDY_call66 () throws Throwable { + if (INDY_call66 != null) return INDY_call66; + CallSite cs = (CallSite) MH_bootstrap66 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap66 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper66 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call66 ().invokeExact(o1, o2, o3); } + + static Object bootstrap66 (Object l, Object n, Object t) throws Throwable { return _mh[ 66 ].invokeExact(l, n, t); } + + // 67 + private static MethodType MT_bootstrap67 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap67 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap67", MT_bootstrap67 ()); + } + + private static MethodHandle INDY_call67; + private static MethodHandle INDY_call67 () throws Throwable { + if (INDY_call67 != null) return INDY_call67; + CallSite cs = (CallSite) MH_bootstrap67 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap67 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper67 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call67 ().invokeExact(o1, o2, o3); } + + static Object bootstrap67 (Object l, Object n, Object t) throws Throwable { return _mh[ 67 ].invokeExact(l, n, t); } + + // 68 + private static MethodType MT_bootstrap68 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap68 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap68", MT_bootstrap68 ()); + } + + private static MethodHandle INDY_call68; + private static MethodHandle INDY_call68 () throws Throwable { + if (INDY_call68 != null) return INDY_call68; + CallSite cs = (CallSite) MH_bootstrap68 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap68 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper68 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call68 ().invokeExact(o1, o2, o3); } + + static Object bootstrap68 (Object l, Object n, Object t) throws Throwable { return _mh[ 68 ].invokeExact(l, n, t); } + + // 69 + private static MethodType MT_bootstrap69 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap69 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap69", MT_bootstrap69 ()); + } + + private static MethodHandle INDY_call69; + private static MethodHandle INDY_call69 () throws Throwable { + if (INDY_call69 != null) return INDY_call69; + CallSite cs = (CallSite) MH_bootstrap69 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap69 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper69 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call69 ().invokeExact(o1, o2, o3); } + + static Object bootstrap69 (Object l, Object n, Object t) throws Throwable { return _mh[ 69 ].invokeExact(l, n, t); } + + // 70 + private static MethodType MT_bootstrap70 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap70 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap70", MT_bootstrap70 ()); + } + + private static MethodHandle INDY_call70; + private static MethodHandle INDY_call70 () throws Throwable { + if (INDY_call70 != null) return INDY_call70; + CallSite cs = (CallSite) MH_bootstrap70 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap70 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper70 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call70 ().invokeExact(o1, o2, o3); } + + static Object bootstrap70 (Object l, Object n, Object t) throws Throwable { return _mh[ 70 ].invokeExact(l, n, t); } + + // 71 + private static MethodType MT_bootstrap71 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap71 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap71", MT_bootstrap71 ()); + } + + private static MethodHandle INDY_call71; + private static MethodHandle INDY_call71 () throws Throwable { + if (INDY_call71 != null) return INDY_call71; + CallSite cs = (CallSite) MH_bootstrap71 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap71 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper71 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call71 ().invokeExact(o1, o2, o3); } + + static Object bootstrap71 (Object l, Object n, Object t) throws Throwable { return _mh[ 71 ].invokeExact(l, n, t); } + + // 72 + private static MethodType MT_bootstrap72 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap72 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap72", MT_bootstrap72 ()); + } + + private static MethodHandle INDY_call72; + private static MethodHandle INDY_call72 () throws Throwable { + if (INDY_call72 != null) return INDY_call72; + CallSite cs = (CallSite) MH_bootstrap72 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap72 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper72 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call72 ().invokeExact(o1, o2, o3); } + + static Object bootstrap72 (Object l, Object n, Object t) throws Throwable { return _mh[ 72 ].invokeExact(l, n, t); } + + // 73 + private static MethodType MT_bootstrap73 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap73 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap73", MT_bootstrap73 ()); + } + + private static MethodHandle INDY_call73; + private static MethodHandle INDY_call73 () throws Throwable { + if (INDY_call73 != null) return INDY_call73; + CallSite cs = (CallSite) MH_bootstrap73 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap73 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper73 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call73 ().invokeExact(o1, o2, o3); } + + static Object bootstrap73 (Object l, Object n, Object t) throws Throwable { return _mh[ 73 ].invokeExact(l, n, t); } + + // 74 + private static MethodType MT_bootstrap74 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap74 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap74", MT_bootstrap74 ()); + } + + private static MethodHandle INDY_call74; + private static MethodHandle INDY_call74 () throws Throwable { + if (INDY_call74 != null) return INDY_call74; + CallSite cs = (CallSite) MH_bootstrap74 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap74 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper74 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call74 ().invokeExact(o1, o2, o3); } + + static Object bootstrap74 (Object l, Object n, Object t) throws Throwable { return _mh[ 74 ].invokeExact(l, n, t); } + + // 75 + private static MethodType MT_bootstrap75 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap75 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap75", MT_bootstrap75 ()); + } + + private static MethodHandle INDY_call75; + private static MethodHandle INDY_call75 () throws Throwable { + if (INDY_call75 != null) return INDY_call75; + CallSite cs = (CallSite) MH_bootstrap75 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap75 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper75 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call75 ().invokeExact(o1, o2, o3); } + + static Object bootstrap75 (Object l, Object n, Object t) throws Throwable { return _mh[ 75 ].invokeExact(l, n, t); } + + // 76 + private static MethodType MT_bootstrap76 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap76 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap76", MT_bootstrap76 ()); + } + + private static MethodHandle INDY_call76; + private static MethodHandle INDY_call76 () throws Throwable { + if (INDY_call76 != null) return INDY_call76; + CallSite cs = (CallSite) MH_bootstrap76 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap76 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper76 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call76 ().invokeExact(o1, o2, o3); } + + static Object bootstrap76 (Object l, Object n, Object t) throws Throwable { return _mh[ 76 ].invokeExact(l, n, t); } + + // 77 + private static MethodType MT_bootstrap77 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap77 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap77", MT_bootstrap77 ()); + } + + private static MethodHandle INDY_call77; + private static MethodHandle INDY_call77 () throws Throwable { + if (INDY_call77 != null) return INDY_call77; + CallSite cs = (CallSite) MH_bootstrap77 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap77 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper77 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call77 ().invokeExact(o1, o2, o3); } + + static Object bootstrap77 (Object l, Object n, Object t) throws Throwable { return _mh[ 77 ].invokeExact(l, n, t); } + + // 78 + private static MethodType MT_bootstrap78 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap78 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap78", MT_bootstrap78 ()); + } + + private static MethodHandle INDY_call78; + private static MethodHandle INDY_call78 () throws Throwable { + if (INDY_call78 != null) return INDY_call78; + CallSite cs = (CallSite) MH_bootstrap78 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap78 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper78 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call78 ().invokeExact(o1, o2, o3); } + + static Object bootstrap78 (Object l, Object n, Object t) throws Throwable { return _mh[ 78 ].invokeExact(l, n, t); } + + // 79 + private static MethodType MT_bootstrap79 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap79 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap79", MT_bootstrap79 ()); + } + + private static MethodHandle INDY_call79; + private static MethodHandle INDY_call79 () throws Throwable { + if (INDY_call79 != null) return INDY_call79; + CallSite cs = (CallSite) MH_bootstrap79 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap79 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper79 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call79 ().invokeExact(o1, o2, o3); } + + static Object bootstrap79 (Object l, Object n, Object t) throws Throwable { return _mh[ 79 ].invokeExact(l, n, t); } + + // 80 + private static MethodType MT_bootstrap80 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap80 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap80", MT_bootstrap80 ()); + } + + private static MethodHandle INDY_call80; + private static MethodHandle INDY_call80 () throws Throwable { + if (INDY_call80 != null) return INDY_call80; + CallSite cs = (CallSite) MH_bootstrap80 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap80 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper80 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call80 ().invokeExact(o1, o2, o3); } + + static Object bootstrap80 (Object l, Object n, Object t) throws Throwable { return _mh[ 80 ].invokeExact(l, n, t); } + + // 81 + private static MethodType MT_bootstrap81 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap81 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap81", MT_bootstrap81 ()); + } + + private static MethodHandle INDY_call81; + private static MethodHandle INDY_call81 () throws Throwable { + if (INDY_call81 != null) return INDY_call81; + CallSite cs = (CallSite) MH_bootstrap81 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap81 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper81 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call81 ().invokeExact(o1, o2, o3); } + + static Object bootstrap81 (Object l, Object n, Object t) throws Throwable { return _mh[ 81 ].invokeExact(l, n, t); } + + // 82 + private static MethodType MT_bootstrap82 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap82 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap82", MT_bootstrap82 ()); + } + + private static MethodHandle INDY_call82; + private static MethodHandle INDY_call82 () throws Throwable { + if (INDY_call82 != null) return INDY_call82; + CallSite cs = (CallSite) MH_bootstrap82 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap82 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper82 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call82 ().invokeExact(o1, o2, o3); } + + static Object bootstrap82 (Object l, Object n, Object t) throws Throwable { return _mh[ 82 ].invokeExact(l, n, t); } + + // 83 + private static MethodType MT_bootstrap83 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap83 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap83", MT_bootstrap83 ()); + } + + private static MethodHandle INDY_call83; + private static MethodHandle INDY_call83 () throws Throwable { + if (INDY_call83 != null) return INDY_call83; + CallSite cs = (CallSite) MH_bootstrap83 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap83 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper83 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call83 ().invokeExact(o1, o2, o3); } + + static Object bootstrap83 (Object l, Object n, Object t) throws Throwable { return _mh[ 83 ].invokeExact(l, n, t); } + + // 84 + private static MethodType MT_bootstrap84 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap84 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap84", MT_bootstrap84 ()); + } + + private static MethodHandle INDY_call84; + private static MethodHandle INDY_call84 () throws Throwable { + if (INDY_call84 != null) return INDY_call84; + CallSite cs = (CallSite) MH_bootstrap84 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap84 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper84 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call84 ().invokeExact(o1, o2, o3); } + + static Object bootstrap84 (Object l, Object n, Object t) throws Throwable { return _mh[ 84 ].invokeExact(l, n, t); } + + // 85 + private static MethodType MT_bootstrap85 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap85 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap85", MT_bootstrap85 ()); + } + + private static MethodHandle INDY_call85; + private static MethodHandle INDY_call85 () throws Throwable { + if (INDY_call85 != null) return INDY_call85; + CallSite cs = (CallSite) MH_bootstrap85 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap85 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper85 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call85 ().invokeExact(o1, o2, o3); } + + static Object bootstrap85 (Object l, Object n, Object t) throws Throwable { return _mh[ 85 ].invokeExact(l, n, t); } + + // 86 + private static MethodType MT_bootstrap86 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap86 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap86", MT_bootstrap86 ()); + } + + private static MethodHandle INDY_call86; + private static MethodHandle INDY_call86 () throws Throwable { + if (INDY_call86 != null) return INDY_call86; + CallSite cs = (CallSite) MH_bootstrap86 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap86 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper86 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call86 ().invokeExact(o1, o2, o3); } + + static Object bootstrap86 (Object l, Object n, Object t) throws Throwable { return _mh[ 86 ].invokeExact(l, n, t); } + + // 87 + private static MethodType MT_bootstrap87 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap87 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap87", MT_bootstrap87 ()); + } + + private static MethodHandle INDY_call87; + private static MethodHandle INDY_call87 () throws Throwable { + if (INDY_call87 != null) return INDY_call87; + CallSite cs = (CallSite) MH_bootstrap87 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap87 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper87 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call87 ().invokeExact(o1, o2, o3); } + + static Object bootstrap87 (Object l, Object n, Object t) throws Throwable { return _mh[ 87 ].invokeExact(l, n, t); } + + // 88 + private static MethodType MT_bootstrap88 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap88 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap88", MT_bootstrap88 ()); + } + + private static MethodHandle INDY_call88; + private static MethodHandle INDY_call88 () throws Throwable { + if (INDY_call88 != null) return INDY_call88; + CallSite cs = (CallSite) MH_bootstrap88 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap88 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper88 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call88 ().invokeExact(o1, o2, o3); } + + static Object bootstrap88 (Object l, Object n, Object t) throws Throwable { return _mh[ 88 ].invokeExact(l, n, t); } + + // 89 + private static MethodType MT_bootstrap89 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap89 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap89", MT_bootstrap89 ()); + } + + private static MethodHandle INDY_call89; + private static MethodHandle INDY_call89 () throws Throwable { + if (INDY_call89 != null) return INDY_call89; + CallSite cs = (CallSite) MH_bootstrap89 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap89 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper89 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call89 ().invokeExact(o1, o2, o3); } + + static Object bootstrap89 (Object l, Object n, Object t) throws Throwable { return _mh[ 89 ].invokeExact(l, n, t); } + + // 90 + private static MethodType MT_bootstrap90 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap90 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap90", MT_bootstrap90 ()); + } + + private static MethodHandle INDY_call90; + private static MethodHandle INDY_call90 () throws Throwable { + if (INDY_call90 != null) return INDY_call90; + CallSite cs = (CallSite) MH_bootstrap90 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap90 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper90 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call90 ().invokeExact(o1, o2, o3); } + + static Object bootstrap90 (Object l, Object n, Object t) throws Throwable { return _mh[ 90 ].invokeExact(l, n, t); } + + // 91 + private static MethodType MT_bootstrap91 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap91 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap91", MT_bootstrap91 ()); + } + + private static MethodHandle INDY_call91; + private static MethodHandle INDY_call91 () throws Throwable { + if (INDY_call91 != null) return INDY_call91; + CallSite cs = (CallSite) MH_bootstrap91 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap91 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper91 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call91 ().invokeExact(o1, o2, o3); } + + static Object bootstrap91 (Object l, Object n, Object t) throws Throwable { return _mh[ 91 ].invokeExact(l, n, t); } + + // 92 + private static MethodType MT_bootstrap92 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap92 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap92", MT_bootstrap92 ()); + } + + private static MethodHandle INDY_call92; + private static MethodHandle INDY_call92 () throws Throwable { + if (INDY_call92 != null) return INDY_call92; + CallSite cs = (CallSite) MH_bootstrap92 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap92 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper92 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call92 ().invokeExact(o1, o2, o3); } + + static Object bootstrap92 (Object l, Object n, Object t) throws Throwable { return _mh[ 92 ].invokeExact(l, n, t); } + + // 93 + private static MethodType MT_bootstrap93 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap93 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap93", MT_bootstrap93 ()); + } + + private static MethodHandle INDY_call93; + private static MethodHandle INDY_call93 () throws Throwable { + if (INDY_call93 != null) return INDY_call93; + CallSite cs = (CallSite) MH_bootstrap93 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap93 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper93 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call93 ().invokeExact(o1, o2, o3); } + + static Object bootstrap93 (Object l, Object n, Object t) throws Throwable { return _mh[ 93 ].invokeExact(l, n, t); } + + // 94 + private static MethodType MT_bootstrap94 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap94 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap94", MT_bootstrap94 ()); + } + + private static MethodHandle INDY_call94; + private static MethodHandle INDY_call94 () throws Throwable { + if (INDY_call94 != null) return INDY_call94; + CallSite cs = (CallSite) MH_bootstrap94 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap94 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper94 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call94 ().invokeExact(o1, o2, o3); } + + static Object bootstrap94 (Object l, Object n, Object t) throws Throwable { return _mh[ 94 ].invokeExact(l, n, t); } + + // 95 + private static MethodType MT_bootstrap95 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap95 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap95", MT_bootstrap95 ()); + } + + private static MethodHandle INDY_call95; + private static MethodHandle INDY_call95 () throws Throwable { + if (INDY_call95 != null) return INDY_call95; + CallSite cs = (CallSite) MH_bootstrap95 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap95 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper95 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call95 ().invokeExact(o1, o2, o3); } + + static Object bootstrap95 (Object l, Object n, Object t) throws Throwable { return _mh[ 95 ].invokeExact(l, n, t); } + + // 96 + private static MethodType MT_bootstrap96 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap96 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap96", MT_bootstrap96 ()); + } + + private static MethodHandle INDY_call96; + private static MethodHandle INDY_call96 () throws Throwable { + if (INDY_call96 != null) return INDY_call96; + CallSite cs = (CallSite) MH_bootstrap96 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap96 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper96 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call96 ().invokeExact(o1, o2, o3); } + + static Object bootstrap96 (Object l, Object n, Object t) throws Throwable { return _mh[ 96 ].invokeExact(l, n, t); } + + // 97 + private static MethodType MT_bootstrap97 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap97 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap97", MT_bootstrap97 ()); + } + + private static MethodHandle INDY_call97; + private static MethodHandle INDY_call97 () throws Throwable { + if (INDY_call97 != null) return INDY_call97; + CallSite cs = (CallSite) MH_bootstrap97 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap97 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper97 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call97 ().invokeExact(o1, o2, o3); } + + static Object bootstrap97 (Object l, Object n, Object t) throws Throwable { return _mh[ 97 ].invokeExact(l, n, t); } + + // 98 + private static MethodType MT_bootstrap98 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap98 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap98", MT_bootstrap98 ()); + } + + private static MethodHandle INDY_call98; + private static MethodHandle INDY_call98 () throws Throwable { + if (INDY_call98 != null) return INDY_call98; + CallSite cs = (CallSite) MH_bootstrap98 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap98 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper98 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call98 ().invokeExact(o1, o2, o3); } + + static Object bootstrap98 (Object l, Object n, Object t) throws Throwable { return _mh[ 98 ].invokeExact(l, n, t); } + + // 99 + private static MethodType MT_bootstrap99 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap99 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap99", MT_bootstrap99 ()); + } + + private static MethodHandle INDY_call99; + private static MethodHandle INDY_call99 () throws Throwable { + if (INDY_call99 != null) return INDY_call99; + CallSite cs = (CallSite) MH_bootstrap99 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap99 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper99 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call99 ().invokeExact(o1, o2, o3); } + + static Object bootstrap99 (Object l, Object n, Object t) throws Throwable { return _mh[ 99 ].invokeExact(l, n, t); } + + // 100 + private static MethodType MT_bootstrap100 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap100 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap100", MT_bootstrap100 ()); + } + + private static MethodHandle INDY_call100; + private static MethodHandle INDY_call100 () throws Throwable { + if (INDY_call100 != null) return INDY_call100; + CallSite cs = (CallSite) MH_bootstrap100 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap100 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper100 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call100 ().invokeExact(o1, o2, o3); } + + static Object bootstrap100 (Object l, Object n, Object t) throws Throwable { return _mh[ 100 ].invokeExact(l, n, t); } + + // 101 + private static MethodType MT_bootstrap101 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap101 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap101", MT_bootstrap101 ()); + } + + private static MethodHandle INDY_call101; + private static MethodHandle INDY_call101 () throws Throwable { + if (INDY_call101 != null) return INDY_call101; + CallSite cs = (CallSite) MH_bootstrap101 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap101 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper101 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call101 ().invokeExact(o1, o2, o3); } + + static Object bootstrap101 (Object l, Object n, Object t) throws Throwable { return _mh[ 101 ].invokeExact(l, n, t); } + + // 102 + private static MethodType MT_bootstrap102 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap102 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap102", MT_bootstrap102 ()); + } + + private static MethodHandle INDY_call102; + private static MethodHandle INDY_call102 () throws Throwable { + if (INDY_call102 != null) return INDY_call102; + CallSite cs = (CallSite) MH_bootstrap102 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap102 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper102 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call102 ().invokeExact(o1, o2, o3); } + + static Object bootstrap102 (Object l, Object n, Object t) throws Throwable { return _mh[ 102 ].invokeExact(l, n, t); } + + // 103 + private static MethodType MT_bootstrap103 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap103 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap103", MT_bootstrap103 ()); + } + + private static MethodHandle INDY_call103; + private static MethodHandle INDY_call103 () throws Throwable { + if (INDY_call103 != null) return INDY_call103; + CallSite cs = (CallSite) MH_bootstrap103 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap103 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper103 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call103 ().invokeExact(o1, o2, o3); } + + static Object bootstrap103 (Object l, Object n, Object t) throws Throwable { return _mh[ 103 ].invokeExact(l, n, t); } + + // 104 + private static MethodType MT_bootstrap104 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap104 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap104", MT_bootstrap104 ()); + } + + private static MethodHandle INDY_call104; + private static MethodHandle INDY_call104 () throws Throwable { + if (INDY_call104 != null) return INDY_call104; + CallSite cs = (CallSite) MH_bootstrap104 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap104 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper104 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call104 ().invokeExact(o1, o2, o3); } + + static Object bootstrap104 (Object l, Object n, Object t) throws Throwable { return _mh[ 104 ].invokeExact(l, n, t); } + + // 105 + private static MethodType MT_bootstrap105 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap105 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap105", MT_bootstrap105 ()); + } + + private static MethodHandle INDY_call105; + private static MethodHandle INDY_call105 () throws Throwable { + if (INDY_call105 != null) return INDY_call105; + CallSite cs = (CallSite) MH_bootstrap105 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap105 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper105 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call105 ().invokeExact(o1, o2, o3); } + + static Object bootstrap105 (Object l, Object n, Object t) throws Throwable { return _mh[ 105 ].invokeExact(l, n, t); } + + // 106 + private static MethodType MT_bootstrap106 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap106 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap106", MT_bootstrap106 ()); + } + + private static MethodHandle INDY_call106; + private static MethodHandle INDY_call106 () throws Throwable { + if (INDY_call106 != null) return INDY_call106; + CallSite cs = (CallSite) MH_bootstrap106 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap106 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper106 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call106 ().invokeExact(o1, o2, o3); } + + static Object bootstrap106 (Object l, Object n, Object t) throws Throwable { return _mh[ 106 ].invokeExact(l, n, t); } + + // 107 + private static MethodType MT_bootstrap107 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap107 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap107", MT_bootstrap107 ()); + } + + private static MethodHandle INDY_call107; + private static MethodHandle INDY_call107 () throws Throwable { + if (INDY_call107 != null) return INDY_call107; + CallSite cs = (CallSite) MH_bootstrap107 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap107 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper107 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call107 ().invokeExact(o1, o2, o3); } + + static Object bootstrap107 (Object l, Object n, Object t) throws Throwable { return _mh[ 107 ].invokeExact(l, n, t); } + + // 108 + private static MethodType MT_bootstrap108 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap108 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap108", MT_bootstrap108 ()); + } + + private static MethodHandle INDY_call108; + private static MethodHandle INDY_call108 () throws Throwable { + if (INDY_call108 != null) return INDY_call108; + CallSite cs = (CallSite) MH_bootstrap108 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap108 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper108 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call108 ().invokeExact(o1, o2, o3); } + + static Object bootstrap108 (Object l, Object n, Object t) throws Throwable { return _mh[ 108 ].invokeExact(l, n, t); } + + // 109 + private static MethodType MT_bootstrap109 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap109 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap109", MT_bootstrap109 ()); + } + + private static MethodHandle INDY_call109; + private static MethodHandle INDY_call109 () throws Throwable { + if (INDY_call109 != null) return INDY_call109; + CallSite cs = (CallSite) MH_bootstrap109 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap109 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper109 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call109 ().invokeExact(o1, o2, o3); } + + static Object bootstrap109 (Object l, Object n, Object t) throws Throwable { return _mh[ 109 ].invokeExact(l, n, t); } + + // 110 + private static MethodType MT_bootstrap110 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap110 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap110", MT_bootstrap110 ()); + } + + private static MethodHandle INDY_call110; + private static MethodHandle INDY_call110 () throws Throwable { + if (INDY_call110 != null) return INDY_call110; + CallSite cs = (CallSite) MH_bootstrap110 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap110 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper110 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call110 ().invokeExact(o1, o2, o3); } + + static Object bootstrap110 (Object l, Object n, Object t) throws Throwable { return _mh[ 110 ].invokeExact(l, n, t); } + + // 111 + private static MethodType MT_bootstrap111 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap111 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap111", MT_bootstrap111 ()); + } + + private static MethodHandle INDY_call111; + private static MethodHandle INDY_call111 () throws Throwable { + if (INDY_call111 != null) return INDY_call111; + CallSite cs = (CallSite) MH_bootstrap111 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap111 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper111 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call111 ().invokeExact(o1, o2, o3); } + + static Object bootstrap111 (Object l, Object n, Object t) throws Throwable { return _mh[ 111 ].invokeExact(l, n, t); } + + // 112 + private static MethodType MT_bootstrap112 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap112 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap112", MT_bootstrap112 ()); + } + + private static MethodHandle INDY_call112; + private static MethodHandle INDY_call112 () throws Throwable { + if (INDY_call112 != null) return INDY_call112; + CallSite cs = (CallSite) MH_bootstrap112 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap112 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper112 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call112 ().invokeExact(o1, o2, o3); } + + static Object bootstrap112 (Object l, Object n, Object t) throws Throwable { return _mh[ 112 ].invokeExact(l, n, t); } + + // 113 + private static MethodType MT_bootstrap113 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap113 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap113", MT_bootstrap113 ()); + } + + private static MethodHandle INDY_call113; + private static MethodHandle INDY_call113 () throws Throwable { + if (INDY_call113 != null) return INDY_call113; + CallSite cs = (CallSite) MH_bootstrap113 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap113 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper113 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call113 ().invokeExact(o1, o2, o3); } + + static Object bootstrap113 (Object l, Object n, Object t) throws Throwable { return _mh[ 113 ].invokeExact(l, n, t); } + + // 114 + private static MethodType MT_bootstrap114 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap114 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap114", MT_bootstrap114 ()); + } + + private static MethodHandle INDY_call114; + private static MethodHandle INDY_call114 () throws Throwable { + if (INDY_call114 != null) return INDY_call114; + CallSite cs = (CallSite) MH_bootstrap114 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap114 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper114 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call114 ().invokeExact(o1, o2, o3); } + + static Object bootstrap114 (Object l, Object n, Object t) throws Throwable { return _mh[ 114 ].invokeExact(l, n, t); } + + // 115 + private static MethodType MT_bootstrap115 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap115 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap115", MT_bootstrap115 ()); + } + + private static MethodHandle INDY_call115; + private static MethodHandle INDY_call115 () throws Throwable { + if (INDY_call115 != null) return INDY_call115; + CallSite cs = (CallSite) MH_bootstrap115 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap115 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper115 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call115 ().invokeExact(o1, o2, o3); } + + static Object bootstrap115 (Object l, Object n, Object t) throws Throwable { return _mh[ 115 ].invokeExact(l, n, t); } + + // 116 + private static MethodType MT_bootstrap116 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap116 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap116", MT_bootstrap116 ()); + } + + private static MethodHandle INDY_call116; + private static MethodHandle INDY_call116 () throws Throwable { + if (INDY_call116 != null) return INDY_call116; + CallSite cs = (CallSite) MH_bootstrap116 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap116 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper116 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call116 ().invokeExact(o1, o2, o3); } + + static Object bootstrap116 (Object l, Object n, Object t) throws Throwable { return _mh[ 116 ].invokeExact(l, n, t); } + + // 117 + private static MethodType MT_bootstrap117 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap117 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap117", MT_bootstrap117 ()); + } + + private static MethodHandle INDY_call117; + private static MethodHandle INDY_call117 () throws Throwable { + if (INDY_call117 != null) return INDY_call117; + CallSite cs = (CallSite) MH_bootstrap117 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap117 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper117 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call117 ().invokeExact(o1, o2, o3); } + + static Object bootstrap117 (Object l, Object n, Object t) throws Throwable { return _mh[ 117 ].invokeExact(l, n, t); } + + // 118 + private static MethodType MT_bootstrap118 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap118 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap118", MT_bootstrap118 ()); + } + + private static MethodHandle INDY_call118; + private static MethodHandle INDY_call118 () throws Throwable { + if (INDY_call118 != null) return INDY_call118; + CallSite cs = (CallSite) MH_bootstrap118 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap118 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper118 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call118 ().invokeExact(o1, o2, o3); } + + static Object bootstrap118 (Object l, Object n, Object t) throws Throwable { return _mh[ 118 ].invokeExact(l, n, t); } + + // 119 + private static MethodType MT_bootstrap119 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap119 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap119", MT_bootstrap119 ()); + } + + private static MethodHandle INDY_call119; + private static MethodHandle INDY_call119 () throws Throwable { + if (INDY_call119 != null) return INDY_call119; + CallSite cs = (CallSite) MH_bootstrap119 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap119 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper119 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call119 ().invokeExact(o1, o2, o3); } + + static Object bootstrap119 (Object l, Object n, Object t) throws Throwable { return _mh[ 119 ].invokeExact(l, n, t); } + + // 120 + private static MethodType MT_bootstrap120 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap120 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap120", MT_bootstrap120 ()); + } + + private static MethodHandle INDY_call120; + private static MethodHandle INDY_call120 () throws Throwable { + if (INDY_call120 != null) return INDY_call120; + CallSite cs = (CallSite) MH_bootstrap120 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap120 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper120 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call120 ().invokeExact(o1, o2, o3); } + + static Object bootstrap120 (Object l, Object n, Object t) throws Throwable { return _mh[ 120 ].invokeExact(l, n, t); } + + // 121 + private static MethodType MT_bootstrap121 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap121 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap121", MT_bootstrap121 ()); + } + + private static MethodHandle INDY_call121; + private static MethodHandle INDY_call121 () throws Throwable { + if (INDY_call121 != null) return INDY_call121; + CallSite cs = (CallSite) MH_bootstrap121 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap121 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper121 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call121 ().invokeExact(o1, o2, o3); } + + static Object bootstrap121 (Object l, Object n, Object t) throws Throwable { return _mh[ 121 ].invokeExact(l, n, t); } + + // 122 + private static MethodType MT_bootstrap122 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap122 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap122", MT_bootstrap122 ()); + } + + private static MethodHandle INDY_call122; + private static MethodHandle INDY_call122 () throws Throwable { + if (INDY_call122 != null) return INDY_call122; + CallSite cs = (CallSite) MH_bootstrap122 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap122 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper122 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call122 ().invokeExact(o1, o2, o3); } + + static Object bootstrap122 (Object l, Object n, Object t) throws Throwable { return _mh[ 122 ].invokeExact(l, n, t); } + + // 123 + private static MethodType MT_bootstrap123 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap123 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap123", MT_bootstrap123 ()); + } + + private static MethodHandle INDY_call123; + private static MethodHandle INDY_call123 () throws Throwable { + if (INDY_call123 != null) return INDY_call123; + CallSite cs = (CallSite) MH_bootstrap123 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap123 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper123 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call123 ().invokeExact(o1, o2, o3); } + + static Object bootstrap123 (Object l, Object n, Object t) throws Throwable { return _mh[ 123 ].invokeExact(l, n, t); } + + // 124 + private static MethodType MT_bootstrap124 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap124 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap124", MT_bootstrap124 ()); + } + + private static MethodHandle INDY_call124; + private static MethodHandle INDY_call124 () throws Throwable { + if (INDY_call124 != null) return INDY_call124; + CallSite cs = (CallSite) MH_bootstrap124 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap124 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper124 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call124 ().invokeExact(o1, o2, o3); } + + static Object bootstrap124 (Object l, Object n, Object t) throws Throwable { return _mh[ 124 ].invokeExact(l, n, t); } + + // 125 + private static MethodType MT_bootstrap125 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap125 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap125", MT_bootstrap125 ()); + } + + private static MethodHandle INDY_call125; + private static MethodHandle INDY_call125 () throws Throwable { + if (INDY_call125 != null) return INDY_call125; + CallSite cs = (CallSite) MH_bootstrap125 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap125 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper125 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call125 ().invokeExact(o1, o2, o3); } + + static Object bootstrap125 (Object l, Object n, Object t) throws Throwable { return _mh[ 125 ].invokeExact(l, n, t); } + + // 126 + private static MethodType MT_bootstrap126 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap126 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap126", MT_bootstrap126 ()); + } + + private static MethodHandle INDY_call126; + private static MethodHandle INDY_call126 () throws Throwable { + if (INDY_call126 != null) return INDY_call126; + CallSite cs = (CallSite) MH_bootstrap126 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap126 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper126 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call126 ().invokeExact(o1, o2, o3); } + + static Object bootstrap126 (Object l, Object n, Object t) throws Throwable { return _mh[ 126 ].invokeExact(l, n, t); } + + // 127 + private static MethodType MT_bootstrap127 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap127 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap127", MT_bootstrap127 ()); + } + + private static MethodHandle INDY_call127; + private static MethodHandle INDY_call127 () throws Throwable { + if (INDY_call127 != null) return INDY_call127; + CallSite cs = (CallSite) MH_bootstrap127 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap127 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper127 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call127 ().invokeExact(o1, o2, o3); } + + static Object bootstrap127 (Object l, Object n, Object t) throws Throwable { return _mh[ 127 ].invokeExact(l, n, t); } + + // 128 + private static MethodType MT_bootstrap128 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap128 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap128", MT_bootstrap128 ()); + } + + private static MethodHandle INDY_call128; + private static MethodHandle INDY_call128 () throws Throwable { + if (INDY_call128 != null) return INDY_call128; + CallSite cs = (CallSite) MH_bootstrap128 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap128 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper128 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call128 ().invokeExact(o1, o2, o3); } + + static Object bootstrap128 (Object l, Object n, Object t) throws Throwable { return _mh[ 128 ].invokeExact(l, n, t); } + + // 129 + private static MethodType MT_bootstrap129 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap129 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap129", MT_bootstrap129 ()); + } + + private static MethodHandle INDY_call129; + private static MethodHandle INDY_call129 () throws Throwable { + if (INDY_call129 != null) return INDY_call129; + CallSite cs = (CallSite) MH_bootstrap129 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap129 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper129 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call129 ().invokeExact(o1, o2, o3); } + + static Object bootstrap129 (Object l, Object n, Object t) throws Throwable { return _mh[ 129 ].invokeExact(l, n, t); } + + // 130 + private static MethodType MT_bootstrap130 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap130 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap130", MT_bootstrap130 ()); + } + + private static MethodHandle INDY_call130; + private static MethodHandle INDY_call130 () throws Throwable { + if (INDY_call130 != null) return INDY_call130; + CallSite cs = (CallSite) MH_bootstrap130 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap130 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper130 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call130 ().invokeExact(o1, o2, o3); } + + static Object bootstrap130 (Object l, Object n, Object t) throws Throwable { return _mh[ 130 ].invokeExact(l, n, t); } + + // 131 + private static MethodType MT_bootstrap131 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap131 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap131", MT_bootstrap131 ()); + } + + private static MethodHandle INDY_call131; + private static MethodHandle INDY_call131 () throws Throwable { + if (INDY_call131 != null) return INDY_call131; + CallSite cs = (CallSite) MH_bootstrap131 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap131 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper131 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call131 ().invokeExact(o1, o2, o3); } + + static Object bootstrap131 (Object l, Object n, Object t) throws Throwable { return _mh[ 131 ].invokeExact(l, n, t); } + + // 132 + private static MethodType MT_bootstrap132 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap132 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap132", MT_bootstrap132 ()); + } + + private static MethodHandle INDY_call132; + private static MethodHandle INDY_call132 () throws Throwable { + if (INDY_call132 != null) return INDY_call132; + CallSite cs = (CallSite) MH_bootstrap132 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap132 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper132 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call132 ().invokeExact(o1, o2, o3); } + + static Object bootstrap132 (Object l, Object n, Object t) throws Throwable { return _mh[ 132 ].invokeExact(l, n, t); } + + // 133 + private static MethodType MT_bootstrap133 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap133 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap133", MT_bootstrap133 ()); + } + + private static MethodHandle INDY_call133; + private static MethodHandle INDY_call133 () throws Throwable { + if (INDY_call133 != null) return INDY_call133; + CallSite cs = (CallSite) MH_bootstrap133 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap133 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper133 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call133 ().invokeExact(o1, o2, o3); } + + static Object bootstrap133 (Object l, Object n, Object t) throws Throwable { return _mh[ 133 ].invokeExact(l, n, t); } + + // 134 + private static MethodType MT_bootstrap134 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap134 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap134", MT_bootstrap134 ()); + } + + private static MethodHandle INDY_call134; + private static MethodHandle INDY_call134 () throws Throwable { + if (INDY_call134 != null) return INDY_call134; + CallSite cs = (CallSite) MH_bootstrap134 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap134 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper134 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call134 ().invokeExact(o1, o2, o3); } + + static Object bootstrap134 (Object l, Object n, Object t) throws Throwable { return _mh[ 134 ].invokeExact(l, n, t); } + + // 135 + private static MethodType MT_bootstrap135 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap135 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap135", MT_bootstrap135 ()); + } + + private static MethodHandle INDY_call135; + private static MethodHandle INDY_call135 () throws Throwable { + if (INDY_call135 != null) return INDY_call135; + CallSite cs = (CallSite) MH_bootstrap135 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap135 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper135 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call135 ().invokeExact(o1, o2, o3); } + + static Object bootstrap135 (Object l, Object n, Object t) throws Throwable { return _mh[ 135 ].invokeExact(l, n, t); } + + // 136 + private static MethodType MT_bootstrap136 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap136 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap136", MT_bootstrap136 ()); + } + + private static MethodHandle INDY_call136; + private static MethodHandle INDY_call136 () throws Throwable { + if (INDY_call136 != null) return INDY_call136; + CallSite cs = (CallSite) MH_bootstrap136 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap136 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper136 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call136 ().invokeExact(o1, o2, o3); } + + static Object bootstrap136 (Object l, Object n, Object t) throws Throwable { return _mh[ 136 ].invokeExact(l, n, t); } + + // 137 + private static MethodType MT_bootstrap137 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap137 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap137", MT_bootstrap137 ()); + } + + private static MethodHandle INDY_call137; + private static MethodHandle INDY_call137 () throws Throwable { + if (INDY_call137 != null) return INDY_call137; + CallSite cs = (CallSite) MH_bootstrap137 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap137 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper137 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call137 ().invokeExact(o1, o2, o3); } + + static Object bootstrap137 (Object l, Object n, Object t) throws Throwable { return _mh[ 137 ].invokeExact(l, n, t); } + + // 138 + private static MethodType MT_bootstrap138 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap138 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap138", MT_bootstrap138 ()); + } + + private static MethodHandle INDY_call138; + private static MethodHandle INDY_call138 () throws Throwable { + if (INDY_call138 != null) return INDY_call138; + CallSite cs = (CallSite) MH_bootstrap138 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap138 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper138 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call138 ().invokeExact(o1, o2, o3); } + + static Object bootstrap138 (Object l, Object n, Object t) throws Throwable { return _mh[ 138 ].invokeExact(l, n, t); } + + // 139 + private static MethodType MT_bootstrap139 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap139 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap139", MT_bootstrap139 ()); + } + + private static MethodHandle INDY_call139; + private static MethodHandle INDY_call139 () throws Throwable { + if (INDY_call139 != null) return INDY_call139; + CallSite cs = (CallSite) MH_bootstrap139 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap139 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper139 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call139 ().invokeExact(o1, o2, o3); } + + static Object bootstrap139 (Object l, Object n, Object t) throws Throwable { return _mh[ 139 ].invokeExact(l, n, t); } + + // 140 + private static MethodType MT_bootstrap140 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap140 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap140", MT_bootstrap140 ()); + } + + private static MethodHandle INDY_call140; + private static MethodHandle INDY_call140 () throws Throwable { + if (INDY_call140 != null) return INDY_call140; + CallSite cs = (CallSite) MH_bootstrap140 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap140 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper140 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call140 ().invokeExact(o1, o2, o3); } + + static Object bootstrap140 (Object l, Object n, Object t) throws Throwable { return _mh[ 140 ].invokeExact(l, n, t); } + + // 141 + private static MethodType MT_bootstrap141 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap141 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap141", MT_bootstrap141 ()); + } + + private static MethodHandle INDY_call141; + private static MethodHandle INDY_call141 () throws Throwable { + if (INDY_call141 != null) return INDY_call141; + CallSite cs = (CallSite) MH_bootstrap141 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap141 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper141 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call141 ().invokeExact(o1, o2, o3); } + + static Object bootstrap141 (Object l, Object n, Object t) throws Throwable { return _mh[ 141 ].invokeExact(l, n, t); } + + // 142 + private static MethodType MT_bootstrap142 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap142 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap142", MT_bootstrap142 ()); + } + + private static MethodHandle INDY_call142; + private static MethodHandle INDY_call142 () throws Throwable { + if (INDY_call142 != null) return INDY_call142; + CallSite cs = (CallSite) MH_bootstrap142 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap142 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper142 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call142 ().invokeExact(o1, o2, o3); } + + static Object bootstrap142 (Object l, Object n, Object t) throws Throwable { return _mh[ 142 ].invokeExact(l, n, t); } + + // 143 + private static MethodType MT_bootstrap143 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap143 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap143", MT_bootstrap143 ()); + } + + private static MethodHandle INDY_call143; + private static MethodHandle INDY_call143 () throws Throwable { + if (INDY_call143 != null) return INDY_call143; + CallSite cs = (CallSite) MH_bootstrap143 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap143 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper143 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call143 ().invokeExact(o1, o2, o3); } + + static Object bootstrap143 (Object l, Object n, Object t) throws Throwable { return _mh[ 143 ].invokeExact(l, n, t); } + + // 144 + private static MethodType MT_bootstrap144 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap144 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap144", MT_bootstrap144 ()); + } + + private static MethodHandle INDY_call144; + private static MethodHandle INDY_call144 () throws Throwable { + if (INDY_call144 != null) return INDY_call144; + CallSite cs = (CallSite) MH_bootstrap144 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap144 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper144 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call144 ().invokeExact(o1, o2, o3); } + + static Object bootstrap144 (Object l, Object n, Object t) throws Throwable { return _mh[ 144 ].invokeExact(l, n, t); } + + // 145 + private static MethodType MT_bootstrap145 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap145 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap145", MT_bootstrap145 ()); + } + + private static MethodHandle INDY_call145; + private static MethodHandle INDY_call145 () throws Throwable { + if (INDY_call145 != null) return INDY_call145; + CallSite cs = (CallSite) MH_bootstrap145 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap145 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper145 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call145 ().invokeExact(o1, o2, o3); } + + static Object bootstrap145 (Object l, Object n, Object t) throws Throwable { return _mh[ 145 ].invokeExact(l, n, t); } + + // 146 + private static MethodType MT_bootstrap146 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap146 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap146", MT_bootstrap146 ()); + } + + private static MethodHandle INDY_call146; + private static MethodHandle INDY_call146 () throws Throwable { + if (INDY_call146 != null) return INDY_call146; + CallSite cs = (CallSite) MH_bootstrap146 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap146 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper146 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call146 ().invokeExact(o1, o2, o3); } + + static Object bootstrap146 (Object l, Object n, Object t) throws Throwable { return _mh[ 146 ].invokeExact(l, n, t); } + + // 147 + private static MethodType MT_bootstrap147 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap147 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap147", MT_bootstrap147 ()); + } + + private static MethodHandle INDY_call147; + private static MethodHandle INDY_call147 () throws Throwable { + if (INDY_call147 != null) return INDY_call147; + CallSite cs = (CallSite) MH_bootstrap147 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap147 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper147 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call147 ().invokeExact(o1, o2, o3); } + + static Object bootstrap147 (Object l, Object n, Object t) throws Throwable { return _mh[ 147 ].invokeExact(l, n, t); } + + // 148 + private static MethodType MT_bootstrap148 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap148 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap148", MT_bootstrap148 ()); + } + + private static MethodHandle INDY_call148; + private static MethodHandle INDY_call148 () throws Throwable { + if (INDY_call148 != null) return INDY_call148; + CallSite cs = (CallSite) MH_bootstrap148 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap148 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper148 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call148 ().invokeExact(o1, o2, o3); } + + static Object bootstrap148 (Object l, Object n, Object t) throws Throwable { return _mh[ 148 ].invokeExact(l, n, t); } + + // 149 + private static MethodType MT_bootstrap149 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap149 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap149", MT_bootstrap149 ()); + } + + private static MethodHandle INDY_call149; + private static MethodHandle INDY_call149 () throws Throwable { + if (INDY_call149 != null) return INDY_call149; + CallSite cs = (CallSite) MH_bootstrap149 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap149 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper149 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call149 ().invokeExact(o1, o2, o3); } + + static Object bootstrap149 (Object l, Object n, Object t) throws Throwable { return _mh[ 149 ].invokeExact(l, n, t); } + + // 150 + private static MethodType MT_bootstrap150 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap150 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap150", MT_bootstrap150 ()); + } + + private static MethodHandle INDY_call150; + private static MethodHandle INDY_call150 () throws Throwable { + if (INDY_call150 != null) return INDY_call150; + CallSite cs = (CallSite) MH_bootstrap150 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap150 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper150 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call150 ().invokeExact(o1, o2, o3); } + + static Object bootstrap150 (Object l, Object n, Object t) throws Throwable { return _mh[ 150 ].invokeExact(l, n, t); } + + // 151 + private static MethodType MT_bootstrap151 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap151 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap151", MT_bootstrap151 ()); + } + + private static MethodHandle INDY_call151; + private static MethodHandle INDY_call151 () throws Throwable { + if (INDY_call151 != null) return INDY_call151; + CallSite cs = (CallSite) MH_bootstrap151 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap151 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper151 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call151 ().invokeExact(o1, o2, o3); } + + static Object bootstrap151 (Object l, Object n, Object t) throws Throwable { return _mh[ 151 ].invokeExact(l, n, t); } + + // 152 + private static MethodType MT_bootstrap152 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap152 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap152", MT_bootstrap152 ()); + } + + private static MethodHandle INDY_call152; + private static MethodHandle INDY_call152 () throws Throwable { + if (INDY_call152 != null) return INDY_call152; + CallSite cs = (CallSite) MH_bootstrap152 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap152 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper152 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call152 ().invokeExact(o1, o2, o3); } + + static Object bootstrap152 (Object l, Object n, Object t) throws Throwable { return _mh[ 152 ].invokeExact(l, n, t); } + + // 153 + private static MethodType MT_bootstrap153 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap153 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap153", MT_bootstrap153 ()); + } + + private static MethodHandle INDY_call153; + private static MethodHandle INDY_call153 () throws Throwable { + if (INDY_call153 != null) return INDY_call153; + CallSite cs = (CallSite) MH_bootstrap153 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap153 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper153 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call153 ().invokeExact(o1, o2, o3); } + + static Object bootstrap153 (Object l, Object n, Object t) throws Throwable { return _mh[ 153 ].invokeExact(l, n, t); } + + // 154 + private static MethodType MT_bootstrap154 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap154 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap154", MT_bootstrap154 ()); + } + + private static MethodHandle INDY_call154; + private static MethodHandle INDY_call154 () throws Throwable { + if (INDY_call154 != null) return INDY_call154; + CallSite cs = (CallSite) MH_bootstrap154 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap154 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper154 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call154 ().invokeExact(o1, o2, o3); } + + static Object bootstrap154 (Object l, Object n, Object t) throws Throwable { return _mh[ 154 ].invokeExact(l, n, t); } + + // 155 + private static MethodType MT_bootstrap155 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap155 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap155", MT_bootstrap155 ()); + } + + private static MethodHandle INDY_call155; + private static MethodHandle INDY_call155 () throws Throwable { + if (INDY_call155 != null) return INDY_call155; + CallSite cs = (CallSite) MH_bootstrap155 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap155 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper155 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call155 ().invokeExact(o1, o2, o3); } + + static Object bootstrap155 (Object l, Object n, Object t) throws Throwable { return _mh[ 155 ].invokeExact(l, n, t); } + + // 156 + private static MethodType MT_bootstrap156 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap156 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap156", MT_bootstrap156 ()); + } + + private static MethodHandle INDY_call156; + private static MethodHandle INDY_call156 () throws Throwable { + if (INDY_call156 != null) return INDY_call156; + CallSite cs = (CallSite) MH_bootstrap156 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap156 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper156 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call156 ().invokeExact(o1, o2, o3); } + + static Object bootstrap156 (Object l, Object n, Object t) throws Throwable { return _mh[ 156 ].invokeExact(l, n, t); } + + // 157 + private static MethodType MT_bootstrap157 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap157 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap157", MT_bootstrap157 ()); + } + + private static MethodHandle INDY_call157; + private static MethodHandle INDY_call157 () throws Throwable { + if (INDY_call157 != null) return INDY_call157; + CallSite cs = (CallSite) MH_bootstrap157 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap157 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper157 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call157 ().invokeExact(o1, o2, o3); } + + static Object bootstrap157 (Object l, Object n, Object t) throws Throwable { return _mh[ 157 ].invokeExact(l, n, t); } + + // 158 + private static MethodType MT_bootstrap158 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap158 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap158", MT_bootstrap158 ()); + } + + private static MethodHandle INDY_call158; + private static MethodHandle INDY_call158 () throws Throwable { + if (INDY_call158 != null) return INDY_call158; + CallSite cs = (CallSite) MH_bootstrap158 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap158 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper158 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call158 ().invokeExact(o1, o2, o3); } + + static Object bootstrap158 (Object l, Object n, Object t) throws Throwable { return _mh[ 158 ].invokeExact(l, n, t); } + + // 159 + private static MethodType MT_bootstrap159 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap159 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap159", MT_bootstrap159 ()); + } + + private static MethodHandle INDY_call159; + private static MethodHandle INDY_call159 () throws Throwable { + if (INDY_call159 != null) return INDY_call159; + CallSite cs = (CallSite) MH_bootstrap159 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap159 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper159 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call159 ().invokeExact(o1, o2, o3); } + + static Object bootstrap159 (Object l, Object n, Object t) throws Throwable { return _mh[ 159 ].invokeExact(l, n, t); } + + // 160 + private static MethodType MT_bootstrap160 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap160 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap160", MT_bootstrap160 ()); + } + + private static MethodHandle INDY_call160; + private static MethodHandle INDY_call160 () throws Throwable { + if (INDY_call160 != null) return INDY_call160; + CallSite cs = (CallSite) MH_bootstrap160 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap160 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper160 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call160 ().invokeExact(o1, o2, o3); } + + static Object bootstrap160 (Object l, Object n, Object t) throws Throwable { return _mh[ 160 ].invokeExact(l, n, t); } + + // 161 + private static MethodType MT_bootstrap161 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap161 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap161", MT_bootstrap161 ()); + } + + private static MethodHandle INDY_call161; + private static MethodHandle INDY_call161 () throws Throwable { + if (INDY_call161 != null) return INDY_call161; + CallSite cs = (CallSite) MH_bootstrap161 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap161 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper161 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call161 ().invokeExact(o1, o2, o3); } + + static Object bootstrap161 (Object l, Object n, Object t) throws Throwable { return _mh[ 161 ].invokeExact(l, n, t); } + + // 162 + private static MethodType MT_bootstrap162 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap162 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap162", MT_bootstrap162 ()); + } + + private static MethodHandle INDY_call162; + private static MethodHandle INDY_call162 () throws Throwable { + if (INDY_call162 != null) return INDY_call162; + CallSite cs = (CallSite) MH_bootstrap162 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap162 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper162 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call162 ().invokeExact(o1, o2, o3); } + + static Object bootstrap162 (Object l, Object n, Object t) throws Throwable { return _mh[ 162 ].invokeExact(l, n, t); } + + // 163 + private static MethodType MT_bootstrap163 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap163 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap163", MT_bootstrap163 ()); + } + + private static MethodHandle INDY_call163; + private static MethodHandle INDY_call163 () throws Throwable { + if (INDY_call163 != null) return INDY_call163; + CallSite cs = (CallSite) MH_bootstrap163 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap163 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper163 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call163 ().invokeExact(o1, o2, o3); } + + static Object bootstrap163 (Object l, Object n, Object t) throws Throwable { return _mh[ 163 ].invokeExact(l, n, t); } + + // 164 + private static MethodType MT_bootstrap164 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap164 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap164", MT_bootstrap164 ()); + } + + private static MethodHandle INDY_call164; + private static MethodHandle INDY_call164 () throws Throwable { + if (INDY_call164 != null) return INDY_call164; + CallSite cs = (CallSite) MH_bootstrap164 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap164 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper164 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call164 ().invokeExact(o1, o2, o3); } + + static Object bootstrap164 (Object l, Object n, Object t) throws Throwable { return _mh[ 164 ].invokeExact(l, n, t); } + + // 165 + private static MethodType MT_bootstrap165 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap165 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap165", MT_bootstrap165 ()); + } + + private static MethodHandle INDY_call165; + private static MethodHandle INDY_call165 () throws Throwable { + if (INDY_call165 != null) return INDY_call165; + CallSite cs = (CallSite) MH_bootstrap165 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap165 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper165 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call165 ().invokeExact(o1, o2, o3); } + + static Object bootstrap165 (Object l, Object n, Object t) throws Throwable { return _mh[ 165 ].invokeExact(l, n, t); } + + // 166 + private static MethodType MT_bootstrap166 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap166 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap166", MT_bootstrap166 ()); + } + + private static MethodHandle INDY_call166; + private static MethodHandle INDY_call166 () throws Throwable { + if (INDY_call166 != null) return INDY_call166; + CallSite cs = (CallSite) MH_bootstrap166 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap166 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper166 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call166 ().invokeExact(o1, o2, o3); } + + static Object bootstrap166 (Object l, Object n, Object t) throws Throwable { return _mh[ 166 ].invokeExact(l, n, t); } + + // 167 + private static MethodType MT_bootstrap167 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap167 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap167", MT_bootstrap167 ()); + } + + private static MethodHandle INDY_call167; + private static MethodHandle INDY_call167 () throws Throwable { + if (INDY_call167 != null) return INDY_call167; + CallSite cs = (CallSite) MH_bootstrap167 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap167 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper167 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call167 ().invokeExact(o1, o2, o3); } + + static Object bootstrap167 (Object l, Object n, Object t) throws Throwable { return _mh[ 167 ].invokeExact(l, n, t); } + + // 168 + private static MethodType MT_bootstrap168 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap168 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap168", MT_bootstrap168 ()); + } + + private static MethodHandle INDY_call168; + private static MethodHandle INDY_call168 () throws Throwable { + if (INDY_call168 != null) return INDY_call168; + CallSite cs = (CallSite) MH_bootstrap168 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap168 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper168 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call168 ().invokeExact(o1, o2, o3); } + + static Object bootstrap168 (Object l, Object n, Object t) throws Throwable { return _mh[ 168 ].invokeExact(l, n, t); } + + // 169 + private static MethodType MT_bootstrap169 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap169 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap169", MT_bootstrap169 ()); + } + + private static MethodHandle INDY_call169; + private static MethodHandle INDY_call169 () throws Throwable { + if (INDY_call169 != null) return INDY_call169; + CallSite cs = (CallSite) MH_bootstrap169 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap169 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper169 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call169 ().invokeExact(o1, o2, o3); } + + static Object bootstrap169 (Object l, Object n, Object t) throws Throwable { return _mh[ 169 ].invokeExact(l, n, t); } + + // 170 + private static MethodType MT_bootstrap170 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap170 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap170", MT_bootstrap170 ()); + } + + private static MethodHandle INDY_call170; + private static MethodHandle INDY_call170 () throws Throwable { + if (INDY_call170 != null) return INDY_call170; + CallSite cs = (CallSite) MH_bootstrap170 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap170 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper170 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call170 ().invokeExact(o1, o2, o3); } + + static Object bootstrap170 (Object l, Object n, Object t) throws Throwable { return _mh[ 170 ].invokeExact(l, n, t); } + + // 171 + private static MethodType MT_bootstrap171 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap171 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap171", MT_bootstrap171 ()); + } + + private static MethodHandle INDY_call171; + private static MethodHandle INDY_call171 () throws Throwable { + if (INDY_call171 != null) return INDY_call171; + CallSite cs = (CallSite) MH_bootstrap171 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap171 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper171 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call171 ().invokeExact(o1, o2, o3); } + + static Object bootstrap171 (Object l, Object n, Object t) throws Throwable { return _mh[ 171 ].invokeExact(l, n, t); } + + // 172 + private static MethodType MT_bootstrap172 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap172 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap172", MT_bootstrap172 ()); + } + + private static MethodHandle INDY_call172; + private static MethodHandle INDY_call172 () throws Throwable { + if (INDY_call172 != null) return INDY_call172; + CallSite cs = (CallSite) MH_bootstrap172 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap172 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper172 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call172 ().invokeExact(o1, o2, o3); } + + static Object bootstrap172 (Object l, Object n, Object t) throws Throwable { return _mh[ 172 ].invokeExact(l, n, t); } + + // 173 + private static MethodType MT_bootstrap173 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap173 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap173", MT_bootstrap173 ()); + } + + private static MethodHandle INDY_call173; + private static MethodHandle INDY_call173 () throws Throwable { + if (INDY_call173 != null) return INDY_call173; + CallSite cs = (CallSite) MH_bootstrap173 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap173 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper173 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call173 ().invokeExact(o1, o2, o3); } + + static Object bootstrap173 (Object l, Object n, Object t) throws Throwable { return _mh[ 173 ].invokeExact(l, n, t); } + + // 174 + private static MethodType MT_bootstrap174 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap174 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap174", MT_bootstrap174 ()); + } + + private static MethodHandle INDY_call174; + private static MethodHandle INDY_call174 () throws Throwable { + if (INDY_call174 != null) return INDY_call174; + CallSite cs = (CallSite) MH_bootstrap174 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap174 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper174 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call174 ().invokeExact(o1, o2, o3); } + + static Object bootstrap174 (Object l, Object n, Object t) throws Throwable { return _mh[ 174 ].invokeExact(l, n, t); } + + // 175 + private static MethodType MT_bootstrap175 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap175 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap175", MT_bootstrap175 ()); + } + + private static MethodHandle INDY_call175; + private static MethodHandle INDY_call175 () throws Throwable { + if (INDY_call175 != null) return INDY_call175; + CallSite cs = (CallSite) MH_bootstrap175 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap175 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper175 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call175 ().invokeExact(o1, o2, o3); } + + static Object bootstrap175 (Object l, Object n, Object t) throws Throwable { return _mh[ 175 ].invokeExact(l, n, t); } + + // 176 + private static MethodType MT_bootstrap176 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap176 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap176", MT_bootstrap176 ()); + } + + private static MethodHandle INDY_call176; + private static MethodHandle INDY_call176 () throws Throwable { + if (INDY_call176 != null) return INDY_call176; + CallSite cs = (CallSite) MH_bootstrap176 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap176 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper176 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call176 ().invokeExact(o1, o2, o3); } + + static Object bootstrap176 (Object l, Object n, Object t) throws Throwable { return _mh[ 176 ].invokeExact(l, n, t); } + + // 177 + private static MethodType MT_bootstrap177 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap177 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap177", MT_bootstrap177 ()); + } + + private static MethodHandle INDY_call177; + private static MethodHandle INDY_call177 () throws Throwable { + if (INDY_call177 != null) return INDY_call177; + CallSite cs = (CallSite) MH_bootstrap177 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap177 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper177 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call177 ().invokeExact(o1, o2, o3); } + + static Object bootstrap177 (Object l, Object n, Object t) throws Throwable { return _mh[ 177 ].invokeExact(l, n, t); } + + // 178 + private static MethodType MT_bootstrap178 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap178 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap178", MT_bootstrap178 ()); + } + + private static MethodHandle INDY_call178; + private static MethodHandle INDY_call178 () throws Throwable { + if (INDY_call178 != null) return INDY_call178; + CallSite cs = (CallSite) MH_bootstrap178 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap178 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper178 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call178 ().invokeExact(o1, o2, o3); } + + static Object bootstrap178 (Object l, Object n, Object t) throws Throwable { return _mh[ 178 ].invokeExact(l, n, t); } + + // 179 + private static MethodType MT_bootstrap179 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap179 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap179", MT_bootstrap179 ()); + } + + private static MethodHandle INDY_call179; + private static MethodHandle INDY_call179 () throws Throwable { + if (INDY_call179 != null) return INDY_call179; + CallSite cs = (CallSite) MH_bootstrap179 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap179 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper179 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call179 ().invokeExact(o1, o2, o3); } + + static Object bootstrap179 (Object l, Object n, Object t) throws Throwable { return _mh[ 179 ].invokeExact(l, n, t); } + + // 180 + private static MethodType MT_bootstrap180 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap180 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap180", MT_bootstrap180 ()); + } + + private static MethodHandle INDY_call180; + private static MethodHandle INDY_call180 () throws Throwable { + if (INDY_call180 != null) return INDY_call180; + CallSite cs = (CallSite) MH_bootstrap180 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap180 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper180 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call180 ().invokeExact(o1, o2, o3); } + + static Object bootstrap180 (Object l, Object n, Object t) throws Throwable { return _mh[ 180 ].invokeExact(l, n, t); } + + // 181 + private static MethodType MT_bootstrap181 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap181 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap181", MT_bootstrap181 ()); + } + + private static MethodHandle INDY_call181; + private static MethodHandle INDY_call181 () throws Throwable { + if (INDY_call181 != null) return INDY_call181; + CallSite cs = (CallSite) MH_bootstrap181 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap181 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper181 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call181 ().invokeExact(o1, o2, o3); } + + static Object bootstrap181 (Object l, Object n, Object t) throws Throwable { return _mh[ 181 ].invokeExact(l, n, t); } + + // 182 + private static MethodType MT_bootstrap182 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap182 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap182", MT_bootstrap182 ()); + } + + private static MethodHandle INDY_call182; + private static MethodHandle INDY_call182 () throws Throwable { + if (INDY_call182 != null) return INDY_call182; + CallSite cs = (CallSite) MH_bootstrap182 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap182 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper182 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call182 ().invokeExact(o1, o2, o3); } + + static Object bootstrap182 (Object l, Object n, Object t) throws Throwable { return _mh[ 182 ].invokeExact(l, n, t); } + + // 183 + private static MethodType MT_bootstrap183 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap183 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap183", MT_bootstrap183 ()); + } + + private static MethodHandle INDY_call183; + private static MethodHandle INDY_call183 () throws Throwable { + if (INDY_call183 != null) return INDY_call183; + CallSite cs = (CallSite) MH_bootstrap183 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap183 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper183 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call183 ().invokeExact(o1, o2, o3); } + + static Object bootstrap183 (Object l, Object n, Object t) throws Throwable { return _mh[ 183 ].invokeExact(l, n, t); } + + // 184 + private static MethodType MT_bootstrap184 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap184 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap184", MT_bootstrap184 ()); + } + + private static MethodHandle INDY_call184; + private static MethodHandle INDY_call184 () throws Throwable { + if (INDY_call184 != null) return INDY_call184; + CallSite cs = (CallSite) MH_bootstrap184 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap184 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper184 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call184 ().invokeExact(o1, o2, o3); } + + static Object bootstrap184 (Object l, Object n, Object t) throws Throwable { return _mh[ 184 ].invokeExact(l, n, t); } + + // 185 + private static MethodType MT_bootstrap185 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap185 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap185", MT_bootstrap185 ()); + } + + private static MethodHandle INDY_call185; + private static MethodHandle INDY_call185 () throws Throwable { + if (INDY_call185 != null) return INDY_call185; + CallSite cs = (CallSite) MH_bootstrap185 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap185 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper185 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call185 ().invokeExact(o1, o2, o3); } + + static Object bootstrap185 (Object l, Object n, Object t) throws Throwable { return _mh[ 185 ].invokeExact(l, n, t); } + + // 186 + private static MethodType MT_bootstrap186 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap186 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap186", MT_bootstrap186 ()); + } + + private static MethodHandle INDY_call186; + private static MethodHandle INDY_call186 () throws Throwable { + if (INDY_call186 != null) return INDY_call186; + CallSite cs = (CallSite) MH_bootstrap186 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap186 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper186 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call186 ().invokeExact(o1, o2, o3); } + + static Object bootstrap186 (Object l, Object n, Object t) throws Throwable { return _mh[ 186 ].invokeExact(l, n, t); } + + // 187 + private static MethodType MT_bootstrap187 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap187 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap187", MT_bootstrap187 ()); + } + + private static MethodHandle INDY_call187; + private static MethodHandle INDY_call187 () throws Throwable { + if (INDY_call187 != null) return INDY_call187; + CallSite cs = (CallSite) MH_bootstrap187 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap187 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper187 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call187 ().invokeExact(o1, o2, o3); } + + static Object bootstrap187 (Object l, Object n, Object t) throws Throwable { return _mh[ 187 ].invokeExact(l, n, t); } + + // 188 + private static MethodType MT_bootstrap188 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap188 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap188", MT_bootstrap188 ()); + } + + private static MethodHandle INDY_call188; + private static MethodHandle INDY_call188 () throws Throwable { + if (INDY_call188 != null) return INDY_call188; + CallSite cs = (CallSite) MH_bootstrap188 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap188 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper188 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call188 ().invokeExact(o1, o2, o3); } + + static Object bootstrap188 (Object l, Object n, Object t) throws Throwable { return _mh[ 188 ].invokeExact(l, n, t); } + + // 189 + private static MethodType MT_bootstrap189 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap189 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap189", MT_bootstrap189 ()); + } + + private static MethodHandle INDY_call189; + private static MethodHandle INDY_call189 () throws Throwable { + if (INDY_call189 != null) return INDY_call189; + CallSite cs = (CallSite) MH_bootstrap189 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap189 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper189 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call189 ().invokeExact(o1, o2, o3); } + + static Object bootstrap189 (Object l, Object n, Object t) throws Throwable { return _mh[ 189 ].invokeExact(l, n, t); } + + // 190 + private static MethodType MT_bootstrap190 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap190 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap190", MT_bootstrap190 ()); + } + + private static MethodHandle INDY_call190; + private static MethodHandle INDY_call190 () throws Throwable { + if (INDY_call190 != null) return INDY_call190; + CallSite cs = (CallSite) MH_bootstrap190 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap190 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper190 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call190 ().invokeExact(o1, o2, o3); } + + static Object bootstrap190 (Object l, Object n, Object t) throws Throwable { return _mh[ 190 ].invokeExact(l, n, t); } + + // 191 + private static MethodType MT_bootstrap191 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap191 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap191", MT_bootstrap191 ()); + } + + private static MethodHandle INDY_call191; + private static MethodHandle INDY_call191 () throws Throwable { + if (INDY_call191 != null) return INDY_call191; + CallSite cs = (CallSite) MH_bootstrap191 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap191 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper191 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call191 ().invokeExact(o1, o2, o3); } + + static Object bootstrap191 (Object l, Object n, Object t) throws Throwable { return _mh[ 191 ].invokeExact(l, n, t); } + + // 192 + private static MethodType MT_bootstrap192 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap192 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap192", MT_bootstrap192 ()); + } + + private static MethodHandle INDY_call192; + private static MethodHandle INDY_call192 () throws Throwable { + if (INDY_call192 != null) return INDY_call192; + CallSite cs = (CallSite) MH_bootstrap192 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap192 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper192 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call192 ().invokeExact(o1, o2, o3); } + + static Object bootstrap192 (Object l, Object n, Object t) throws Throwable { return _mh[ 192 ].invokeExact(l, n, t); } + + // 193 + private static MethodType MT_bootstrap193 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap193 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap193", MT_bootstrap193 ()); + } + + private static MethodHandle INDY_call193; + private static MethodHandle INDY_call193 () throws Throwable { + if (INDY_call193 != null) return INDY_call193; + CallSite cs = (CallSite) MH_bootstrap193 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap193 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper193 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call193 ().invokeExact(o1, o2, o3); } + + static Object bootstrap193 (Object l, Object n, Object t) throws Throwable { return _mh[ 193 ].invokeExact(l, n, t); } + + // 194 + private static MethodType MT_bootstrap194 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap194 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap194", MT_bootstrap194 ()); + } + + private static MethodHandle INDY_call194; + private static MethodHandle INDY_call194 () throws Throwable { + if (INDY_call194 != null) return INDY_call194; + CallSite cs = (CallSite) MH_bootstrap194 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap194 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper194 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call194 ().invokeExact(o1, o2, o3); } + + static Object bootstrap194 (Object l, Object n, Object t) throws Throwable { return _mh[ 194 ].invokeExact(l, n, t); } + + // 195 + private static MethodType MT_bootstrap195 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap195 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap195", MT_bootstrap195 ()); + } + + private static MethodHandle INDY_call195; + private static MethodHandle INDY_call195 () throws Throwable { + if (INDY_call195 != null) return INDY_call195; + CallSite cs = (CallSite) MH_bootstrap195 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap195 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper195 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call195 ().invokeExact(o1, o2, o3); } + + static Object bootstrap195 (Object l, Object n, Object t) throws Throwable { return _mh[ 195 ].invokeExact(l, n, t); } + + // 196 + private static MethodType MT_bootstrap196 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap196 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap196", MT_bootstrap196 ()); + } + + private static MethodHandle INDY_call196; + private static MethodHandle INDY_call196 () throws Throwable { + if (INDY_call196 != null) return INDY_call196; + CallSite cs = (CallSite) MH_bootstrap196 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap196 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper196 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call196 ().invokeExact(o1, o2, o3); } + + static Object bootstrap196 (Object l, Object n, Object t) throws Throwable { return _mh[ 196 ].invokeExact(l, n, t); } + + // 197 + private static MethodType MT_bootstrap197 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap197 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap197", MT_bootstrap197 ()); + } + + private static MethodHandle INDY_call197; + private static MethodHandle INDY_call197 () throws Throwable { + if (INDY_call197 != null) return INDY_call197; + CallSite cs = (CallSite) MH_bootstrap197 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap197 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper197 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call197 ().invokeExact(o1, o2, o3); } + + static Object bootstrap197 (Object l, Object n, Object t) throws Throwable { return _mh[ 197 ].invokeExact(l, n, t); } + + // 198 + private static MethodType MT_bootstrap198 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap198 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap198", MT_bootstrap198 ()); + } + + private static MethodHandle INDY_call198; + private static MethodHandle INDY_call198 () throws Throwable { + if (INDY_call198 != null) return INDY_call198; + CallSite cs = (CallSite) MH_bootstrap198 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap198 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper198 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call198 ().invokeExact(o1, o2, o3); } + + static Object bootstrap198 (Object l, Object n, Object t) throws Throwable { return _mh[ 198 ].invokeExact(l, n, t); } + + // 199 + private static MethodType MT_bootstrap199 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap199 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap199", MT_bootstrap199 ()); + } + + private static MethodHandle INDY_call199; + private static MethodHandle INDY_call199 () throws Throwable { + if (INDY_call199 != null) return INDY_call199; + CallSite cs = (CallSite) MH_bootstrap199 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap199 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper199 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call199 ().invokeExact(o1, o2, o3); } + + static Object bootstrap199 (Object l, Object n, Object t) throws Throwable { return _mh[ 199 ].invokeExact(l, n, t); } + + // 200 + private static MethodType MT_bootstrap200 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap200 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap200", MT_bootstrap200 ()); + } + + private static MethodHandle INDY_call200; + private static MethodHandle INDY_call200 () throws Throwable { + if (INDY_call200 != null) return INDY_call200; + CallSite cs = (CallSite) MH_bootstrap200 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap200 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper200 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call200 ().invokeExact(o1, o2, o3); } + + static Object bootstrap200 (Object l, Object n, Object t) throws Throwable { return _mh[ 200 ].invokeExact(l, n, t); } + + // 201 + private static MethodType MT_bootstrap201 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap201 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap201", MT_bootstrap201 ()); + } + + private static MethodHandle INDY_call201; + private static MethodHandle INDY_call201 () throws Throwable { + if (INDY_call201 != null) return INDY_call201; + CallSite cs = (CallSite) MH_bootstrap201 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap201 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper201 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call201 ().invokeExact(o1, o2, o3); } + + static Object bootstrap201 (Object l, Object n, Object t) throws Throwable { return _mh[ 201 ].invokeExact(l, n, t); } + + // 202 + private static MethodType MT_bootstrap202 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap202 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap202", MT_bootstrap202 ()); + } + + private static MethodHandle INDY_call202; + private static MethodHandle INDY_call202 () throws Throwable { + if (INDY_call202 != null) return INDY_call202; + CallSite cs = (CallSite) MH_bootstrap202 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap202 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper202 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call202 ().invokeExact(o1, o2, o3); } + + static Object bootstrap202 (Object l, Object n, Object t) throws Throwable { return _mh[ 202 ].invokeExact(l, n, t); } + + // 203 + private static MethodType MT_bootstrap203 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap203 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap203", MT_bootstrap203 ()); + } + + private static MethodHandle INDY_call203; + private static MethodHandle INDY_call203 () throws Throwable { + if (INDY_call203 != null) return INDY_call203; + CallSite cs = (CallSite) MH_bootstrap203 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap203 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper203 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call203 ().invokeExact(o1, o2, o3); } + + static Object bootstrap203 (Object l, Object n, Object t) throws Throwable { return _mh[ 203 ].invokeExact(l, n, t); } + + // 204 + private static MethodType MT_bootstrap204 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap204 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap204", MT_bootstrap204 ()); + } + + private static MethodHandle INDY_call204; + private static MethodHandle INDY_call204 () throws Throwable { + if (INDY_call204 != null) return INDY_call204; + CallSite cs = (CallSite) MH_bootstrap204 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap204 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper204 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call204 ().invokeExact(o1, o2, o3); } + + static Object bootstrap204 (Object l, Object n, Object t) throws Throwable { return _mh[ 204 ].invokeExact(l, n, t); } + + // 205 + private static MethodType MT_bootstrap205 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap205 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap205", MT_bootstrap205 ()); + } + + private static MethodHandle INDY_call205; + private static MethodHandle INDY_call205 () throws Throwable { + if (INDY_call205 != null) return INDY_call205; + CallSite cs = (CallSite) MH_bootstrap205 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap205 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper205 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call205 ().invokeExact(o1, o2, o3); } + + static Object bootstrap205 (Object l, Object n, Object t) throws Throwable { return _mh[ 205 ].invokeExact(l, n, t); } + + // 206 + private static MethodType MT_bootstrap206 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap206 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap206", MT_bootstrap206 ()); + } + + private static MethodHandle INDY_call206; + private static MethodHandle INDY_call206 () throws Throwable { + if (INDY_call206 != null) return INDY_call206; + CallSite cs = (CallSite) MH_bootstrap206 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap206 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper206 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call206 ().invokeExact(o1, o2, o3); } + + static Object bootstrap206 (Object l, Object n, Object t) throws Throwable { return _mh[ 206 ].invokeExact(l, n, t); } + + // 207 + private static MethodType MT_bootstrap207 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap207 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap207", MT_bootstrap207 ()); + } + + private static MethodHandle INDY_call207; + private static MethodHandle INDY_call207 () throws Throwable { + if (INDY_call207 != null) return INDY_call207; + CallSite cs = (CallSite) MH_bootstrap207 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap207 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper207 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call207 ().invokeExact(o1, o2, o3); } + + static Object bootstrap207 (Object l, Object n, Object t) throws Throwable { return _mh[ 207 ].invokeExact(l, n, t); } + + // 208 + private static MethodType MT_bootstrap208 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap208 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap208", MT_bootstrap208 ()); + } + + private static MethodHandle INDY_call208; + private static MethodHandle INDY_call208 () throws Throwable { + if (INDY_call208 != null) return INDY_call208; + CallSite cs = (CallSite) MH_bootstrap208 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap208 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper208 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call208 ().invokeExact(o1, o2, o3); } + + static Object bootstrap208 (Object l, Object n, Object t) throws Throwable { return _mh[ 208 ].invokeExact(l, n, t); } + + // 209 + private static MethodType MT_bootstrap209 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap209 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap209", MT_bootstrap209 ()); + } + + private static MethodHandle INDY_call209; + private static MethodHandle INDY_call209 () throws Throwable { + if (INDY_call209 != null) return INDY_call209; + CallSite cs = (CallSite) MH_bootstrap209 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap209 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper209 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call209 ().invokeExact(o1, o2, o3); } + + static Object bootstrap209 (Object l, Object n, Object t) throws Throwable { return _mh[ 209 ].invokeExact(l, n, t); } + + // 210 + private static MethodType MT_bootstrap210 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap210 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap210", MT_bootstrap210 ()); + } + + private static MethodHandle INDY_call210; + private static MethodHandle INDY_call210 () throws Throwable { + if (INDY_call210 != null) return INDY_call210; + CallSite cs = (CallSite) MH_bootstrap210 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap210 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper210 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call210 ().invokeExact(o1, o2, o3); } + + static Object bootstrap210 (Object l, Object n, Object t) throws Throwable { return _mh[ 210 ].invokeExact(l, n, t); } + + // 211 + private static MethodType MT_bootstrap211 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap211 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap211", MT_bootstrap211 ()); + } + + private static MethodHandle INDY_call211; + private static MethodHandle INDY_call211 () throws Throwable { + if (INDY_call211 != null) return INDY_call211; + CallSite cs = (CallSite) MH_bootstrap211 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap211 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper211 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call211 ().invokeExact(o1, o2, o3); } + + static Object bootstrap211 (Object l, Object n, Object t) throws Throwable { return _mh[ 211 ].invokeExact(l, n, t); } + + // 212 + private static MethodType MT_bootstrap212 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap212 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap212", MT_bootstrap212 ()); + } + + private static MethodHandle INDY_call212; + private static MethodHandle INDY_call212 () throws Throwable { + if (INDY_call212 != null) return INDY_call212; + CallSite cs = (CallSite) MH_bootstrap212 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap212 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper212 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call212 ().invokeExact(o1, o2, o3); } + + static Object bootstrap212 (Object l, Object n, Object t) throws Throwable { return _mh[ 212 ].invokeExact(l, n, t); } + + // 213 + private static MethodType MT_bootstrap213 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap213 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap213", MT_bootstrap213 ()); + } + + private static MethodHandle INDY_call213; + private static MethodHandle INDY_call213 () throws Throwable { + if (INDY_call213 != null) return INDY_call213; + CallSite cs = (CallSite) MH_bootstrap213 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap213 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper213 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call213 ().invokeExact(o1, o2, o3); } + + static Object bootstrap213 (Object l, Object n, Object t) throws Throwable { return _mh[ 213 ].invokeExact(l, n, t); } + + // 214 + private static MethodType MT_bootstrap214 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap214 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap214", MT_bootstrap214 ()); + } + + private static MethodHandle INDY_call214; + private static MethodHandle INDY_call214 () throws Throwable { + if (INDY_call214 != null) return INDY_call214; + CallSite cs = (CallSite) MH_bootstrap214 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap214 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper214 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call214 ().invokeExact(o1, o2, o3); } + + static Object bootstrap214 (Object l, Object n, Object t) throws Throwable { return _mh[ 214 ].invokeExact(l, n, t); } + + // 215 + private static MethodType MT_bootstrap215 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap215 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap215", MT_bootstrap215 ()); + } + + private static MethodHandle INDY_call215; + private static MethodHandle INDY_call215 () throws Throwable { + if (INDY_call215 != null) return INDY_call215; + CallSite cs = (CallSite) MH_bootstrap215 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap215 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper215 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call215 ().invokeExact(o1, o2, o3); } + + static Object bootstrap215 (Object l, Object n, Object t) throws Throwable { return _mh[ 215 ].invokeExact(l, n, t); } + + // 216 + private static MethodType MT_bootstrap216 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap216 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap216", MT_bootstrap216 ()); + } + + private static MethodHandle INDY_call216; + private static MethodHandle INDY_call216 () throws Throwable { + if (INDY_call216 != null) return INDY_call216; + CallSite cs = (CallSite) MH_bootstrap216 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap216 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper216 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call216 ().invokeExact(o1, o2, o3); } + + static Object bootstrap216 (Object l, Object n, Object t) throws Throwable { return _mh[ 216 ].invokeExact(l, n, t); } + + // 217 + private static MethodType MT_bootstrap217 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap217 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap217", MT_bootstrap217 ()); + } + + private static MethodHandle INDY_call217; + private static MethodHandle INDY_call217 () throws Throwable { + if (INDY_call217 != null) return INDY_call217; + CallSite cs = (CallSite) MH_bootstrap217 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap217 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper217 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call217 ().invokeExact(o1, o2, o3); } + + static Object bootstrap217 (Object l, Object n, Object t) throws Throwable { return _mh[ 217 ].invokeExact(l, n, t); } + + // 218 + private static MethodType MT_bootstrap218 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap218 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap218", MT_bootstrap218 ()); + } + + private static MethodHandle INDY_call218; + private static MethodHandle INDY_call218 () throws Throwable { + if (INDY_call218 != null) return INDY_call218; + CallSite cs = (CallSite) MH_bootstrap218 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap218 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper218 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call218 ().invokeExact(o1, o2, o3); } + + static Object bootstrap218 (Object l, Object n, Object t) throws Throwable { return _mh[ 218 ].invokeExact(l, n, t); } + + // 219 + private static MethodType MT_bootstrap219 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap219 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap219", MT_bootstrap219 ()); + } + + private static MethodHandle INDY_call219; + private static MethodHandle INDY_call219 () throws Throwable { + if (INDY_call219 != null) return INDY_call219; + CallSite cs = (CallSite) MH_bootstrap219 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap219 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper219 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call219 ().invokeExact(o1, o2, o3); } + + static Object bootstrap219 (Object l, Object n, Object t) throws Throwable { return _mh[ 219 ].invokeExact(l, n, t); } + + // 220 + private static MethodType MT_bootstrap220 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap220 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap220", MT_bootstrap220 ()); + } + + private static MethodHandle INDY_call220; + private static MethodHandle INDY_call220 () throws Throwable { + if (INDY_call220 != null) return INDY_call220; + CallSite cs = (CallSite) MH_bootstrap220 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap220 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper220 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call220 ().invokeExact(o1, o2, o3); } + + static Object bootstrap220 (Object l, Object n, Object t) throws Throwable { return _mh[ 220 ].invokeExact(l, n, t); } + + // 221 + private static MethodType MT_bootstrap221 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap221 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap221", MT_bootstrap221 ()); + } + + private static MethodHandle INDY_call221; + private static MethodHandle INDY_call221 () throws Throwable { + if (INDY_call221 != null) return INDY_call221; + CallSite cs = (CallSite) MH_bootstrap221 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap221 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper221 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call221 ().invokeExact(o1, o2, o3); } + + static Object bootstrap221 (Object l, Object n, Object t) throws Throwable { return _mh[ 221 ].invokeExact(l, n, t); } + + // 222 + private static MethodType MT_bootstrap222 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap222 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap222", MT_bootstrap222 ()); + } + + private static MethodHandle INDY_call222; + private static MethodHandle INDY_call222 () throws Throwable { + if (INDY_call222 != null) return INDY_call222; + CallSite cs = (CallSite) MH_bootstrap222 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap222 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper222 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call222 ().invokeExact(o1, o2, o3); } + + static Object bootstrap222 (Object l, Object n, Object t) throws Throwable { return _mh[ 222 ].invokeExact(l, n, t); } + + // 223 + private static MethodType MT_bootstrap223 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap223 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap223", MT_bootstrap223 ()); + } + + private static MethodHandle INDY_call223; + private static MethodHandle INDY_call223 () throws Throwable { + if (INDY_call223 != null) return INDY_call223; + CallSite cs = (CallSite) MH_bootstrap223 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap223 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper223 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call223 ().invokeExact(o1, o2, o3); } + + static Object bootstrap223 (Object l, Object n, Object t) throws Throwable { return _mh[ 223 ].invokeExact(l, n, t); } + + // 224 + private static MethodType MT_bootstrap224 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap224 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap224", MT_bootstrap224 ()); + } + + private static MethodHandle INDY_call224; + private static MethodHandle INDY_call224 () throws Throwable { + if (INDY_call224 != null) return INDY_call224; + CallSite cs = (CallSite) MH_bootstrap224 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap224 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper224 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call224 ().invokeExact(o1, o2, o3); } + + static Object bootstrap224 (Object l, Object n, Object t) throws Throwable { return _mh[ 224 ].invokeExact(l, n, t); } + + // 225 + private static MethodType MT_bootstrap225 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap225 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap225", MT_bootstrap225 ()); + } + + private static MethodHandle INDY_call225; + private static MethodHandle INDY_call225 () throws Throwable { + if (INDY_call225 != null) return INDY_call225; + CallSite cs = (CallSite) MH_bootstrap225 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap225 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper225 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call225 ().invokeExact(o1, o2, o3); } + + static Object bootstrap225 (Object l, Object n, Object t) throws Throwable { return _mh[ 225 ].invokeExact(l, n, t); } + + // 226 + private static MethodType MT_bootstrap226 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap226 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap226", MT_bootstrap226 ()); + } + + private static MethodHandle INDY_call226; + private static MethodHandle INDY_call226 () throws Throwable { + if (INDY_call226 != null) return INDY_call226; + CallSite cs = (CallSite) MH_bootstrap226 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap226 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper226 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call226 ().invokeExact(o1, o2, o3); } + + static Object bootstrap226 (Object l, Object n, Object t) throws Throwable { return _mh[ 226 ].invokeExact(l, n, t); } + + // 227 + private static MethodType MT_bootstrap227 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap227 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap227", MT_bootstrap227 ()); + } + + private static MethodHandle INDY_call227; + private static MethodHandle INDY_call227 () throws Throwable { + if (INDY_call227 != null) return INDY_call227; + CallSite cs = (CallSite) MH_bootstrap227 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap227 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper227 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call227 ().invokeExact(o1, o2, o3); } + + static Object bootstrap227 (Object l, Object n, Object t) throws Throwable { return _mh[ 227 ].invokeExact(l, n, t); } + + // 228 + private static MethodType MT_bootstrap228 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap228 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap228", MT_bootstrap228 ()); + } + + private static MethodHandle INDY_call228; + private static MethodHandle INDY_call228 () throws Throwable { + if (INDY_call228 != null) return INDY_call228; + CallSite cs = (CallSite) MH_bootstrap228 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap228 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper228 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call228 ().invokeExact(o1, o2, o3); } + + static Object bootstrap228 (Object l, Object n, Object t) throws Throwable { return _mh[ 228 ].invokeExact(l, n, t); } + + // 229 + private static MethodType MT_bootstrap229 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap229 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap229", MT_bootstrap229 ()); + } + + private static MethodHandle INDY_call229; + private static MethodHandle INDY_call229 () throws Throwable { + if (INDY_call229 != null) return INDY_call229; + CallSite cs = (CallSite) MH_bootstrap229 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap229 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper229 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call229 ().invokeExact(o1, o2, o3); } + + static Object bootstrap229 (Object l, Object n, Object t) throws Throwable { return _mh[ 229 ].invokeExact(l, n, t); } + + // 230 + private static MethodType MT_bootstrap230 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap230 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap230", MT_bootstrap230 ()); + } + + private static MethodHandle INDY_call230; + private static MethodHandle INDY_call230 () throws Throwable { + if (INDY_call230 != null) return INDY_call230; + CallSite cs = (CallSite) MH_bootstrap230 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap230 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper230 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call230 ().invokeExact(o1, o2, o3); } + + static Object bootstrap230 (Object l, Object n, Object t) throws Throwable { return _mh[ 230 ].invokeExact(l, n, t); } + + // 231 + private static MethodType MT_bootstrap231 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap231 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap231", MT_bootstrap231 ()); + } + + private static MethodHandle INDY_call231; + private static MethodHandle INDY_call231 () throws Throwable { + if (INDY_call231 != null) return INDY_call231; + CallSite cs = (CallSite) MH_bootstrap231 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap231 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper231 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call231 ().invokeExact(o1, o2, o3); } + + static Object bootstrap231 (Object l, Object n, Object t) throws Throwable { return _mh[ 231 ].invokeExact(l, n, t); } + + // 232 + private static MethodType MT_bootstrap232 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap232 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap232", MT_bootstrap232 ()); + } + + private static MethodHandle INDY_call232; + private static MethodHandle INDY_call232 () throws Throwable { + if (INDY_call232 != null) return INDY_call232; + CallSite cs = (CallSite) MH_bootstrap232 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap232 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper232 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call232 ().invokeExact(o1, o2, o3); } + + static Object bootstrap232 (Object l, Object n, Object t) throws Throwable { return _mh[ 232 ].invokeExact(l, n, t); } + + // 233 + private static MethodType MT_bootstrap233 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap233 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap233", MT_bootstrap233 ()); + } + + private static MethodHandle INDY_call233; + private static MethodHandle INDY_call233 () throws Throwable { + if (INDY_call233 != null) return INDY_call233; + CallSite cs = (CallSite) MH_bootstrap233 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap233 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper233 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call233 ().invokeExact(o1, o2, o3); } + + static Object bootstrap233 (Object l, Object n, Object t) throws Throwable { return _mh[ 233 ].invokeExact(l, n, t); } + + // 234 + private static MethodType MT_bootstrap234 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap234 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap234", MT_bootstrap234 ()); + } + + private static MethodHandle INDY_call234; + private static MethodHandle INDY_call234 () throws Throwable { + if (INDY_call234 != null) return INDY_call234; + CallSite cs = (CallSite) MH_bootstrap234 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap234 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper234 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call234 ().invokeExact(o1, o2, o3); } + + static Object bootstrap234 (Object l, Object n, Object t) throws Throwable { return _mh[ 234 ].invokeExact(l, n, t); } + + // 235 + private static MethodType MT_bootstrap235 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap235 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap235", MT_bootstrap235 ()); + } + + private static MethodHandle INDY_call235; + private static MethodHandle INDY_call235 () throws Throwable { + if (INDY_call235 != null) return INDY_call235; + CallSite cs = (CallSite) MH_bootstrap235 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap235 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper235 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call235 ().invokeExact(o1, o2, o3); } + + static Object bootstrap235 (Object l, Object n, Object t) throws Throwable { return _mh[ 235 ].invokeExact(l, n, t); } + + // 236 + private static MethodType MT_bootstrap236 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap236 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap236", MT_bootstrap236 ()); + } + + private static MethodHandle INDY_call236; + private static MethodHandle INDY_call236 () throws Throwable { + if (INDY_call236 != null) return INDY_call236; + CallSite cs = (CallSite) MH_bootstrap236 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap236 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper236 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call236 ().invokeExact(o1, o2, o3); } + + static Object bootstrap236 (Object l, Object n, Object t) throws Throwable { return _mh[ 236 ].invokeExact(l, n, t); } + + // 237 + private static MethodType MT_bootstrap237 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap237 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap237", MT_bootstrap237 ()); + } + + private static MethodHandle INDY_call237; + private static MethodHandle INDY_call237 () throws Throwable { + if (INDY_call237 != null) return INDY_call237; + CallSite cs = (CallSite) MH_bootstrap237 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap237 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper237 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call237 ().invokeExact(o1, o2, o3); } + + static Object bootstrap237 (Object l, Object n, Object t) throws Throwable { return _mh[ 237 ].invokeExact(l, n, t); } + + // 238 + private static MethodType MT_bootstrap238 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap238 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap238", MT_bootstrap238 ()); + } + + private static MethodHandle INDY_call238; + private static MethodHandle INDY_call238 () throws Throwable { + if (INDY_call238 != null) return INDY_call238; + CallSite cs = (CallSite) MH_bootstrap238 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap238 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper238 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call238 ().invokeExact(o1, o2, o3); } + + static Object bootstrap238 (Object l, Object n, Object t) throws Throwable { return _mh[ 238 ].invokeExact(l, n, t); } + + // 239 + private static MethodType MT_bootstrap239 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap239 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap239", MT_bootstrap239 ()); + } + + private static MethodHandle INDY_call239; + private static MethodHandle INDY_call239 () throws Throwable { + if (INDY_call239 != null) return INDY_call239; + CallSite cs = (CallSite) MH_bootstrap239 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap239 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper239 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call239 ().invokeExact(o1, o2, o3); } + + static Object bootstrap239 (Object l, Object n, Object t) throws Throwable { return _mh[ 239 ].invokeExact(l, n, t); } + + // 240 + private static MethodType MT_bootstrap240 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap240 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap240", MT_bootstrap240 ()); + } + + private static MethodHandle INDY_call240; + private static MethodHandle INDY_call240 () throws Throwable { + if (INDY_call240 != null) return INDY_call240; + CallSite cs = (CallSite) MH_bootstrap240 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap240 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper240 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call240 ().invokeExact(o1, o2, o3); } + + static Object bootstrap240 (Object l, Object n, Object t) throws Throwable { return _mh[ 240 ].invokeExact(l, n, t); } + + // 241 + private static MethodType MT_bootstrap241 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap241 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap241", MT_bootstrap241 ()); + } + + private static MethodHandle INDY_call241; + private static MethodHandle INDY_call241 () throws Throwable { + if (INDY_call241 != null) return INDY_call241; + CallSite cs = (CallSite) MH_bootstrap241 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap241 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper241 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call241 ().invokeExact(o1, o2, o3); } + + static Object bootstrap241 (Object l, Object n, Object t) throws Throwable { return _mh[ 241 ].invokeExact(l, n, t); } + + // 242 + private static MethodType MT_bootstrap242 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap242 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap242", MT_bootstrap242 ()); + } + + private static MethodHandle INDY_call242; + private static MethodHandle INDY_call242 () throws Throwable { + if (INDY_call242 != null) return INDY_call242; + CallSite cs = (CallSite) MH_bootstrap242 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap242 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper242 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call242 ().invokeExact(o1, o2, o3); } + + static Object bootstrap242 (Object l, Object n, Object t) throws Throwable { return _mh[ 242 ].invokeExact(l, n, t); } + + // 243 + private static MethodType MT_bootstrap243 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap243 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap243", MT_bootstrap243 ()); + } + + private static MethodHandle INDY_call243; + private static MethodHandle INDY_call243 () throws Throwable { + if (INDY_call243 != null) return INDY_call243; + CallSite cs = (CallSite) MH_bootstrap243 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap243 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper243 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call243 ().invokeExact(o1, o2, o3); } + + static Object bootstrap243 (Object l, Object n, Object t) throws Throwable { return _mh[ 243 ].invokeExact(l, n, t); } + + // 244 + private static MethodType MT_bootstrap244 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap244 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap244", MT_bootstrap244 ()); + } + + private static MethodHandle INDY_call244; + private static MethodHandle INDY_call244 () throws Throwable { + if (INDY_call244 != null) return INDY_call244; + CallSite cs = (CallSite) MH_bootstrap244 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap244 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper244 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call244 ().invokeExact(o1, o2, o3); } + + static Object bootstrap244 (Object l, Object n, Object t) throws Throwable { return _mh[ 244 ].invokeExact(l, n, t); } + + // 245 + private static MethodType MT_bootstrap245 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap245 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap245", MT_bootstrap245 ()); + } + + private static MethodHandle INDY_call245; + private static MethodHandle INDY_call245 () throws Throwable { + if (INDY_call245 != null) return INDY_call245; + CallSite cs = (CallSite) MH_bootstrap245 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap245 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper245 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call245 ().invokeExact(o1, o2, o3); } + + static Object bootstrap245 (Object l, Object n, Object t) throws Throwable { return _mh[ 245 ].invokeExact(l, n, t); } + + // 246 + private static MethodType MT_bootstrap246 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap246 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap246", MT_bootstrap246 ()); + } + + private static MethodHandle INDY_call246; + private static MethodHandle INDY_call246 () throws Throwable { + if (INDY_call246 != null) return INDY_call246; + CallSite cs = (CallSite) MH_bootstrap246 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap246 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper246 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call246 ().invokeExact(o1, o2, o3); } + + static Object bootstrap246 (Object l, Object n, Object t) throws Throwable { return _mh[ 246 ].invokeExact(l, n, t); } + + // 247 + private static MethodType MT_bootstrap247 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap247 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap247", MT_bootstrap247 ()); + } + + private static MethodHandle INDY_call247; + private static MethodHandle INDY_call247 () throws Throwable { + if (INDY_call247 != null) return INDY_call247; + CallSite cs = (CallSite) MH_bootstrap247 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap247 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper247 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call247 ().invokeExact(o1, o2, o3); } + + static Object bootstrap247 (Object l, Object n, Object t) throws Throwable { return _mh[ 247 ].invokeExact(l, n, t); } + + // 248 + private static MethodType MT_bootstrap248 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap248 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap248", MT_bootstrap248 ()); + } + + private static MethodHandle INDY_call248; + private static MethodHandle INDY_call248 () throws Throwable { + if (INDY_call248 != null) return INDY_call248; + CallSite cs = (CallSite) MH_bootstrap248 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap248 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper248 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call248 ().invokeExact(o1, o2, o3); } + + static Object bootstrap248 (Object l, Object n, Object t) throws Throwable { return _mh[ 248 ].invokeExact(l, n, t); } + + // 249 + private static MethodType MT_bootstrap249 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap249 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap249", MT_bootstrap249 ()); + } + + private static MethodHandle INDY_call249; + private static MethodHandle INDY_call249 () throws Throwable { + if (INDY_call249 != null) return INDY_call249; + CallSite cs = (CallSite) MH_bootstrap249 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap249 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper249 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call249 ().invokeExact(o1, o2, o3); } + + static Object bootstrap249 (Object l, Object n, Object t) throws Throwable { return _mh[ 249 ].invokeExact(l, n, t); } + + // 250 + private static MethodType MT_bootstrap250 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap250 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap250", MT_bootstrap250 ()); + } + + private static MethodHandle INDY_call250; + private static MethodHandle INDY_call250 () throws Throwable { + if (INDY_call250 != null) return INDY_call250; + CallSite cs = (CallSite) MH_bootstrap250 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap250 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper250 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call250 ().invokeExact(o1, o2, o3); } + + static Object bootstrap250 (Object l, Object n, Object t) throws Throwable { return _mh[ 250 ].invokeExact(l, n, t); } + + // 251 + private static MethodType MT_bootstrap251 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap251 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap251", MT_bootstrap251 ()); + } + + private static MethodHandle INDY_call251; + private static MethodHandle INDY_call251 () throws Throwable { + if (INDY_call251 != null) return INDY_call251; + CallSite cs = (CallSite) MH_bootstrap251 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap251 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper251 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call251 ().invokeExact(o1, o2, o3); } + + static Object bootstrap251 (Object l, Object n, Object t) throws Throwable { return _mh[ 251 ].invokeExact(l, n, t); } + + // 252 + private static MethodType MT_bootstrap252 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap252 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap252", MT_bootstrap252 ()); + } + + private static MethodHandle INDY_call252; + private static MethodHandle INDY_call252 () throws Throwable { + if (INDY_call252 != null) return INDY_call252; + CallSite cs = (CallSite) MH_bootstrap252 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap252 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper252 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call252 ().invokeExact(o1, o2, o3); } + + static Object bootstrap252 (Object l, Object n, Object t) throws Throwable { return _mh[ 252 ].invokeExact(l, n, t); } + + // 253 + private static MethodType MT_bootstrap253 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap253 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap253", MT_bootstrap253 ()); + } + + private static MethodHandle INDY_call253; + private static MethodHandle INDY_call253 () throws Throwable { + if (INDY_call253 != null) return INDY_call253; + CallSite cs = (CallSite) MH_bootstrap253 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap253 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper253 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call253 ().invokeExact(o1, o2, o3); } + + static Object bootstrap253 (Object l, Object n, Object t) throws Throwable { return _mh[ 253 ].invokeExact(l, n, t); } + + // 254 + private static MethodType MT_bootstrap254 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap254 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap254", MT_bootstrap254 ()); + } + + private static MethodHandle INDY_call254; + private static MethodHandle INDY_call254 () throws Throwable { + if (INDY_call254 != null) return INDY_call254; + CallSite cs = (CallSite) MH_bootstrap254 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap254 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper254 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call254 ().invokeExact(o1, o2, o3); } + + static Object bootstrap254 (Object l, Object n, Object t) throws Throwable { return _mh[ 254 ].invokeExact(l, n, t); } + + // 255 + private static MethodType MT_bootstrap255 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap255 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap255", MT_bootstrap255 ()); + } + + private static MethodHandle INDY_call255; + private static MethodHandle INDY_call255 () throws Throwable { + if (INDY_call255 != null) return INDY_call255; + CallSite cs = (CallSite) MH_bootstrap255 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap255 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper255 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call255 ().invokeExact(o1, o2, o3); } + + static Object bootstrap255 (Object l, Object n, Object t) throws Throwable { return _mh[ 255 ].invokeExact(l, n, t); } + + // 256 + private static MethodType MT_bootstrap256 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap256 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap256", MT_bootstrap256 ()); + } + + private static MethodHandle INDY_call256; + private static MethodHandle INDY_call256 () throws Throwable { + if (INDY_call256 != null) return INDY_call256; + CallSite cs = (CallSite) MH_bootstrap256 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap256 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper256 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call256 ().invokeExact(o1, o2, o3); } + + static Object bootstrap256 (Object l, Object n, Object t) throws Throwable { return _mh[ 256 ].invokeExact(l, n, t); } + + // 257 + private static MethodType MT_bootstrap257 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap257 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap257", MT_bootstrap257 ()); + } + + private static MethodHandle INDY_call257; + private static MethodHandle INDY_call257 () throws Throwable { + if (INDY_call257 != null) return INDY_call257; + CallSite cs = (CallSite) MH_bootstrap257 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap257 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper257 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call257 ().invokeExact(o1, o2, o3); } + + static Object bootstrap257 (Object l, Object n, Object t) throws Throwable { return _mh[ 257 ].invokeExact(l, n, t); } + + // 258 + private static MethodType MT_bootstrap258 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap258 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap258", MT_bootstrap258 ()); + } + + private static MethodHandle INDY_call258; + private static MethodHandle INDY_call258 () throws Throwable { + if (INDY_call258 != null) return INDY_call258; + CallSite cs = (CallSite) MH_bootstrap258 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap258 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper258 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call258 ().invokeExact(o1, o2, o3); } + + static Object bootstrap258 (Object l, Object n, Object t) throws Throwable { return _mh[ 258 ].invokeExact(l, n, t); } + + // 259 + private static MethodType MT_bootstrap259 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap259 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap259", MT_bootstrap259 ()); + } + + private static MethodHandle INDY_call259; + private static MethodHandle INDY_call259 () throws Throwable { + if (INDY_call259 != null) return INDY_call259; + CallSite cs = (CallSite) MH_bootstrap259 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap259 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper259 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call259 ().invokeExact(o1, o2, o3); } + + static Object bootstrap259 (Object l, Object n, Object t) throws Throwable { return _mh[ 259 ].invokeExact(l, n, t); } + + // 260 + private static MethodType MT_bootstrap260 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap260 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap260", MT_bootstrap260 ()); + } + + private static MethodHandle INDY_call260; + private static MethodHandle INDY_call260 () throws Throwable { + if (INDY_call260 != null) return INDY_call260; + CallSite cs = (CallSite) MH_bootstrap260 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap260 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper260 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call260 ().invokeExact(o1, o2, o3); } + + static Object bootstrap260 (Object l, Object n, Object t) throws Throwable { return _mh[ 260 ].invokeExact(l, n, t); } + + // 261 + private static MethodType MT_bootstrap261 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap261 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap261", MT_bootstrap261 ()); + } + + private static MethodHandle INDY_call261; + private static MethodHandle INDY_call261 () throws Throwable { + if (INDY_call261 != null) return INDY_call261; + CallSite cs = (CallSite) MH_bootstrap261 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap261 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper261 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call261 ().invokeExact(o1, o2, o3); } + + static Object bootstrap261 (Object l, Object n, Object t) throws Throwable { return _mh[ 261 ].invokeExact(l, n, t); } + + // 262 + private static MethodType MT_bootstrap262 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap262 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap262", MT_bootstrap262 ()); + } + + private static MethodHandle INDY_call262; + private static MethodHandle INDY_call262 () throws Throwable { + if (INDY_call262 != null) return INDY_call262; + CallSite cs = (CallSite) MH_bootstrap262 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap262 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper262 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call262 ().invokeExact(o1, o2, o3); } + + static Object bootstrap262 (Object l, Object n, Object t) throws Throwable { return _mh[ 262 ].invokeExact(l, n, t); } + + // 263 + private static MethodType MT_bootstrap263 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap263 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap263", MT_bootstrap263 ()); + } + + private static MethodHandle INDY_call263; + private static MethodHandle INDY_call263 () throws Throwable { + if (INDY_call263 != null) return INDY_call263; + CallSite cs = (CallSite) MH_bootstrap263 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap263 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper263 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call263 ().invokeExact(o1, o2, o3); } + + static Object bootstrap263 (Object l, Object n, Object t) throws Throwable { return _mh[ 263 ].invokeExact(l, n, t); } + + // 264 + private static MethodType MT_bootstrap264 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap264 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap264", MT_bootstrap264 ()); + } + + private static MethodHandle INDY_call264; + private static MethodHandle INDY_call264 () throws Throwable { + if (INDY_call264 != null) return INDY_call264; + CallSite cs = (CallSite) MH_bootstrap264 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap264 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper264 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call264 ().invokeExact(o1, o2, o3); } + + static Object bootstrap264 (Object l, Object n, Object t) throws Throwable { return _mh[ 264 ].invokeExact(l, n, t); } + + // 265 + private static MethodType MT_bootstrap265 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap265 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap265", MT_bootstrap265 ()); + } + + private static MethodHandle INDY_call265; + private static MethodHandle INDY_call265 () throws Throwable { + if (INDY_call265 != null) return INDY_call265; + CallSite cs = (CallSite) MH_bootstrap265 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap265 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper265 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call265 ().invokeExact(o1, o2, o3); } + + static Object bootstrap265 (Object l, Object n, Object t) throws Throwable { return _mh[ 265 ].invokeExact(l, n, t); } + + // 266 + private static MethodType MT_bootstrap266 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap266 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap266", MT_bootstrap266 ()); + } + + private static MethodHandle INDY_call266; + private static MethodHandle INDY_call266 () throws Throwable { + if (INDY_call266 != null) return INDY_call266; + CallSite cs = (CallSite) MH_bootstrap266 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap266 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper266 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call266 ().invokeExact(o1, o2, o3); } + + static Object bootstrap266 (Object l, Object n, Object t) throws Throwable { return _mh[ 266 ].invokeExact(l, n, t); } + + // 267 + private static MethodType MT_bootstrap267 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap267 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap267", MT_bootstrap267 ()); + } + + private static MethodHandle INDY_call267; + private static MethodHandle INDY_call267 () throws Throwable { + if (INDY_call267 != null) return INDY_call267; + CallSite cs = (CallSite) MH_bootstrap267 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap267 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper267 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call267 ().invokeExact(o1, o2, o3); } + + static Object bootstrap267 (Object l, Object n, Object t) throws Throwable { return _mh[ 267 ].invokeExact(l, n, t); } + + // 268 + private static MethodType MT_bootstrap268 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap268 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap268", MT_bootstrap268 ()); + } + + private static MethodHandle INDY_call268; + private static MethodHandle INDY_call268 () throws Throwable { + if (INDY_call268 != null) return INDY_call268; + CallSite cs = (CallSite) MH_bootstrap268 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap268 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper268 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call268 ().invokeExact(o1, o2, o3); } + + static Object bootstrap268 (Object l, Object n, Object t) throws Throwable { return _mh[ 268 ].invokeExact(l, n, t); } + + // 269 + private static MethodType MT_bootstrap269 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap269 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap269", MT_bootstrap269 ()); + } + + private static MethodHandle INDY_call269; + private static MethodHandle INDY_call269 () throws Throwable { + if (INDY_call269 != null) return INDY_call269; + CallSite cs = (CallSite) MH_bootstrap269 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap269 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper269 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call269 ().invokeExact(o1, o2, o3); } + + static Object bootstrap269 (Object l, Object n, Object t) throws Throwable { return _mh[ 269 ].invokeExact(l, n, t); } + + // 270 + private static MethodType MT_bootstrap270 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap270 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap270", MT_bootstrap270 ()); + } + + private static MethodHandle INDY_call270; + private static MethodHandle INDY_call270 () throws Throwable { + if (INDY_call270 != null) return INDY_call270; + CallSite cs = (CallSite) MH_bootstrap270 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap270 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper270 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call270 ().invokeExact(o1, o2, o3); } + + static Object bootstrap270 (Object l, Object n, Object t) throws Throwable { return _mh[ 270 ].invokeExact(l, n, t); } + + // 271 + private static MethodType MT_bootstrap271 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap271 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap271", MT_bootstrap271 ()); + } + + private static MethodHandle INDY_call271; + private static MethodHandle INDY_call271 () throws Throwable { + if (INDY_call271 != null) return INDY_call271; + CallSite cs = (CallSite) MH_bootstrap271 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap271 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper271 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call271 ().invokeExact(o1, o2, o3); } + + static Object bootstrap271 (Object l, Object n, Object t) throws Throwable { return _mh[ 271 ].invokeExact(l, n, t); } + + // 272 + private static MethodType MT_bootstrap272 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap272 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap272", MT_bootstrap272 ()); + } + + private static MethodHandle INDY_call272; + private static MethodHandle INDY_call272 () throws Throwable { + if (INDY_call272 != null) return INDY_call272; + CallSite cs = (CallSite) MH_bootstrap272 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap272 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper272 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call272 ().invokeExact(o1, o2, o3); } + + static Object bootstrap272 (Object l, Object n, Object t) throws Throwable { return _mh[ 272 ].invokeExact(l, n, t); } + + // 273 + private static MethodType MT_bootstrap273 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap273 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap273", MT_bootstrap273 ()); + } + + private static MethodHandle INDY_call273; + private static MethodHandle INDY_call273 () throws Throwable { + if (INDY_call273 != null) return INDY_call273; + CallSite cs = (CallSite) MH_bootstrap273 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap273 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper273 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call273 ().invokeExact(o1, o2, o3); } + + static Object bootstrap273 (Object l, Object n, Object t) throws Throwable { return _mh[ 273 ].invokeExact(l, n, t); } + + // 274 + private static MethodType MT_bootstrap274 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap274 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap274", MT_bootstrap274 ()); + } + + private static MethodHandle INDY_call274; + private static MethodHandle INDY_call274 () throws Throwable { + if (INDY_call274 != null) return INDY_call274; + CallSite cs = (CallSite) MH_bootstrap274 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap274 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper274 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call274 ().invokeExact(o1, o2, o3); } + + static Object bootstrap274 (Object l, Object n, Object t) throws Throwable { return _mh[ 274 ].invokeExact(l, n, t); } + + // 275 + private static MethodType MT_bootstrap275 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap275 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap275", MT_bootstrap275 ()); + } + + private static MethodHandle INDY_call275; + private static MethodHandle INDY_call275 () throws Throwable { + if (INDY_call275 != null) return INDY_call275; + CallSite cs = (CallSite) MH_bootstrap275 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap275 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper275 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call275 ().invokeExact(o1, o2, o3); } + + static Object bootstrap275 (Object l, Object n, Object t) throws Throwable { return _mh[ 275 ].invokeExact(l, n, t); } + + // 276 + private static MethodType MT_bootstrap276 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap276 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap276", MT_bootstrap276 ()); + } + + private static MethodHandle INDY_call276; + private static MethodHandle INDY_call276 () throws Throwable { + if (INDY_call276 != null) return INDY_call276; + CallSite cs = (CallSite) MH_bootstrap276 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap276 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper276 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call276 ().invokeExact(o1, o2, o3); } + + static Object bootstrap276 (Object l, Object n, Object t) throws Throwable { return _mh[ 276 ].invokeExact(l, n, t); } + + // 277 + private static MethodType MT_bootstrap277 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap277 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap277", MT_bootstrap277 ()); + } + + private static MethodHandle INDY_call277; + private static MethodHandle INDY_call277 () throws Throwable { + if (INDY_call277 != null) return INDY_call277; + CallSite cs = (CallSite) MH_bootstrap277 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap277 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper277 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call277 ().invokeExact(o1, o2, o3); } + + static Object bootstrap277 (Object l, Object n, Object t) throws Throwable { return _mh[ 277 ].invokeExact(l, n, t); } + + // 278 + private static MethodType MT_bootstrap278 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap278 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap278", MT_bootstrap278 ()); + } + + private static MethodHandle INDY_call278; + private static MethodHandle INDY_call278 () throws Throwable { + if (INDY_call278 != null) return INDY_call278; + CallSite cs = (CallSite) MH_bootstrap278 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap278 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper278 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call278 ().invokeExact(o1, o2, o3); } + + static Object bootstrap278 (Object l, Object n, Object t) throws Throwable { return _mh[ 278 ].invokeExact(l, n, t); } + + // 279 + private static MethodType MT_bootstrap279 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap279 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap279", MT_bootstrap279 ()); + } + + private static MethodHandle INDY_call279; + private static MethodHandle INDY_call279 () throws Throwable { + if (INDY_call279 != null) return INDY_call279; + CallSite cs = (CallSite) MH_bootstrap279 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap279 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper279 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call279 ().invokeExact(o1, o2, o3); } + + static Object bootstrap279 (Object l, Object n, Object t) throws Throwable { return _mh[ 279 ].invokeExact(l, n, t); } + + // 280 + private static MethodType MT_bootstrap280 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap280 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap280", MT_bootstrap280 ()); + } + + private static MethodHandle INDY_call280; + private static MethodHandle INDY_call280 () throws Throwable { + if (INDY_call280 != null) return INDY_call280; + CallSite cs = (CallSite) MH_bootstrap280 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap280 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper280 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call280 ().invokeExact(o1, o2, o3); } + + static Object bootstrap280 (Object l, Object n, Object t) throws Throwable { return _mh[ 280 ].invokeExact(l, n, t); } + + // 281 + private static MethodType MT_bootstrap281 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap281 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap281", MT_bootstrap281 ()); + } + + private static MethodHandle INDY_call281; + private static MethodHandle INDY_call281 () throws Throwable { + if (INDY_call281 != null) return INDY_call281; + CallSite cs = (CallSite) MH_bootstrap281 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap281 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper281 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call281 ().invokeExact(o1, o2, o3); } + + static Object bootstrap281 (Object l, Object n, Object t) throws Throwable { return _mh[ 281 ].invokeExact(l, n, t); } + + // 282 + private static MethodType MT_bootstrap282 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap282 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap282", MT_bootstrap282 ()); + } + + private static MethodHandle INDY_call282; + private static MethodHandle INDY_call282 () throws Throwable { + if (INDY_call282 != null) return INDY_call282; + CallSite cs = (CallSite) MH_bootstrap282 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap282 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper282 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call282 ().invokeExact(o1, o2, o3); } + + static Object bootstrap282 (Object l, Object n, Object t) throws Throwable { return _mh[ 282 ].invokeExact(l, n, t); } + + // 283 + private static MethodType MT_bootstrap283 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap283 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap283", MT_bootstrap283 ()); + } + + private static MethodHandle INDY_call283; + private static MethodHandle INDY_call283 () throws Throwable { + if (INDY_call283 != null) return INDY_call283; + CallSite cs = (CallSite) MH_bootstrap283 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap283 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper283 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call283 ().invokeExact(o1, o2, o3); } + + static Object bootstrap283 (Object l, Object n, Object t) throws Throwable { return _mh[ 283 ].invokeExact(l, n, t); } + + // 284 + private static MethodType MT_bootstrap284 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap284 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap284", MT_bootstrap284 ()); + } + + private static MethodHandle INDY_call284; + private static MethodHandle INDY_call284 () throws Throwable { + if (INDY_call284 != null) return INDY_call284; + CallSite cs = (CallSite) MH_bootstrap284 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap284 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper284 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call284 ().invokeExact(o1, o2, o3); } + + static Object bootstrap284 (Object l, Object n, Object t) throws Throwable { return _mh[ 284 ].invokeExact(l, n, t); } + + // 285 + private static MethodType MT_bootstrap285 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap285 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap285", MT_bootstrap285 ()); + } + + private static MethodHandle INDY_call285; + private static MethodHandle INDY_call285 () throws Throwable { + if (INDY_call285 != null) return INDY_call285; + CallSite cs = (CallSite) MH_bootstrap285 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap285 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper285 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call285 ().invokeExact(o1, o2, o3); } + + static Object bootstrap285 (Object l, Object n, Object t) throws Throwable { return _mh[ 285 ].invokeExact(l, n, t); } + + // 286 + private static MethodType MT_bootstrap286 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap286 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap286", MT_bootstrap286 ()); + } + + private static MethodHandle INDY_call286; + private static MethodHandle INDY_call286 () throws Throwable { + if (INDY_call286 != null) return INDY_call286; + CallSite cs = (CallSite) MH_bootstrap286 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap286 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper286 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call286 ().invokeExact(o1, o2, o3); } + + static Object bootstrap286 (Object l, Object n, Object t) throws Throwable { return _mh[ 286 ].invokeExact(l, n, t); } + + // 287 + private static MethodType MT_bootstrap287 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap287 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap287", MT_bootstrap287 ()); + } + + private static MethodHandle INDY_call287; + private static MethodHandle INDY_call287 () throws Throwable { + if (INDY_call287 != null) return INDY_call287; + CallSite cs = (CallSite) MH_bootstrap287 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap287 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper287 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call287 ().invokeExact(o1, o2, o3); } + + static Object bootstrap287 (Object l, Object n, Object t) throws Throwable { return _mh[ 287 ].invokeExact(l, n, t); } + + // 288 + private static MethodType MT_bootstrap288 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap288 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap288", MT_bootstrap288 ()); + } + + private static MethodHandle INDY_call288; + private static MethodHandle INDY_call288 () throws Throwable { + if (INDY_call288 != null) return INDY_call288; + CallSite cs = (CallSite) MH_bootstrap288 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap288 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper288 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call288 ().invokeExact(o1, o2, o3); } + + static Object bootstrap288 (Object l, Object n, Object t) throws Throwable { return _mh[ 288 ].invokeExact(l, n, t); } + + // 289 + private static MethodType MT_bootstrap289 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap289 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap289", MT_bootstrap289 ()); + } + + private static MethodHandle INDY_call289; + private static MethodHandle INDY_call289 () throws Throwable { + if (INDY_call289 != null) return INDY_call289; + CallSite cs = (CallSite) MH_bootstrap289 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap289 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper289 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call289 ().invokeExact(o1, o2, o3); } + + static Object bootstrap289 (Object l, Object n, Object t) throws Throwable { return _mh[ 289 ].invokeExact(l, n, t); } + + // 290 + private static MethodType MT_bootstrap290 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap290 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap290", MT_bootstrap290 ()); + } + + private static MethodHandle INDY_call290; + private static MethodHandle INDY_call290 () throws Throwable { + if (INDY_call290 != null) return INDY_call290; + CallSite cs = (CallSite) MH_bootstrap290 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap290 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper290 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call290 ().invokeExact(o1, o2, o3); } + + static Object bootstrap290 (Object l, Object n, Object t) throws Throwable { return _mh[ 290 ].invokeExact(l, n, t); } + + // 291 + private static MethodType MT_bootstrap291 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap291 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap291", MT_bootstrap291 ()); + } + + private static MethodHandle INDY_call291; + private static MethodHandle INDY_call291 () throws Throwable { + if (INDY_call291 != null) return INDY_call291; + CallSite cs = (CallSite) MH_bootstrap291 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap291 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper291 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call291 ().invokeExact(o1, o2, o3); } + + static Object bootstrap291 (Object l, Object n, Object t) throws Throwable { return _mh[ 291 ].invokeExact(l, n, t); } + + // 292 + private static MethodType MT_bootstrap292 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap292 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap292", MT_bootstrap292 ()); + } + + private static MethodHandle INDY_call292; + private static MethodHandle INDY_call292 () throws Throwable { + if (INDY_call292 != null) return INDY_call292; + CallSite cs = (CallSite) MH_bootstrap292 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap292 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper292 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call292 ().invokeExact(o1, o2, o3); } + + static Object bootstrap292 (Object l, Object n, Object t) throws Throwable { return _mh[ 292 ].invokeExact(l, n, t); } + + // 293 + private static MethodType MT_bootstrap293 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap293 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap293", MT_bootstrap293 ()); + } + + private static MethodHandle INDY_call293; + private static MethodHandle INDY_call293 () throws Throwable { + if (INDY_call293 != null) return INDY_call293; + CallSite cs = (CallSite) MH_bootstrap293 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap293 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper293 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call293 ().invokeExact(o1, o2, o3); } + + static Object bootstrap293 (Object l, Object n, Object t) throws Throwable { return _mh[ 293 ].invokeExact(l, n, t); } + + // 294 + private static MethodType MT_bootstrap294 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap294 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap294", MT_bootstrap294 ()); + } + + private static MethodHandle INDY_call294; + private static MethodHandle INDY_call294 () throws Throwable { + if (INDY_call294 != null) return INDY_call294; + CallSite cs = (CallSite) MH_bootstrap294 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap294 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper294 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call294 ().invokeExact(o1, o2, o3); } + + static Object bootstrap294 (Object l, Object n, Object t) throws Throwable { return _mh[ 294 ].invokeExact(l, n, t); } + + // 295 + private static MethodType MT_bootstrap295 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap295 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap295", MT_bootstrap295 ()); + } + + private static MethodHandle INDY_call295; + private static MethodHandle INDY_call295 () throws Throwable { + if (INDY_call295 != null) return INDY_call295; + CallSite cs = (CallSite) MH_bootstrap295 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap295 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper295 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call295 ().invokeExact(o1, o2, o3); } + + static Object bootstrap295 (Object l, Object n, Object t) throws Throwable { return _mh[ 295 ].invokeExact(l, n, t); } + + // 296 + private static MethodType MT_bootstrap296 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap296 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap296", MT_bootstrap296 ()); + } + + private static MethodHandle INDY_call296; + private static MethodHandle INDY_call296 () throws Throwable { + if (INDY_call296 != null) return INDY_call296; + CallSite cs = (CallSite) MH_bootstrap296 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap296 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper296 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call296 ().invokeExact(o1, o2, o3); } + + static Object bootstrap296 (Object l, Object n, Object t) throws Throwable { return _mh[ 296 ].invokeExact(l, n, t); } + + // 297 + private static MethodType MT_bootstrap297 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap297 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap297", MT_bootstrap297 ()); + } + + private static MethodHandle INDY_call297; + private static MethodHandle INDY_call297 () throws Throwable { + if (INDY_call297 != null) return INDY_call297; + CallSite cs = (CallSite) MH_bootstrap297 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap297 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper297 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call297 ().invokeExact(o1, o2, o3); } + + static Object bootstrap297 (Object l, Object n, Object t) throws Throwable { return _mh[ 297 ].invokeExact(l, n, t); } + + // 298 + private static MethodType MT_bootstrap298 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap298 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap298", MT_bootstrap298 ()); + } + + private static MethodHandle INDY_call298; + private static MethodHandle INDY_call298 () throws Throwable { + if (INDY_call298 != null) return INDY_call298; + CallSite cs = (CallSite) MH_bootstrap298 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap298 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper298 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call298 ().invokeExact(o1, o2, o3); } + + static Object bootstrap298 (Object l, Object n, Object t) throws Throwable { return _mh[ 298 ].invokeExact(l, n, t); } + + // 299 + private static MethodType MT_bootstrap299 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap299 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap299", MT_bootstrap299 ()); + } + + private static MethodHandle INDY_call299; + private static MethodHandle INDY_call299 () throws Throwable { + if (INDY_call299 != null) return INDY_call299; + CallSite cs = (CallSite) MH_bootstrap299 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap299 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper299 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call299 ().invokeExact(o1, o2, o3); } + + static Object bootstrap299 (Object l, Object n, Object t) throws Throwable { return _mh[ 299 ].invokeExact(l, n, t); } + + // 300 + private static MethodType MT_bootstrap300 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap300 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap300", MT_bootstrap300 ()); + } + + private static MethodHandle INDY_call300; + private static MethodHandle INDY_call300 () throws Throwable { + if (INDY_call300 != null) return INDY_call300; + CallSite cs = (CallSite) MH_bootstrap300 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap300 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper300 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call300 ().invokeExact(o1, o2, o3); } + + static Object bootstrap300 (Object l, Object n, Object t) throws Throwable { return _mh[ 300 ].invokeExact(l, n, t); } + + // 301 + private static MethodType MT_bootstrap301 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap301 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap301", MT_bootstrap301 ()); + } + + private static MethodHandle INDY_call301; + private static MethodHandle INDY_call301 () throws Throwable { + if (INDY_call301 != null) return INDY_call301; + CallSite cs = (CallSite) MH_bootstrap301 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap301 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper301 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call301 ().invokeExact(o1, o2, o3); } + + static Object bootstrap301 (Object l, Object n, Object t) throws Throwable { return _mh[ 301 ].invokeExact(l, n, t); } + + // 302 + private static MethodType MT_bootstrap302 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap302 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap302", MT_bootstrap302 ()); + } + + private static MethodHandle INDY_call302; + private static MethodHandle INDY_call302 () throws Throwable { + if (INDY_call302 != null) return INDY_call302; + CallSite cs = (CallSite) MH_bootstrap302 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap302 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper302 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call302 ().invokeExact(o1, o2, o3); } + + static Object bootstrap302 (Object l, Object n, Object t) throws Throwable { return _mh[ 302 ].invokeExact(l, n, t); } + + // 303 + private static MethodType MT_bootstrap303 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap303 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap303", MT_bootstrap303 ()); + } + + private static MethodHandle INDY_call303; + private static MethodHandle INDY_call303 () throws Throwable { + if (INDY_call303 != null) return INDY_call303; + CallSite cs = (CallSite) MH_bootstrap303 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap303 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper303 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call303 ().invokeExact(o1, o2, o3); } + + static Object bootstrap303 (Object l, Object n, Object t) throws Throwable { return _mh[ 303 ].invokeExact(l, n, t); } + + // 304 + private static MethodType MT_bootstrap304 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap304 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap304", MT_bootstrap304 ()); + } + + private static MethodHandle INDY_call304; + private static MethodHandle INDY_call304 () throws Throwable { + if (INDY_call304 != null) return INDY_call304; + CallSite cs = (CallSite) MH_bootstrap304 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap304 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper304 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call304 ().invokeExact(o1, o2, o3); } + + static Object bootstrap304 (Object l, Object n, Object t) throws Throwable { return _mh[ 304 ].invokeExact(l, n, t); } + + // 305 + private static MethodType MT_bootstrap305 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap305 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap305", MT_bootstrap305 ()); + } + + private static MethodHandle INDY_call305; + private static MethodHandle INDY_call305 () throws Throwable { + if (INDY_call305 != null) return INDY_call305; + CallSite cs = (CallSite) MH_bootstrap305 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap305 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper305 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call305 ().invokeExact(o1, o2, o3); } + + static Object bootstrap305 (Object l, Object n, Object t) throws Throwable { return _mh[ 305 ].invokeExact(l, n, t); } + + // 306 + private static MethodType MT_bootstrap306 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap306 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap306", MT_bootstrap306 ()); + } + + private static MethodHandle INDY_call306; + private static MethodHandle INDY_call306 () throws Throwable { + if (INDY_call306 != null) return INDY_call306; + CallSite cs = (CallSite) MH_bootstrap306 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap306 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper306 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call306 ().invokeExact(o1, o2, o3); } + + static Object bootstrap306 (Object l, Object n, Object t) throws Throwable { return _mh[ 306 ].invokeExact(l, n, t); } + + // 307 + private static MethodType MT_bootstrap307 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap307 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap307", MT_bootstrap307 ()); + } + + private static MethodHandle INDY_call307; + private static MethodHandle INDY_call307 () throws Throwable { + if (INDY_call307 != null) return INDY_call307; + CallSite cs = (CallSite) MH_bootstrap307 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap307 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper307 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call307 ().invokeExact(o1, o2, o3); } + + static Object bootstrap307 (Object l, Object n, Object t) throws Throwable { return _mh[ 307 ].invokeExact(l, n, t); } + + // 308 + private static MethodType MT_bootstrap308 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap308 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap308", MT_bootstrap308 ()); + } + + private static MethodHandle INDY_call308; + private static MethodHandle INDY_call308 () throws Throwable { + if (INDY_call308 != null) return INDY_call308; + CallSite cs = (CallSite) MH_bootstrap308 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap308 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper308 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call308 ().invokeExact(o1, o2, o3); } + + static Object bootstrap308 (Object l, Object n, Object t) throws Throwable { return _mh[ 308 ].invokeExact(l, n, t); } + + // 309 + private static MethodType MT_bootstrap309 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap309 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap309", MT_bootstrap309 ()); + } + + private static MethodHandle INDY_call309; + private static MethodHandle INDY_call309 () throws Throwable { + if (INDY_call309 != null) return INDY_call309; + CallSite cs = (CallSite) MH_bootstrap309 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap309 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper309 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call309 ().invokeExact(o1, o2, o3); } + + static Object bootstrap309 (Object l, Object n, Object t) throws Throwable { return _mh[ 309 ].invokeExact(l, n, t); } + + // 310 + private static MethodType MT_bootstrap310 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap310 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap310", MT_bootstrap310 ()); + } + + private static MethodHandle INDY_call310; + private static MethodHandle INDY_call310 () throws Throwable { + if (INDY_call310 != null) return INDY_call310; + CallSite cs = (CallSite) MH_bootstrap310 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap310 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper310 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call310 ().invokeExact(o1, o2, o3); } + + static Object bootstrap310 (Object l, Object n, Object t) throws Throwable { return _mh[ 310 ].invokeExact(l, n, t); } + + // 311 + private static MethodType MT_bootstrap311 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap311 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap311", MT_bootstrap311 ()); + } + + private static MethodHandle INDY_call311; + private static MethodHandle INDY_call311 () throws Throwable { + if (INDY_call311 != null) return INDY_call311; + CallSite cs = (CallSite) MH_bootstrap311 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap311 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper311 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call311 ().invokeExact(o1, o2, o3); } + + static Object bootstrap311 (Object l, Object n, Object t) throws Throwable { return _mh[ 311 ].invokeExact(l, n, t); } + + // 312 + private static MethodType MT_bootstrap312 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap312 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap312", MT_bootstrap312 ()); + } + + private static MethodHandle INDY_call312; + private static MethodHandle INDY_call312 () throws Throwable { + if (INDY_call312 != null) return INDY_call312; + CallSite cs = (CallSite) MH_bootstrap312 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap312 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper312 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call312 ().invokeExact(o1, o2, o3); } + + static Object bootstrap312 (Object l, Object n, Object t) throws Throwable { return _mh[ 312 ].invokeExact(l, n, t); } + + // 313 + private static MethodType MT_bootstrap313 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap313 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap313", MT_bootstrap313 ()); + } + + private static MethodHandle INDY_call313; + private static MethodHandle INDY_call313 () throws Throwable { + if (INDY_call313 != null) return INDY_call313; + CallSite cs = (CallSite) MH_bootstrap313 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap313 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper313 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call313 ().invokeExact(o1, o2, o3); } + + static Object bootstrap313 (Object l, Object n, Object t) throws Throwable { return _mh[ 313 ].invokeExact(l, n, t); } + + // 314 + private static MethodType MT_bootstrap314 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap314 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap314", MT_bootstrap314 ()); + } + + private static MethodHandle INDY_call314; + private static MethodHandle INDY_call314 () throws Throwable { + if (INDY_call314 != null) return INDY_call314; + CallSite cs = (CallSite) MH_bootstrap314 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap314 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper314 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call314 ().invokeExact(o1, o2, o3); } + + static Object bootstrap314 (Object l, Object n, Object t) throws Throwable { return _mh[ 314 ].invokeExact(l, n, t); } + + // 315 + private static MethodType MT_bootstrap315 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap315 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap315", MT_bootstrap315 ()); + } + + private static MethodHandle INDY_call315; + private static MethodHandle INDY_call315 () throws Throwable { + if (INDY_call315 != null) return INDY_call315; + CallSite cs = (CallSite) MH_bootstrap315 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap315 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper315 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call315 ().invokeExact(o1, o2, o3); } + + static Object bootstrap315 (Object l, Object n, Object t) throws Throwable { return _mh[ 315 ].invokeExact(l, n, t); } + + // 316 + private static MethodType MT_bootstrap316 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap316 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap316", MT_bootstrap316 ()); + } + + private static MethodHandle INDY_call316; + private static MethodHandle INDY_call316 () throws Throwable { + if (INDY_call316 != null) return INDY_call316; + CallSite cs = (CallSite) MH_bootstrap316 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap316 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper316 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call316 ().invokeExact(o1, o2, o3); } + + static Object bootstrap316 (Object l, Object n, Object t) throws Throwable { return _mh[ 316 ].invokeExact(l, n, t); } + + // 317 + private static MethodType MT_bootstrap317 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap317 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap317", MT_bootstrap317 ()); + } + + private static MethodHandle INDY_call317; + private static MethodHandle INDY_call317 () throws Throwable { + if (INDY_call317 != null) return INDY_call317; + CallSite cs = (CallSite) MH_bootstrap317 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap317 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper317 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call317 ().invokeExact(o1, o2, o3); } + + static Object bootstrap317 (Object l, Object n, Object t) throws Throwable { return _mh[ 317 ].invokeExact(l, n, t); } + + // 318 + private static MethodType MT_bootstrap318 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap318 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap318", MT_bootstrap318 ()); + } + + private static MethodHandle INDY_call318; + private static MethodHandle INDY_call318 () throws Throwable { + if (INDY_call318 != null) return INDY_call318; + CallSite cs = (CallSite) MH_bootstrap318 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap318 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper318 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call318 ().invokeExact(o1, o2, o3); } + + static Object bootstrap318 (Object l, Object n, Object t) throws Throwable { return _mh[ 318 ].invokeExact(l, n, t); } + + // 319 + private static MethodType MT_bootstrap319 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap319 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap319", MT_bootstrap319 ()); + } + + private static MethodHandle INDY_call319; + private static MethodHandle INDY_call319 () throws Throwable { + if (INDY_call319 != null) return INDY_call319; + CallSite cs = (CallSite) MH_bootstrap319 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap319 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper319 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call319 ().invokeExact(o1, o2, o3); } + + static Object bootstrap319 (Object l, Object n, Object t) throws Throwable { return _mh[ 319 ].invokeExact(l, n, t); } + + // 320 + private static MethodType MT_bootstrap320 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap320 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap320", MT_bootstrap320 ()); + } + + private static MethodHandle INDY_call320; + private static MethodHandle INDY_call320 () throws Throwable { + if (INDY_call320 != null) return INDY_call320; + CallSite cs = (CallSite) MH_bootstrap320 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap320 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper320 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call320 ().invokeExact(o1, o2, o3); } + + static Object bootstrap320 (Object l, Object n, Object t) throws Throwable { return _mh[ 320 ].invokeExact(l, n, t); } + + // 321 + private static MethodType MT_bootstrap321 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap321 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap321", MT_bootstrap321 ()); + } + + private static MethodHandle INDY_call321; + private static MethodHandle INDY_call321 () throws Throwable { + if (INDY_call321 != null) return INDY_call321; + CallSite cs = (CallSite) MH_bootstrap321 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap321 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper321 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call321 ().invokeExact(o1, o2, o3); } + + static Object bootstrap321 (Object l, Object n, Object t) throws Throwable { return _mh[ 321 ].invokeExact(l, n, t); } + + // 322 + private static MethodType MT_bootstrap322 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap322 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap322", MT_bootstrap322 ()); + } + + private static MethodHandle INDY_call322; + private static MethodHandle INDY_call322 () throws Throwable { + if (INDY_call322 != null) return INDY_call322; + CallSite cs = (CallSite) MH_bootstrap322 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap322 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper322 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call322 ().invokeExact(o1, o2, o3); } + + static Object bootstrap322 (Object l, Object n, Object t) throws Throwable { return _mh[ 322 ].invokeExact(l, n, t); } + + // 323 + private static MethodType MT_bootstrap323 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap323 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap323", MT_bootstrap323 ()); + } + + private static MethodHandle INDY_call323; + private static MethodHandle INDY_call323 () throws Throwable { + if (INDY_call323 != null) return INDY_call323; + CallSite cs = (CallSite) MH_bootstrap323 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap323 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper323 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call323 ().invokeExact(o1, o2, o3); } + + static Object bootstrap323 (Object l, Object n, Object t) throws Throwable { return _mh[ 323 ].invokeExact(l, n, t); } + + // 324 + private static MethodType MT_bootstrap324 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap324 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap324", MT_bootstrap324 ()); + } + + private static MethodHandle INDY_call324; + private static MethodHandle INDY_call324 () throws Throwable { + if (INDY_call324 != null) return INDY_call324; + CallSite cs = (CallSite) MH_bootstrap324 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap324 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper324 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call324 ().invokeExact(o1, o2, o3); } + + static Object bootstrap324 (Object l, Object n, Object t) throws Throwable { return _mh[ 324 ].invokeExact(l, n, t); } + + // 325 + private static MethodType MT_bootstrap325 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap325 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap325", MT_bootstrap325 ()); + } + + private static MethodHandle INDY_call325; + private static MethodHandle INDY_call325 () throws Throwable { + if (INDY_call325 != null) return INDY_call325; + CallSite cs = (CallSite) MH_bootstrap325 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap325 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper325 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call325 ().invokeExact(o1, o2, o3); } + + static Object bootstrap325 (Object l, Object n, Object t) throws Throwable { return _mh[ 325 ].invokeExact(l, n, t); } + + // 326 + private static MethodType MT_bootstrap326 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap326 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap326", MT_bootstrap326 ()); + } + + private static MethodHandle INDY_call326; + private static MethodHandle INDY_call326 () throws Throwable { + if (INDY_call326 != null) return INDY_call326; + CallSite cs = (CallSite) MH_bootstrap326 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap326 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper326 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call326 ().invokeExact(o1, o2, o3); } + + static Object bootstrap326 (Object l, Object n, Object t) throws Throwable { return _mh[ 326 ].invokeExact(l, n, t); } + + // 327 + private static MethodType MT_bootstrap327 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap327 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap327", MT_bootstrap327 ()); + } + + private static MethodHandle INDY_call327; + private static MethodHandle INDY_call327 () throws Throwable { + if (INDY_call327 != null) return INDY_call327; + CallSite cs = (CallSite) MH_bootstrap327 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap327 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper327 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call327 ().invokeExact(o1, o2, o3); } + + static Object bootstrap327 (Object l, Object n, Object t) throws Throwable { return _mh[ 327 ].invokeExact(l, n, t); } + + // 328 + private static MethodType MT_bootstrap328 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap328 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap328", MT_bootstrap328 ()); + } + + private static MethodHandle INDY_call328; + private static MethodHandle INDY_call328 () throws Throwable { + if (INDY_call328 != null) return INDY_call328; + CallSite cs = (CallSite) MH_bootstrap328 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap328 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper328 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call328 ().invokeExact(o1, o2, o3); } + + static Object bootstrap328 (Object l, Object n, Object t) throws Throwable { return _mh[ 328 ].invokeExact(l, n, t); } + + // 329 + private static MethodType MT_bootstrap329 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap329 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap329", MT_bootstrap329 ()); + } + + private static MethodHandle INDY_call329; + private static MethodHandle INDY_call329 () throws Throwable { + if (INDY_call329 != null) return INDY_call329; + CallSite cs = (CallSite) MH_bootstrap329 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap329 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper329 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call329 ().invokeExact(o1, o2, o3); } + + static Object bootstrap329 (Object l, Object n, Object t) throws Throwable { return _mh[ 329 ].invokeExact(l, n, t); } + + // 330 + private static MethodType MT_bootstrap330 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap330 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap330", MT_bootstrap330 ()); + } + + private static MethodHandle INDY_call330; + private static MethodHandle INDY_call330 () throws Throwable { + if (INDY_call330 != null) return INDY_call330; + CallSite cs = (CallSite) MH_bootstrap330 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap330 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper330 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call330 ().invokeExact(o1, o2, o3); } + + static Object bootstrap330 (Object l, Object n, Object t) throws Throwable { return _mh[ 330 ].invokeExact(l, n, t); } + + // 331 + private static MethodType MT_bootstrap331 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap331 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap331", MT_bootstrap331 ()); + } + + private static MethodHandle INDY_call331; + private static MethodHandle INDY_call331 () throws Throwable { + if (INDY_call331 != null) return INDY_call331; + CallSite cs = (CallSite) MH_bootstrap331 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap331 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper331 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call331 ().invokeExact(o1, o2, o3); } + + static Object bootstrap331 (Object l, Object n, Object t) throws Throwable { return _mh[ 331 ].invokeExact(l, n, t); } + + // 332 + private static MethodType MT_bootstrap332 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap332 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap332", MT_bootstrap332 ()); + } + + private static MethodHandle INDY_call332; + private static MethodHandle INDY_call332 () throws Throwable { + if (INDY_call332 != null) return INDY_call332; + CallSite cs = (CallSite) MH_bootstrap332 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap332 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper332 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call332 ().invokeExact(o1, o2, o3); } + + static Object bootstrap332 (Object l, Object n, Object t) throws Throwable { return _mh[ 332 ].invokeExact(l, n, t); } + + // 333 + private static MethodType MT_bootstrap333 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap333 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap333", MT_bootstrap333 ()); + } + + private static MethodHandle INDY_call333; + private static MethodHandle INDY_call333 () throws Throwable { + if (INDY_call333 != null) return INDY_call333; + CallSite cs = (CallSite) MH_bootstrap333 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap333 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper333 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call333 ().invokeExact(o1, o2, o3); } + + static Object bootstrap333 (Object l, Object n, Object t) throws Throwable { return _mh[ 333 ].invokeExact(l, n, t); } + + // 334 + private static MethodType MT_bootstrap334 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap334 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap334", MT_bootstrap334 ()); + } + + private static MethodHandle INDY_call334; + private static MethodHandle INDY_call334 () throws Throwable { + if (INDY_call334 != null) return INDY_call334; + CallSite cs = (CallSite) MH_bootstrap334 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap334 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper334 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call334 ().invokeExact(o1, o2, o3); } + + static Object bootstrap334 (Object l, Object n, Object t) throws Throwable { return _mh[ 334 ].invokeExact(l, n, t); } + + // 335 + private static MethodType MT_bootstrap335 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap335 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap335", MT_bootstrap335 ()); + } + + private static MethodHandle INDY_call335; + private static MethodHandle INDY_call335 () throws Throwable { + if (INDY_call335 != null) return INDY_call335; + CallSite cs = (CallSite) MH_bootstrap335 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap335 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper335 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call335 ().invokeExact(o1, o2, o3); } + + static Object bootstrap335 (Object l, Object n, Object t) throws Throwable { return _mh[ 335 ].invokeExact(l, n, t); } + + // 336 + private static MethodType MT_bootstrap336 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap336 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap336", MT_bootstrap336 ()); + } + + private static MethodHandle INDY_call336; + private static MethodHandle INDY_call336 () throws Throwable { + if (INDY_call336 != null) return INDY_call336; + CallSite cs = (CallSite) MH_bootstrap336 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap336 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper336 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call336 ().invokeExact(o1, o2, o3); } + + static Object bootstrap336 (Object l, Object n, Object t) throws Throwable { return _mh[ 336 ].invokeExact(l, n, t); } + + // 337 + private static MethodType MT_bootstrap337 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap337 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap337", MT_bootstrap337 ()); + } + + private static MethodHandle INDY_call337; + private static MethodHandle INDY_call337 () throws Throwable { + if (INDY_call337 != null) return INDY_call337; + CallSite cs = (CallSite) MH_bootstrap337 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap337 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper337 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call337 ().invokeExact(o1, o2, o3); } + + static Object bootstrap337 (Object l, Object n, Object t) throws Throwable { return _mh[ 337 ].invokeExact(l, n, t); } + + // 338 + private static MethodType MT_bootstrap338 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap338 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap338", MT_bootstrap338 ()); + } + + private static MethodHandle INDY_call338; + private static MethodHandle INDY_call338 () throws Throwable { + if (INDY_call338 != null) return INDY_call338; + CallSite cs = (CallSite) MH_bootstrap338 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap338 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper338 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call338 ().invokeExact(o1, o2, o3); } + + static Object bootstrap338 (Object l, Object n, Object t) throws Throwable { return _mh[ 338 ].invokeExact(l, n, t); } + + // 339 + private static MethodType MT_bootstrap339 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap339 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap339", MT_bootstrap339 ()); + } + + private static MethodHandle INDY_call339; + private static MethodHandle INDY_call339 () throws Throwable { + if (INDY_call339 != null) return INDY_call339; + CallSite cs = (CallSite) MH_bootstrap339 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap339 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper339 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call339 ().invokeExact(o1, o2, o3); } + + static Object bootstrap339 (Object l, Object n, Object t) throws Throwable { return _mh[ 339 ].invokeExact(l, n, t); } + + // 340 + private static MethodType MT_bootstrap340 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap340 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap340", MT_bootstrap340 ()); + } + + private static MethodHandle INDY_call340; + private static MethodHandle INDY_call340 () throws Throwable { + if (INDY_call340 != null) return INDY_call340; + CallSite cs = (CallSite) MH_bootstrap340 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap340 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper340 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call340 ().invokeExact(o1, o2, o3); } + + static Object bootstrap340 (Object l, Object n, Object t) throws Throwable { return _mh[ 340 ].invokeExact(l, n, t); } + + // 341 + private static MethodType MT_bootstrap341 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap341 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap341", MT_bootstrap341 ()); + } + + private static MethodHandle INDY_call341; + private static MethodHandle INDY_call341 () throws Throwable { + if (INDY_call341 != null) return INDY_call341; + CallSite cs = (CallSite) MH_bootstrap341 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap341 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper341 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call341 ().invokeExact(o1, o2, o3); } + + static Object bootstrap341 (Object l, Object n, Object t) throws Throwable { return _mh[ 341 ].invokeExact(l, n, t); } + + // 342 + private static MethodType MT_bootstrap342 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap342 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap342", MT_bootstrap342 ()); + } + + private static MethodHandle INDY_call342; + private static MethodHandle INDY_call342 () throws Throwable { + if (INDY_call342 != null) return INDY_call342; + CallSite cs = (CallSite) MH_bootstrap342 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap342 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper342 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call342 ().invokeExact(o1, o2, o3); } + + static Object bootstrap342 (Object l, Object n, Object t) throws Throwable { return _mh[ 342 ].invokeExact(l, n, t); } + + // 343 + private static MethodType MT_bootstrap343 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap343 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap343", MT_bootstrap343 ()); + } + + private static MethodHandle INDY_call343; + private static MethodHandle INDY_call343 () throws Throwable { + if (INDY_call343 != null) return INDY_call343; + CallSite cs = (CallSite) MH_bootstrap343 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap343 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper343 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call343 ().invokeExact(o1, o2, o3); } + + static Object bootstrap343 (Object l, Object n, Object t) throws Throwable { return _mh[ 343 ].invokeExact(l, n, t); } + + // 344 + private static MethodType MT_bootstrap344 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap344 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap344", MT_bootstrap344 ()); + } + + private static MethodHandle INDY_call344; + private static MethodHandle INDY_call344 () throws Throwable { + if (INDY_call344 != null) return INDY_call344; + CallSite cs = (CallSite) MH_bootstrap344 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap344 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper344 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call344 ().invokeExact(o1, o2, o3); } + + static Object bootstrap344 (Object l, Object n, Object t) throws Throwable { return _mh[ 344 ].invokeExact(l, n, t); } + + // 345 + private static MethodType MT_bootstrap345 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap345 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap345", MT_bootstrap345 ()); + } + + private static MethodHandle INDY_call345; + private static MethodHandle INDY_call345 () throws Throwable { + if (INDY_call345 != null) return INDY_call345; + CallSite cs = (CallSite) MH_bootstrap345 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap345 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper345 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call345 ().invokeExact(o1, o2, o3); } + + static Object bootstrap345 (Object l, Object n, Object t) throws Throwable { return _mh[ 345 ].invokeExact(l, n, t); } + + // 346 + private static MethodType MT_bootstrap346 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap346 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap346", MT_bootstrap346 ()); + } + + private static MethodHandle INDY_call346; + private static MethodHandle INDY_call346 () throws Throwable { + if (INDY_call346 != null) return INDY_call346; + CallSite cs = (CallSite) MH_bootstrap346 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap346 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper346 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call346 ().invokeExact(o1, o2, o3); } + + static Object bootstrap346 (Object l, Object n, Object t) throws Throwable { return _mh[ 346 ].invokeExact(l, n, t); } + + // 347 + private static MethodType MT_bootstrap347 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap347 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap347", MT_bootstrap347 ()); + } + + private static MethodHandle INDY_call347; + private static MethodHandle INDY_call347 () throws Throwable { + if (INDY_call347 != null) return INDY_call347; + CallSite cs = (CallSite) MH_bootstrap347 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap347 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper347 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call347 ().invokeExact(o1, o2, o3); } + + static Object bootstrap347 (Object l, Object n, Object t) throws Throwable { return _mh[ 347 ].invokeExact(l, n, t); } + + // 348 + private static MethodType MT_bootstrap348 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap348 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap348", MT_bootstrap348 ()); + } + + private static MethodHandle INDY_call348; + private static MethodHandle INDY_call348 () throws Throwable { + if (INDY_call348 != null) return INDY_call348; + CallSite cs = (CallSite) MH_bootstrap348 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap348 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper348 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call348 ().invokeExact(o1, o2, o3); } + + static Object bootstrap348 (Object l, Object n, Object t) throws Throwable { return _mh[ 348 ].invokeExact(l, n, t); } + + // 349 + private static MethodType MT_bootstrap349 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap349 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap349", MT_bootstrap349 ()); + } + + private static MethodHandle INDY_call349; + private static MethodHandle INDY_call349 () throws Throwable { + if (INDY_call349 != null) return INDY_call349; + CallSite cs = (CallSite) MH_bootstrap349 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap349 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper349 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call349 ().invokeExact(o1, o2, o3); } + + static Object bootstrap349 (Object l, Object n, Object t) throws Throwable { return _mh[ 349 ].invokeExact(l, n, t); } + + // 350 + private static MethodType MT_bootstrap350 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap350 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap350", MT_bootstrap350 ()); + } + + private static MethodHandle INDY_call350; + private static MethodHandle INDY_call350 () throws Throwable { + if (INDY_call350 != null) return INDY_call350; + CallSite cs = (CallSite) MH_bootstrap350 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap350 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper350 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call350 ().invokeExact(o1, o2, o3); } + + static Object bootstrap350 (Object l, Object n, Object t) throws Throwable { return _mh[ 350 ].invokeExact(l, n, t); } + + // 351 + private static MethodType MT_bootstrap351 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap351 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap351", MT_bootstrap351 ()); + } + + private static MethodHandle INDY_call351; + private static MethodHandle INDY_call351 () throws Throwable { + if (INDY_call351 != null) return INDY_call351; + CallSite cs = (CallSite) MH_bootstrap351 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap351 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper351 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call351 ().invokeExact(o1, o2, o3); } + + static Object bootstrap351 (Object l, Object n, Object t) throws Throwable { return _mh[ 351 ].invokeExact(l, n, t); } + + // 352 + private static MethodType MT_bootstrap352 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap352 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap352", MT_bootstrap352 ()); + } + + private static MethodHandle INDY_call352; + private static MethodHandle INDY_call352 () throws Throwable { + if (INDY_call352 != null) return INDY_call352; + CallSite cs = (CallSite) MH_bootstrap352 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap352 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper352 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call352 ().invokeExact(o1, o2, o3); } + + static Object bootstrap352 (Object l, Object n, Object t) throws Throwable { return _mh[ 352 ].invokeExact(l, n, t); } + + // 353 + private static MethodType MT_bootstrap353 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap353 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap353", MT_bootstrap353 ()); + } + + private static MethodHandle INDY_call353; + private static MethodHandle INDY_call353 () throws Throwable { + if (INDY_call353 != null) return INDY_call353; + CallSite cs = (CallSite) MH_bootstrap353 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap353 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper353 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call353 ().invokeExact(o1, o2, o3); } + + static Object bootstrap353 (Object l, Object n, Object t) throws Throwable { return _mh[ 353 ].invokeExact(l, n, t); } + + // 354 + private static MethodType MT_bootstrap354 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap354 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap354", MT_bootstrap354 ()); + } + + private static MethodHandle INDY_call354; + private static MethodHandle INDY_call354 () throws Throwable { + if (INDY_call354 != null) return INDY_call354; + CallSite cs = (CallSite) MH_bootstrap354 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap354 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper354 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call354 ().invokeExact(o1, o2, o3); } + + static Object bootstrap354 (Object l, Object n, Object t) throws Throwable { return _mh[ 354 ].invokeExact(l, n, t); } + + // 355 + private static MethodType MT_bootstrap355 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap355 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap355", MT_bootstrap355 ()); + } + + private static MethodHandle INDY_call355; + private static MethodHandle INDY_call355 () throws Throwable { + if (INDY_call355 != null) return INDY_call355; + CallSite cs = (CallSite) MH_bootstrap355 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap355 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper355 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call355 ().invokeExact(o1, o2, o3); } + + static Object bootstrap355 (Object l, Object n, Object t) throws Throwable { return _mh[ 355 ].invokeExact(l, n, t); } + + // 356 + private static MethodType MT_bootstrap356 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap356 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap356", MT_bootstrap356 ()); + } + + private static MethodHandle INDY_call356; + private static MethodHandle INDY_call356 () throws Throwable { + if (INDY_call356 != null) return INDY_call356; + CallSite cs = (CallSite) MH_bootstrap356 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap356 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper356 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call356 ().invokeExact(o1, o2, o3); } + + static Object bootstrap356 (Object l, Object n, Object t) throws Throwable { return _mh[ 356 ].invokeExact(l, n, t); } + + // 357 + private static MethodType MT_bootstrap357 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap357 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap357", MT_bootstrap357 ()); + } + + private static MethodHandle INDY_call357; + private static MethodHandle INDY_call357 () throws Throwable { + if (INDY_call357 != null) return INDY_call357; + CallSite cs = (CallSite) MH_bootstrap357 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap357 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper357 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call357 ().invokeExact(o1, o2, o3); } + + static Object bootstrap357 (Object l, Object n, Object t) throws Throwable { return _mh[ 357 ].invokeExact(l, n, t); } + + // 358 + private static MethodType MT_bootstrap358 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap358 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap358", MT_bootstrap358 ()); + } + + private static MethodHandle INDY_call358; + private static MethodHandle INDY_call358 () throws Throwable { + if (INDY_call358 != null) return INDY_call358; + CallSite cs = (CallSite) MH_bootstrap358 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap358 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper358 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call358 ().invokeExact(o1, o2, o3); } + + static Object bootstrap358 (Object l, Object n, Object t) throws Throwable { return _mh[ 358 ].invokeExact(l, n, t); } + + // 359 + private static MethodType MT_bootstrap359 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap359 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap359", MT_bootstrap359 ()); + } + + private static MethodHandle INDY_call359; + private static MethodHandle INDY_call359 () throws Throwable { + if (INDY_call359 != null) return INDY_call359; + CallSite cs = (CallSite) MH_bootstrap359 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap359 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper359 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call359 ().invokeExact(o1, o2, o3); } + + static Object bootstrap359 (Object l, Object n, Object t) throws Throwable { return _mh[ 359 ].invokeExact(l, n, t); } + + // 360 + private static MethodType MT_bootstrap360 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap360 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap360", MT_bootstrap360 ()); + } + + private static MethodHandle INDY_call360; + private static MethodHandle INDY_call360 () throws Throwable { + if (INDY_call360 != null) return INDY_call360; + CallSite cs = (CallSite) MH_bootstrap360 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap360 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper360 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call360 ().invokeExact(o1, o2, o3); } + + static Object bootstrap360 (Object l, Object n, Object t) throws Throwable { return _mh[ 360 ].invokeExact(l, n, t); } + + // 361 + private static MethodType MT_bootstrap361 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap361 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap361", MT_bootstrap361 ()); + } + + private static MethodHandle INDY_call361; + private static MethodHandle INDY_call361 () throws Throwable { + if (INDY_call361 != null) return INDY_call361; + CallSite cs = (CallSite) MH_bootstrap361 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap361 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper361 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call361 ().invokeExact(o1, o2, o3); } + + static Object bootstrap361 (Object l, Object n, Object t) throws Throwable { return _mh[ 361 ].invokeExact(l, n, t); } + + // 362 + private static MethodType MT_bootstrap362 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap362 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap362", MT_bootstrap362 ()); + } + + private static MethodHandle INDY_call362; + private static MethodHandle INDY_call362 () throws Throwable { + if (INDY_call362 != null) return INDY_call362; + CallSite cs = (CallSite) MH_bootstrap362 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap362 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper362 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call362 ().invokeExact(o1, o2, o3); } + + static Object bootstrap362 (Object l, Object n, Object t) throws Throwable { return _mh[ 362 ].invokeExact(l, n, t); } + + // 363 + private static MethodType MT_bootstrap363 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap363 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap363", MT_bootstrap363 ()); + } + + private static MethodHandle INDY_call363; + private static MethodHandle INDY_call363 () throws Throwable { + if (INDY_call363 != null) return INDY_call363; + CallSite cs = (CallSite) MH_bootstrap363 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap363 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper363 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call363 ().invokeExact(o1, o2, o3); } + + static Object bootstrap363 (Object l, Object n, Object t) throws Throwable { return _mh[ 363 ].invokeExact(l, n, t); } + + // 364 + private static MethodType MT_bootstrap364 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap364 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap364", MT_bootstrap364 ()); + } + + private static MethodHandle INDY_call364; + private static MethodHandle INDY_call364 () throws Throwable { + if (INDY_call364 != null) return INDY_call364; + CallSite cs = (CallSite) MH_bootstrap364 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap364 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper364 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call364 ().invokeExact(o1, o2, o3); } + + static Object bootstrap364 (Object l, Object n, Object t) throws Throwable { return _mh[ 364 ].invokeExact(l, n, t); } + + // 365 + private static MethodType MT_bootstrap365 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap365 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap365", MT_bootstrap365 ()); + } + + private static MethodHandle INDY_call365; + private static MethodHandle INDY_call365 () throws Throwable { + if (INDY_call365 != null) return INDY_call365; + CallSite cs = (CallSite) MH_bootstrap365 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap365 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper365 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call365 ().invokeExact(o1, o2, o3); } + + static Object bootstrap365 (Object l, Object n, Object t) throws Throwable { return _mh[ 365 ].invokeExact(l, n, t); } + + // 366 + private static MethodType MT_bootstrap366 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap366 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap366", MT_bootstrap366 ()); + } + + private static MethodHandle INDY_call366; + private static MethodHandle INDY_call366 () throws Throwable { + if (INDY_call366 != null) return INDY_call366; + CallSite cs = (CallSite) MH_bootstrap366 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap366 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper366 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call366 ().invokeExact(o1, o2, o3); } + + static Object bootstrap366 (Object l, Object n, Object t) throws Throwable { return _mh[ 366 ].invokeExact(l, n, t); } + + // 367 + private static MethodType MT_bootstrap367 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap367 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap367", MT_bootstrap367 ()); + } + + private static MethodHandle INDY_call367; + private static MethodHandle INDY_call367 () throws Throwable { + if (INDY_call367 != null) return INDY_call367; + CallSite cs = (CallSite) MH_bootstrap367 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap367 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper367 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call367 ().invokeExact(o1, o2, o3); } + + static Object bootstrap367 (Object l, Object n, Object t) throws Throwable { return _mh[ 367 ].invokeExact(l, n, t); } + + // 368 + private static MethodType MT_bootstrap368 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap368 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap368", MT_bootstrap368 ()); + } + + private static MethodHandle INDY_call368; + private static MethodHandle INDY_call368 () throws Throwable { + if (INDY_call368 != null) return INDY_call368; + CallSite cs = (CallSite) MH_bootstrap368 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap368 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper368 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call368 ().invokeExact(o1, o2, o3); } + + static Object bootstrap368 (Object l, Object n, Object t) throws Throwable { return _mh[ 368 ].invokeExact(l, n, t); } + + // 369 + private static MethodType MT_bootstrap369 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap369 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap369", MT_bootstrap369 ()); + } + + private static MethodHandle INDY_call369; + private static MethodHandle INDY_call369 () throws Throwable { + if (INDY_call369 != null) return INDY_call369; + CallSite cs = (CallSite) MH_bootstrap369 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap369 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper369 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call369 ().invokeExact(o1, o2, o3); } + + static Object bootstrap369 (Object l, Object n, Object t) throws Throwable { return _mh[ 369 ].invokeExact(l, n, t); } + + // 370 + private static MethodType MT_bootstrap370 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap370 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap370", MT_bootstrap370 ()); + } + + private static MethodHandle INDY_call370; + private static MethodHandle INDY_call370 () throws Throwable { + if (INDY_call370 != null) return INDY_call370; + CallSite cs = (CallSite) MH_bootstrap370 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap370 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper370 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call370 ().invokeExact(o1, o2, o3); } + + static Object bootstrap370 (Object l, Object n, Object t) throws Throwable { return _mh[ 370 ].invokeExact(l, n, t); } + + // 371 + private static MethodType MT_bootstrap371 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap371 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap371", MT_bootstrap371 ()); + } + + private static MethodHandle INDY_call371; + private static MethodHandle INDY_call371 () throws Throwable { + if (INDY_call371 != null) return INDY_call371; + CallSite cs = (CallSite) MH_bootstrap371 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap371 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper371 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call371 ().invokeExact(o1, o2, o3); } + + static Object bootstrap371 (Object l, Object n, Object t) throws Throwable { return _mh[ 371 ].invokeExact(l, n, t); } + + // 372 + private static MethodType MT_bootstrap372 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap372 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap372", MT_bootstrap372 ()); + } + + private static MethodHandle INDY_call372; + private static MethodHandle INDY_call372 () throws Throwable { + if (INDY_call372 != null) return INDY_call372; + CallSite cs = (CallSite) MH_bootstrap372 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap372 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper372 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call372 ().invokeExact(o1, o2, o3); } + + static Object bootstrap372 (Object l, Object n, Object t) throws Throwable { return _mh[ 372 ].invokeExact(l, n, t); } + + // 373 + private static MethodType MT_bootstrap373 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap373 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap373", MT_bootstrap373 ()); + } + + private static MethodHandle INDY_call373; + private static MethodHandle INDY_call373 () throws Throwable { + if (INDY_call373 != null) return INDY_call373; + CallSite cs = (CallSite) MH_bootstrap373 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap373 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper373 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call373 ().invokeExact(o1, o2, o3); } + + static Object bootstrap373 (Object l, Object n, Object t) throws Throwable { return _mh[ 373 ].invokeExact(l, n, t); } + + // 374 + private static MethodType MT_bootstrap374 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap374 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap374", MT_bootstrap374 ()); + } + + private static MethodHandle INDY_call374; + private static MethodHandle INDY_call374 () throws Throwable { + if (INDY_call374 != null) return INDY_call374; + CallSite cs = (CallSite) MH_bootstrap374 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap374 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper374 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call374 ().invokeExact(o1, o2, o3); } + + static Object bootstrap374 (Object l, Object n, Object t) throws Throwable { return _mh[ 374 ].invokeExact(l, n, t); } + + // 375 + private static MethodType MT_bootstrap375 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap375 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap375", MT_bootstrap375 ()); + } + + private static MethodHandle INDY_call375; + private static MethodHandle INDY_call375 () throws Throwable { + if (INDY_call375 != null) return INDY_call375; + CallSite cs = (CallSite) MH_bootstrap375 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap375 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper375 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call375 ().invokeExact(o1, o2, o3); } + + static Object bootstrap375 (Object l, Object n, Object t) throws Throwable { return _mh[ 375 ].invokeExact(l, n, t); } + + // 376 + private static MethodType MT_bootstrap376 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap376 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap376", MT_bootstrap376 ()); + } + + private static MethodHandle INDY_call376; + private static MethodHandle INDY_call376 () throws Throwable { + if (INDY_call376 != null) return INDY_call376; + CallSite cs = (CallSite) MH_bootstrap376 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap376 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper376 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call376 ().invokeExact(o1, o2, o3); } + + static Object bootstrap376 (Object l, Object n, Object t) throws Throwable { return _mh[ 376 ].invokeExact(l, n, t); } + + // 377 + private static MethodType MT_bootstrap377 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap377 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap377", MT_bootstrap377 ()); + } + + private static MethodHandle INDY_call377; + private static MethodHandle INDY_call377 () throws Throwable { + if (INDY_call377 != null) return INDY_call377; + CallSite cs = (CallSite) MH_bootstrap377 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap377 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper377 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call377 ().invokeExact(o1, o2, o3); } + + static Object bootstrap377 (Object l, Object n, Object t) throws Throwable { return _mh[ 377 ].invokeExact(l, n, t); } + + // 378 + private static MethodType MT_bootstrap378 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap378 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap378", MT_bootstrap378 ()); + } + + private static MethodHandle INDY_call378; + private static MethodHandle INDY_call378 () throws Throwable { + if (INDY_call378 != null) return INDY_call378; + CallSite cs = (CallSite) MH_bootstrap378 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap378 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper378 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call378 ().invokeExact(o1, o2, o3); } + + static Object bootstrap378 (Object l, Object n, Object t) throws Throwable { return _mh[ 378 ].invokeExact(l, n, t); } + + // 379 + private static MethodType MT_bootstrap379 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap379 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap379", MT_bootstrap379 ()); + } + + private static MethodHandle INDY_call379; + private static MethodHandle INDY_call379 () throws Throwable { + if (INDY_call379 != null) return INDY_call379; + CallSite cs = (CallSite) MH_bootstrap379 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap379 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper379 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call379 ().invokeExact(o1, o2, o3); } + + static Object bootstrap379 (Object l, Object n, Object t) throws Throwable { return _mh[ 379 ].invokeExact(l, n, t); } + + // 380 + private static MethodType MT_bootstrap380 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap380 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap380", MT_bootstrap380 ()); + } + + private static MethodHandle INDY_call380; + private static MethodHandle INDY_call380 () throws Throwable { + if (INDY_call380 != null) return INDY_call380; + CallSite cs = (CallSite) MH_bootstrap380 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap380 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper380 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call380 ().invokeExact(o1, o2, o3); } + + static Object bootstrap380 (Object l, Object n, Object t) throws Throwable { return _mh[ 380 ].invokeExact(l, n, t); } + + // 381 + private static MethodType MT_bootstrap381 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap381 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap381", MT_bootstrap381 ()); + } + + private static MethodHandle INDY_call381; + private static MethodHandle INDY_call381 () throws Throwable { + if (INDY_call381 != null) return INDY_call381; + CallSite cs = (CallSite) MH_bootstrap381 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap381 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper381 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call381 ().invokeExact(o1, o2, o3); } + + static Object bootstrap381 (Object l, Object n, Object t) throws Throwable { return _mh[ 381 ].invokeExact(l, n, t); } + + // 382 + private static MethodType MT_bootstrap382 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap382 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap382", MT_bootstrap382 ()); + } + + private static MethodHandle INDY_call382; + private static MethodHandle INDY_call382 () throws Throwable { + if (INDY_call382 != null) return INDY_call382; + CallSite cs = (CallSite) MH_bootstrap382 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap382 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper382 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call382 ().invokeExact(o1, o2, o3); } + + static Object bootstrap382 (Object l, Object n, Object t) throws Throwable { return _mh[ 382 ].invokeExact(l, n, t); } + + // 383 + private static MethodType MT_bootstrap383 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap383 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap383", MT_bootstrap383 ()); + } + + private static MethodHandle INDY_call383; + private static MethodHandle INDY_call383 () throws Throwable { + if (INDY_call383 != null) return INDY_call383; + CallSite cs = (CallSite) MH_bootstrap383 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap383 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper383 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call383 ().invokeExact(o1, o2, o3); } + + static Object bootstrap383 (Object l, Object n, Object t) throws Throwable { return _mh[ 383 ].invokeExact(l, n, t); } + + // 384 + private static MethodType MT_bootstrap384 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap384 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap384", MT_bootstrap384 ()); + } + + private static MethodHandle INDY_call384; + private static MethodHandle INDY_call384 () throws Throwable { + if (INDY_call384 != null) return INDY_call384; + CallSite cs = (CallSite) MH_bootstrap384 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap384 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper384 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call384 ().invokeExact(o1, o2, o3); } + + static Object bootstrap384 (Object l, Object n, Object t) throws Throwable { return _mh[ 384 ].invokeExact(l, n, t); } + + // 385 + private static MethodType MT_bootstrap385 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap385 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap385", MT_bootstrap385 ()); + } + + private static MethodHandle INDY_call385; + private static MethodHandle INDY_call385 () throws Throwable { + if (INDY_call385 != null) return INDY_call385; + CallSite cs = (CallSite) MH_bootstrap385 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap385 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper385 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call385 ().invokeExact(o1, o2, o3); } + + static Object bootstrap385 (Object l, Object n, Object t) throws Throwable { return _mh[ 385 ].invokeExact(l, n, t); } + + // 386 + private static MethodType MT_bootstrap386 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap386 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap386", MT_bootstrap386 ()); + } + + private static MethodHandle INDY_call386; + private static MethodHandle INDY_call386 () throws Throwable { + if (INDY_call386 != null) return INDY_call386; + CallSite cs = (CallSite) MH_bootstrap386 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap386 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper386 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call386 ().invokeExact(o1, o2, o3); } + + static Object bootstrap386 (Object l, Object n, Object t) throws Throwable { return _mh[ 386 ].invokeExact(l, n, t); } + + // 387 + private static MethodType MT_bootstrap387 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap387 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap387", MT_bootstrap387 ()); + } + + private static MethodHandle INDY_call387; + private static MethodHandle INDY_call387 () throws Throwable { + if (INDY_call387 != null) return INDY_call387; + CallSite cs = (CallSite) MH_bootstrap387 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap387 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper387 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call387 ().invokeExact(o1, o2, o3); } + + static Object bootstrap387 (Object l, Object n, Object t) throws Throwable { return _mh[ 387 ].invokeExact(l, n, t); } + + // 388 + private static MethodType MT_bootstrap388 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap388 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap388", MT_bootstrap388 ()); + } + + private static MethodHandle INDY_call388; + private static MethodHandle INDY_call388 () throws Throwable { + if (INDY_call388 != null) return INDY_call388; + CallSite cs = (CallSite) MH_bootstrap388 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap388 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper388 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call388 ().invokeExact(o1, o2, o3); } + + static Object bootstrap388 (Object l, Object n, Object t) throws Throwable { return _mh[ 388 ].invokeExact(l, n, t); } + + // 389 + private static MethodType MT_bootstrap389 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap389 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap389", MT_bootstrap389 ()); + } + + private static MethodHandle INDY_call389; + private static MethodHandle INDY_call389 () throws Throwable { + if (INDY_call389 != null) return INDY_call389; + CallSite cs = (CallSite) MH_bootstrap389 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap389 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper389 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call389 ().invokeExact(o1, o2, o3); } + + static Object bootstrap389 (Object l, Object n, Object t) throws Throwable { return _mh[ 389 ].invokeExact(l, n, t); } + + // 390 + private static MethodType MT_bootstrap390 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap390 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap390", MT_bootstrap390 ()); + } + + private static MethodHandle INDY_call390; + private static MethodHandle INDY_call390 () throws Throwable { + if (INDY_call390 != null) return INDY_call390; + CallSite cs = (CallSite) MH_bootstrap390 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap390 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper390 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call390 ().invokeExact(o1, o2, o3); } + + static Object bootstrap390 (Object l, Object n, Object t) throws Throwable { return _mh[ 390 ].invokeExact(l, n, t); } + + // 391 + private static MethodType MT_bootstrap391 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap391 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap391", MT_bootstrap391 ()); + } + + private static MethodHandle INDY_call391; + private static MethodHandle INDY_call391 () throws Throwable { + if (INDY_call391 != null) return INDY_call391; + CallSite cs = (CallSite) MH_bootstrap391 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap391 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper391 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call391 ().invokeExact(o1, o2, o3); } + + static Object bootstrap391 (Object l, Object n, Object t) throws Throwable { return _mh[ 391 ].invokeExact(l, n, t); } + + // 392 + private static MethodType MT_bootstrap392 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap392 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap392", MT_bootstrap392 ()); + } + + private static MethodHandle INDY_call392; + private static MethodHandle INDY_call392 () throws Throwable { + if (INDY_call392 != null) return INDY_call392; + CallSite cs = (CallSite) MH_bootstrap392 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap392 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper392 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call392 ().invokeExact(o1, o2, o3); } + + static Object bootstrap392 (Object l, Object n, Object t) throws Throwable { return _mh[ 392 ].invokeExact(l, n, t); } + + // 393 + private static MethodType MT_bootstrap393 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap393 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap393", MT_bootstrap393 ()); + } + + private static MethodHandle INDY_call393; + private static MethodHandle INDY_call393 () throws Throwable { + if (INDY_call393 != null) return INDY_call393; + CallSite cs = (CallSite) MH_bootstrap393 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap393 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper393 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call393 ().invokeExact(o1, o2, o3); } + + static Object bootstrap393 (Object l, Object n, Object t) throws Throwable { return _mh[ 393 ].invokeExact(l, n, t); } + + // 394 + private static MethodType MT_bootstrap394 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap394 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap394", MT_bootstrap394 ()); + } + + private static MethodHandle INDY_call394; + private static MethodHandle INDY_call394 () throws Throwable { + if (INDY_call394 != null) return INDY_call394; + CallSite cs = (CallSite) MH_bootstrap394 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap394 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper394 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call394 ().invokeExact(o1, o2, o3); } + + static Object bootstrap394 (Object l, Object n, Object t) throws Throwable { return _mh[ 394 ].invokeExact(l, n, t); } + + // 395 + private static MethodType MT_bootstrap395 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap395 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap395", MT_bootstrap395 ()); + } + + private static MethodHandle INDY_call395; + private static MethodHandle INDY_call395 () throws Throwable { + if (INDY_call395 != null) return INDY_call395; + CallSite cs = (CallSite) MH_bootstrap395 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap395 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper395 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call395 ().invokeExact(o1, o2, o3); } + + static Object bootstrap395 (Object l, Object n, Object t) throws Throwable { return _mh[ 395 ].invokeExact(l, n, t); } + + // 396 + private static MethodType MT_bootstrap396 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap396 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap396", MT_bootstrap396 ()); + } + + private static MethodHandle INDY_call396; + private static MethodHandle INDY_call396 () throws Throwable { + if (INDY_call396 != null) return INDY_call396; + CallSite cs = (CallSite) MH_bootstrap396 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap396 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper396 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call396 ().invokeExact(o1, o2, o3); } + + static Object bootstrap396 (Object l, Object n, Object t) throws Throwable { return _mh[ 396 ].invokeExact(l, n, t); } + + // 397 + private static MethodType MT_bootstrap397 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap397 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap397", MT_bootstrap397 ()); + } + + private static MethodHandle INDY_call397; + private static MethodHandle INDY_call397 () throws Throwable { + if (INDY_call397 != null) return INDY_call397; + CallSite cs = (CallSite) MH_bootstrap397 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap397 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper397 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call397 ().invokeExact(o1, o2, o3); } + + static Object bootstrap397 (Object l, Object n, Object t) throws Throwable { return _mh[ 397 ].invokeExact(l, n, t); } + + // 398 + private static MethodType MT_bootstrap398 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap398 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap398", MT_bootstrap398 ()); + } + + private static MethodHandle INDY_call398; + private static MethodHandle INDY_call398 () throws Throwable { + if (INDY_call398 != null) return INDY_call398; + CallSite cs = (CallSite) MH_bootstrap398 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap398 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper398 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call398 ().invokeExact(o1, o2, o3); } + + static Object bootstrap398 (Object l, Object n, Object t) throws Throwable { return _mh[ 398 ].invokeExact(l, n, t); } + + // 399 + private static MethodType MT_bootstrap399 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap399 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap399", MT_bootstrap399 ()); + } + + private static MethodHandle INDY_call399; + private static MethodHandle INDY_call399 () throws Throwable { + if (INDY_call399 != null) return INDY_call399; + CallSite cs = (CallSite) MH_bootstrap399 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap399 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper399 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call399 ().invokeExact(o1, o2, o3); } + + static Object bootstrap399 (Object l, Object n, Object t) throws Throwable { return _mh[ 399 ].invokeExact(l, n, t); } + + // 400 + private static MethodType MT_bootstrap400 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap400 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap400", MT_bootstrap400 ()); + } + + private static MethodHandle INDY_call400; + private static MethodHandle INDY_call400 () throws Throwable { + if (INDY_call400 != null) return INDY_call400; + CallSite cs = (CallSite) MH_bootstrap400 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap400 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper400 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call400 ().invokeExact(o1, o2, o3); } + + static Object bootstrap400 (Object l, Object n, Object t) throws Throwable { return _mh[ 400 ].invokeExact(l, n, t); } + + // 401 + private static MethodType MT_bootstrap401 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap401 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap401", MT_bootstrap401 ()); + } + + private static MethodHandle INDY_call401; + private static MethodHandle INDY_call401 () throws Throwable { + if (INDY_call401 != null) return INDY_call401; + CallSite cs = (CallSite) MH_bootstrap401 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap401 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper401 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call401 ().invokeExact(o1, o2, o3); } + + static Object bootstrap401 (Object l, Object n, Object t) throws Throwable { return _mh[ 401 ].invokeExact(l, n, t); } + + // 402 + private static MethodType MT_bootstrap402 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap402 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap402", MT_bootstrap402 ()); + } + + private static MethodHandle INDY_call402; + private static MethodHandle INDY_call402 () throws Throwable { + if (INDY_call402 != null) return INDY_call402; + CallSite cs = (CallSite) MH_bootstrap402 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap402 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper402 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call402 ().invokeExact(o1, o2, o3); } + + static Object bootstrap402 (Object l, Object n, Object t) throws Throwable { return _mh[ 402 ].invokeExact(l, n, t); } + + // 403 + private static MethodType MT_bootstrap403 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap403 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap403", MT_bootstrap403 ()); + } + + private static MethodHandle INDY_call403; + private static MethodHandle INDY_call403 () throws Throwable { + if (INDY_call403 != null) return INDY_call403; + CallSite cs = (CallSite) MH_bootstrap403 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap403 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper403 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call403 ().invokeExact(o1, o2, o3); } + + static Object bootstrap403 (Object l, Object n, Object t) throws Throwable { return _mh[ 403 ].invokeExact(l, n, t); } + + // 404 + private static MethodType MT_bootstrap404 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap404 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap404", MT_bootstrap404 ()); + } + + private static MethodHandle INDY_call404; + private static MethodHandle INDY_call404 () throws Throwable { + if (INDY_call404 != null) return INDY_call404; + CallSite cs = (CallSite) MH_bootstrap404 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap404 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper404 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call404 ().invokeExact(o1, o2, o3); } + + static Object bootstrap404 (Object l, Object n, Object t) throws Throwable { return _mh[ 404 ].invokeExact(l, n, t); } + + // 405 + private static MethodType MT_bootstrap405 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap405 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap405", MT_bootstrap405 ()); + } + + private static MethodHandle INDY_call405; + private static MethodHandle INDY_call405 () throws Throwable { + if (INDY_call405 != null) return INDY_call405; + CallSite cs = (CallSite) MH_bootstrap405 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap405 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper405 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call405 ().invokeExact(o1, o2, o3); } + + static Object bootstrap405 (Object l, Object n, Object t) throws Throwable { return _mh[ 405 ].invokeExact(l, n, t); } + + // 406 + private static MethodType MT_bootstrap406 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap406 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap406", MT_bootstrap406 ()); + } + + private static MethodHandle INDY_call406; + private static MethodHandle INDY_call406 () throws Throwable { + if (INDY_call406 != null) return INDY_call406; + CallSite cs = (CallSite) MH_bootstrap406 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap406 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper406 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call406 ().invokeExact(o1, o2, o3); } + + static Object bootstrap406 (Object l, Object n, Object t) throws Throwable { return _mh[ 406 ].invokeExact(l, n, t); } + + // 407 + private static MethodType MT_bootstrap407 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap407 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap407", MT_bootstrap407 ()); + } + + private static MethodHandle INDY_call407; + private static MethodHandle INDY_call407 () throws Throwable { + if (INDY_call407 != null) return INDY_call407; + CallSite cs = (CallSite) MH_bootstrap407 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap407 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper407 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call407 ().invokeExact(o1, o2, o3); } + + static Object bootstrap407 (Object l, Object n, Object t) throws Throwable { return _mh[ 407 ].invokeExact(l, n, t); } + + // 408 + private static MethodType MT_bootstrap408 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap408 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap408", MT_bootstrap408 ()); + } + + private static MethodHandle INDY_call408; + private static MethodHandle INDY_call408 () throws Throwable { + if (INDY_call408 != null) return INDY_call408; + CallSite cs = (CallSite) MH_bootstrap408 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap408 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper408 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call408 ().invokeExact(o1, o2, o3); } + + static Object bootstrap408 (Object l, Object n, Object t) throws Throwable { return _mh[ 408 ].invokeExact(l, n, t); } + + // 409 + private static MethodType MT_bootstrap409 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap409 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap409", MT_bootstrap409 ()); + } + + private static MethodHandle INDY_call409; + private static MethodHandle INDY_call409 () throws Throwable { + if (INDY_call409 != null) return INDY_call409; + CallSite cs = (CallSite) MH_bootstrap409 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap409 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper409 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call409 ().invokeExact(o1, o2, o3); } + + static Object bootstrap409 (Object l, Object n, Object t) throws Throwable { return _mh[ 409 ].invokeExact(l, n, t); } + + // 410 + private static MethodType MT_bootstrap410 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap410 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap410", MT_bootstrap410 ()); + } + + private static MethodHandle INDY_call410; + private static MethodHandle INDY_call410 () throws Throwable { + if (INDY_call410 != null) return INDY_call410; + CallSite cs = (CallSite) MH_bootstrap410 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap410 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper410 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call410 ().invokeExact(o1, o2, o3); } + + static Object bootstrap410 (Object l, Object n, Object t) throws Throwable { return _mh[ 410 ].invokeExact(l, n, t); } + + // 411 + private static MethodType MT_bootstrap411 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap411 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap411", MT_bootstrap411 ()); + } + + private static MethodHandle INDY_call411; + private static MethodHandle INDY_call411 () throws Throwable { + if (INDY_call411 != null) return INDY_call411; + CallSite cs = (CallSite) MH_bootstrap411 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap411 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper411 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call411 ().invokeExact(o1, o2, o3); } + + static Object bootstrap411 (Object l, Object n, Object t) throws Throwable { return _mh[ 411 ].invokeExact(l, n, t); } + + // 412 + private static MethodType MT_bootstrap412 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap412 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap412", MT_bootstrap412 ()); + } + + private static MethodHandle INDY_call412; + private static MethodHandle INDY_call412 () throws Throwable { + if (INDY_call412 != null) return INDY_call412; + CallSite cs = (CallSite) MH_bootstrap412 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap412 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper412 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call412 ().invokeExact(o1, o2, o3); } + + static Object bootstrap412 (Object l, Object n, Object t) throws Throwable { return _mh[ 412 ].invokeExact(l, n, t); } + + // 413 + private static MethodType MT_bootstrap413 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap413 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap413", MT_bootstrap413 ()); + } + + private static MethodHandle INDY_call413; + private static MethodHandle INDY_call413 () throws Throwable { + if (INDY_call413 != null) return INDY_call413; + CallSite cs = (CallSite) MH_bootstrap413 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap413 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper413 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call413 ().invokeExact(o1, o2, o3); } + + static Object bootstrap413 (Object l, Object n, Object t) throws Throwable { return _mh[ 413 ].invokeExact(l, n, t); } + + // 414 + private static MethodType MT_bootstrap414 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap414 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap414", MT_bootstrap414 ()); + } + + private static MethodHandle INDY_call414; + private static MethodHandle INDY_call414 () throws Throwable { + if (INDY_call414 != null) return INDY_call414; + CallSite cs = (CallSite) MH_bootstrap414 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap414 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper414 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call414 ().invokeExact(o1, o2, o3); } + + static Object bootstrap414 (Object l, Object n, Object t) throws Throwable { return _mh[ 414 ].invokeExact(l, n, t); } + + // 415 + private static MethodType MT_bootstrap415 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap415 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap415", MT_bootstrap415 ()); + } + + private static MethodHandle INDY_call415; + private static MethodHandle INDY_call415 () throws Throwable { + if (INDY_call415 != null) return INDY_call415; + CallSite cs = (CallSite) MH_bootstrap415 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap415 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper415 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call415 ().invokeExact(o1, o2, o3); } + + static Object bootstrap415 (Object l, Object n, Object t) throws Throwable { return _mh[ 415 ].invokeExact(l, n, t); } + + // 416 + private static MethodType MT_bootstrap416 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap416 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap416", MT_bootstrap416 ()); + } + + private static MethodHandle INDY_call416; + private static MethodHandle INDY_call416 () throws Throwable { + if (INDY_call416 != null) return INDY_call416; + CallSite cs = (CallSite) MH_bootstrap416 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap416 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper416 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call416 ().invokeExact(o1, o2, o3); } + + static Object bootstrap416 (Object l, Object n, Object t) throws Throwable { return _mh[ 416 ].invokeExact(l, n, t); } + + // 417 + private static MethodType MT_bootstrap417 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap417 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap417", MT_bootstrap417 ()); + } + + private static MethodHandle INDY_call417; + private static MethodHandle INDY_call417 () throws Throwable { + if (INDY_call417 != null) return INDY_call417; + CallSite cs = (CallSite) MH_bootstrap417 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap417 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper417 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call417 ().invokeExact(o1, o2, o3); } + + static Object bootstrap417 (Object l, Object n, Object t) throws Throwable { return _mh[ 417 ].invokeExact(l, n, t); } + + // 418 + private static MethodType MT_bootstrap418 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap418 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap418", MT_bootstrap418 ()); + } + + private static MethodHandle INDY_call418; + private static MethodHandle INDY_call418 () throws Throwable { + if (INDY_call418 != null) return INDY_call418; + CallSite cs = (CallSite) MH_bootstrap418 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap418 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper418 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call418 ().invokeExact(o1, o2, o3); } + + static Object bootstrap418 (Object l, Object n, Object t) throws Throwable { return _mh[ 418 ].invokeExact(l, n, t); } + + // 419 + private static MethodType MT_bootstrap419 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap419 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap419", MT_bootstrap419 ()); + } + + private static MethodHandle INDY_call419; + private static MethodHandle INDY_call419 () throws Throwable { + if (INDY_call419 != null) return INDY_call419; + CallSite cs = (CallSite) MH_bootstrap419 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap419 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper419 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call419 ().invokeExact(o1, o2, o3); } + + static Object bootstrap419 (Object l, Object n, Object t) throws Throwable { return _mh[ 419 ].invokeExact(l, n, t); } + + // 420 + private static MethodType MT_bootstrap420 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap420 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap420", MT_bootstrap420 ()); + } + + private static MethodHandle INDY_call420; + private static MethodHandle INDY_call420 () throws Throwable { + if (INDY_call420 != null) return INDY_call420; + CallSite cs = (CallSite) MH_bootstrap420 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap420 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper420 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call420 ().invokeExact(o1, o2, o3); } + + static Object bootstrap420 (Object l, Object n, Object t) throws Throwable { return _mh[ 420 ].invokeExact(l, n, t); } + + // 421 + private static MethodType MT_bootstrap421 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap421 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap421", MT_bootstrap421 ()); + } + + private static MethodHandle INDY_call421; + private static MethodHandle INDY_call421 () throws Throwable { + if (INDY_call421 != null) return INDY_call421; + CallSite cs = (CallSite) MH_bootstrap421 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap421 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper421 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call421 ().invokeExact(o1, o2, o3); } + + static Object bootstrap421 (Object l, Object n, Object t) throws Throwable { return _mh[ 421 ].invokeExact(l, n, t); } + + // 422 + private static MethodType MT_bootstrap422 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap422 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap422", MT_bootstrap422 ()); + } + + private static MethodHandle INDY_call422; + private static MethodHandle INDY_call422 () throws Throwable { + if (INDY_call422 != null) return INDY_call422; + CallSite cs = (CallSite) MH_bootstrap422 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap422 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper422 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call422 ().invokeExact(o1, o2, o3); } + + static Object bootstrap422 (Object l, Object n, Object t) throws Throwable { return _mh[ 422 ].invokeExact(l, n, t); } + + // 423 + private static MethodType MT_bootstrap423 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap423 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap423", MT_bootstrap423 ()); + } + + private static MethodHandle INDY_call423; + private static MethodHandle INDY_call423 () throws Throwable { + if (INDY_call423 != null) return INDY_call423; + CallSite cs = (CallSite) MH_bootstrap423 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap423 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper423 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call423 ().invokeExact(o1, o2, o3); } + + static Object bootstrap423 (Object l, Object n, Object t) throws Throwable { return _mh[ 423 ].invokeExact(l, n, t); } + + // 424 + private static MethodType MT_bootstrap424 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap424 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap424", MT_bootstrap424 ()); + } + + private static MethodHandle INDY_call424; + private static MethodHandle INDY_call424 () throws Throwable { + if (INDY_call424 != null) return INDY_call424; + CallSite cs = (CallSite) MH_bootstrap424 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap424 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper424 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call424 ().invokeExact(o1, o2, o3); } + + static Object bootstrap424 (Object l, Object n, Object t) throws Throwable { return _mh[ 424 ].invokeExact(l, n, t); } + + // 425 + private static MethodType MT_bootstrap425 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap425 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap425", MT_bootstrap425 ()); + } + + private static MethodHandle INDY_call425; + private static MethodHandle INDY_call425 () throws Throwable { + if (INDY_call425 != null) return INDY_call425; + CallSite cs = (CallSite) MH_bootstrap425 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap425 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper425 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call425 ().invokeExact(o1, o2, o3); } + + static Object bootstrap425 (Object l, Object n, Object t) throws Throwable { return _mh[ 425 ].invokeExact(l, n, t); } + + // 426 + private static MethodType MT_bootstrap426 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap426 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap426", MT_bootstrap426 ()); + } + + private static MethodHandle INDY_call426; + private static MethodHandle INDY_call426 () throws Throwable { + if (INDY_call426 != null) return INDY_call426; + CallSite cs = (CallSite) MH_bootstrap426 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap426 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper426 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call426 ().invokeExact(o1, o2, o3); } + + static Object bootstrap426 (Object l, Object n, Object t) throws Throwable { return _mh[ 426 ].invokeExact(l, n, t); } + + // 427 + private static MethodType MT_bootstrap427 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap427 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap427", MT_bootstrap427 ()); + } + + private static MethodHandle INDY_call427; + private static MethodHandle INDY_call427 () throws Throwable { + if (INDY_call427 != null) return INDY_call427; + CallSite cs = (CallSite) MH_bootstrap427 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap427 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper427 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call427 ().invokeExact(o1, o2, o3); } + + static Object bootstrap427 (Object l, Object n, Object t) throws Throwable { return _mh[ 427 ].invokeExact(l, n, t); } + + // 428 + private static MethodType MT_bootstrap428 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap428 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap428", MT_bootstrap428 ()); + } + + private static MethodHandle INDY_call428; + private static MethodHandle INDY_call428 () throws Throwable { + if (INDY_call428 != null) return INDY_call428; + CallSite cs = (CallSite) MH_bootstrap428 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap428 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper428 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call428 ().invokeExact(o1, o2, o3); } + + static Object bootstrap428 (Object l, Object n, Object t) throws Throwable { return _mh[ 428 ].invokeExact(l, n, t); } + + // 429 + private static MethodType MT_bootstrap429 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap429 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap429", MT_bootstrap429 ()); + } + + private static MethodHandle INDY_call429; + private static MethodHandle INDY_call429 () throws Throwable { + if (INDY_call429 != null) return INDY_call429; + CallSite cs = (CallSite) MH_bootstrap429 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap429 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper429 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call429 ().invokeExact(o1, o2, o3); } + + static Object bootstrap429 (Object l, Object n, Object t) throws Throwable { return _mh[ 429 ].invokeExact(l, n, t); } + + // 430 + private static MethodType MT_bootstrap430 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap430 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap430", MT_bootstrap430 ()); + } + + private static MethodHandle INDY_call430; + private static MethodHandle INDY_call430 () throws Throwable { + if (INDY_call430 != null) return INDY_call430; + CallSite cs = (CallSite) MH_bootstrap430 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap430 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper430 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call430 ().invokeExact(o1, o2, o3); } + + static Object bootstrap430 (Object l, Object n, Object t) throws Throwable { return _mh[ 430 ].invokeExact(l, n, t); } + + // 431 + private static MethodType MT_bootstrap431 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap431 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap431", MT_bootstrap431 ()); + } + + private static MethodHandle INDY_call431; + private static MethodHandle INDY_call431 () throws Throwable { + if (INDY_call431 != null) return INDY_call431; + CallSite cs = (CallSite) MH_bootstrap431 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap431 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper431 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call431 ().invokeExact(o1, o2, o3); } + + static Object bootstrap431 (Object l, Object n, Object t) throws Throwable { return _mh[ 431 ].invokeExact(l, n, t); } + + // 432 + private static MethodType MT_bootstrap432 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap432 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap432", MT_bootstrap432 ()); + } + + private static MethodHandle INDY_call432; + private static MethodHandle INDY_call432 () throws Throwable { + if (INDY_call432 != null) return INDY_call432; + CallSite cs = (CallSite) MH_bootstrap432 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap432 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper432 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call432 ().invokeExact(o1, o2, o3); } + + static Object bootstrap432 (Object l, Object n, Object t) throws Throwable { return _mh[ 432 ].invokeExact(l, n, t); } + + // 433 + private static MethodType MT_bootstrap433 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap433 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap433", MT_bootstrap433 ()); + } + + private static MethodHandle INDY_call433; + private static MethodHandle INDY_call433 () throws Throwable { + if (INDY_call433 != null) return INDY_call433; + CallSite cs = (CallSite) MH_bootstrap433 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap433 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper433 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call433 ().invokeExact(o1, o2, o3); } + + static Object bootstrap433 (Object l, Object n, Object t) throws Throwable { return _mh[ 433 ].invokeExact(l, n, t); } + + // 434 + private static MethodType MT_bootstrap434 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap434 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap434", MT_bootstrap434 ()); + } + + private static MethodHandle INDY_call434; + private static MethodHandle INDY_call434 () throws Throwable { + if (INDY_call434 != null) return INDY_call434; + CallSite cs = (CallSite) MH_bootstrap434 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap434 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper434 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call434 ().invokeExact(o1, o2, o3); } + + static Object bootstrap434 (Object l, Object n, Object t) throws Throwable { return _mh[ 434 ].invokeExact(l, n, t); } + + // 435 + private static MethodType MT_bootstrap435 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap435 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap435", MT_bootstrap435 ()); + } + + private static MethodHandle INDY_call435; + private static MethodHandle INDY_call435 () throws Throwable { + if (INDY_call435 != null) return INDY_call435; + CallSite cs = (CallSite) MH_bootstrap435 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap435 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper435 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call435 ().invokeExact(o1, o2, o3); } + + static Object bootstrap435 (Object l, Object n, Object t) throws Throwable { return _mh[ 435 ].invokeExact(l, n, t); } + + // 436 + private static MethodType MT_bootstrap436 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap436 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap436", MT_bootstrap436 ()); + } + + private static MethodHandle INDY_call436; + private static MethodHandle INDY_call436 () throws Throwable { + if (INDY_call436 != null) return INDY_call436; + CallSite cs = (CallSite) MH_bootstrap436 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap436 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper436 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call436 ().invokeExact(o1, o2, o3); } + + static Object bootstrap436 (Object l, Object n, Object t) throws Throwable { return _mh[ 436 ].invokeExact(l, n, t); } + + // 437 + private static MethodType MT_bootstrap437 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap437 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap437", MT_bootstrap437 ()); + } + + private static MethodHandle INDY_call437; + private static MethodHandle INDY_call437 () throws Throwable { + if (INDY_call437 != null) return INDY_call437; + CallSite cs = (CallSite) MH_bootstrap437 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap437 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper437 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call437 ().invokeExact(o1, o2, o3); } + + static Object bootstrap437 (Object l, Object n, Object t) throws Throwable { return _mh[ 437 ].invokeExact(l, n, t); } + + // 438 + private static MethodType MT_bootstrap438 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap438 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap438", MT_bootstrap438 ()); + } + + private static MethodHandle INDY_call438; + private static MethodHandle INDY_call438 () throws Throwable { + if (INDY_call438 != null) return INDY_call438; + CallSite cs = (CallSite) MH_bootstrap438 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap438 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper438 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call438 ().invokeExact(o1, o2, o3); } + + static Object bootstrap438 (Object l, Object n, Object t) throws Throwable { return _mh[ 438 ].invokeExact(l, n, t); } + + // 439 + private static MethodType MT_bootstrap439 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap439 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap439", MT_bootstrap439 ()); + } + + private static MethodHandle INDY_call439; + private static MethodHandle INDY_call439 () throws Throwable { + if (INDY_call439 != null) return INDY_call439; + CallSite cs = (CallSite) MH_bootstrap439 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap439 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper439 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call439 ().invokeExact(o1, o2, o3); } + + static Object bootstrap439 (Object l, Object n, Object t) throws Throwable { return _mh[ 439 ].invokeExact(l, n, t); } + + // 440 + private static MethodType MT_bootstrap440 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap440 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap440", MT_bootstrap440 ()); + } + + private static MethodHandle INDY_call440; + private static MethodHandle INDY_call440 () throws Throwable { + if (INDY_call440 != null) return INDY_call440; + CallSite cs = (CallSite) MH_bootstrap440 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap440 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper440 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call440 ().invokeExact(o1, o2, o3); } + + static Object bootstrap440 (Object l, Object n, Object t) throws Throwable { return _mh[ 440 ].invokeExact(l, n, t); } + + // 441 + private static MethodType MT_bootstrap441 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap441 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap441", MT_bootstrap441 ()); + } + + private static MethodHandle INDY_call441; + private static MethodHandle INDY_call441 () throws Throwable { + if (INDY_call441 != null) return INDY_call441; + CallSite cs = (CallSite) MH_bootstrap441 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap441 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper441 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call441 ().invokeExact(o1, o2, o3); } + + static Object bootstrap441 (Object l, Object n, Object t) throws Throwable { return _mh[ 441 ].invokeExact(l, n, t); } + + // 442 + private static MethodType MT_bootstrap442 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap442 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap442", MT_bootstrap442 ()); + } + + private static MethodHandle INDY_call442; + private static MethodHandle INDY_call442 () throws Throwable { + if (INDY_call442 != null) return INDY_call442; + CallSite cs = (CallSite) MH_bootstrap442 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap442 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper442 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call442 ().invokeExact(o1, o2, o3); } + + static Object bootstrap442 (Object l, Object n, Object t) throws Throwable { return _mh[ 442 ].invokeExact(l, n, t); } + + // 443 + private static MethodType MT_bootstrap443 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap443 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap443", MT_bootstrap443 ()); + } + + private static MethodHandle INDY_call443; + private static MethodHandle INDY_call443 () throws Throwable { + if (INDY_call443 != null) return INDY_call443; + CallSite cs = (CallSite) MH_bootstrap443 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap443 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper443 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call443 ().invokeExact(o1, o2, o3); } + + static Object bootstrap443 (Object l, Object n, Object t) throws Throwable { return _mh[ 443 ].invokeExact(l, n, t); } + + // 444 + private static MethodType MT_bootstrap444 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap444 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap444", MT_bootstrap444 ()); + } + + private static MethodHandle INDY_call444; + private static MethodHandle INDY_call444 () throws Throwable { + if (INDY_call444 != null) return INDY_call444; + CallSite cs = (CallSite) MH_bootstrap444 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap444 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper444 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call444 ().invokeExact(o1, o2, o3); } + + static Object bootstrap444 (Object l, Object n, Object t) throws Throwable { return _mh[ 444 ].invokeExact(l, n, t); } + + // 445 + private static MethodType MT_bootstrap445 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap445 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap445", MT_bootstrap445 ()); + } + + private static MethodHandle INDY_call445; + private static MethodHandle INDY_call445 () throws Throwable { + if (INDY_call445 != null) return INDY_call445; + CallSite cs = (CallSite) MH_bootstrap445 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap445 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper445 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call445 ().invokeExact(o1, o2, o3); } + + static Object bootstrap445 (Object l, Object n, Object t) throws Throwable { return _mh[ 445 ].invokeExact(l, n, t); } + + // 446 + private static MethodType MT_bootstrap446 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap446 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap446", MT_bootstrap446 ()); + } + + private static MethodHandle INDY_call446; + private static MethodHandle INDY_call446 () throws Throwable { + if (INDY_call446 != null) return INDY_call446; + CallSite cs = (CallSite) MH_bootstrap446 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap446 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper446 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call446 ().invokeExact(o1, o2, o3); } + + static Object bootstrap446 (Object l, Object n, Object t) throws Throwable { return _mh[ 446 ].invokeExact(l, n, t); } + + // 447 + private static MethodType MT_bootstrap447 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap447 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap447", MT_bootstrap447 ()); + } + + private static MethodHandle INDY_call447; + private static MethodHandle INDY_call447 () throws Throwable { + if (INDY_call447 != null) return INDY_call447; + CallSite cs = (CallSite) MH_bootstrap447 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap447 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper447 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call447 ().invokeExact(o1, o2, o3); } + + static Object bootstrap447 (Object l, Object n, Object t) throws Throwable { return _mh[ 447 ].invokeExact(l, n, t); } + + // 448 + private static MethodType MT_bootstrap448 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap448 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap448", MT_bootstrap448 ()); + } + + private static MethodHandle INDY_call448; + private static MethodHandle INDY_call448 () throws Throwable { + if (INDY_call448 != null) return INDY_call448; + CallSite cs = (CallSite) MH_bootstrap448 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap448 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper448 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call448 ().invokeExact(o1, o2, o3); } + + static Object bootstrap448 (Object l, Object n, Object t) throws Throwable { return _mh[ 448 ].invokeExact(l, n, t); } + + // 449 + private static MethodType MT_bootstrap449 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap449 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap449", MT_bootstrap449 ()); + } + + private static MethodHandle INDY_call449; + private static MethodHandle INDY_call449 () throws Throwable { + if (INDY_call449 != null) return INDY_call449; + CallSite cs = (CallSite) MH_bootstrap449 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap449 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper449 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call449 ().invokeExact(o1, o2, o3); } + + static Object bootstrap449 (Object l, Object n, Object t) throws Throwable { return _mh[ 449 ].invokeExact(l, n, t); } + + // 450 + private static MethodType MT_bootstrap450 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap450 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap450", MT_bootstrap450 ()); + } + + private static MethodHandle INDY_call450; + private static MethodHandle INDY_call450 () throws Throwable { + if (INDY_call450 != null) return INDY_call450; + CallSite cs = (CallSite) MH_bootstrap450 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap450 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper450 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call450 ().invokeExact(o1, o2, o3); } + + static Object bootstrap450 (Object l, Object n, Object t) throws Throwable { return _mh[ 450 ].invokeExact(l, n, t); } + + // 451 + private static MethodType MT_bootstrap451 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap451 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap451", MT_bootstrap451 ()); + } + + private static MethodHandle INDY_call451; + private static MethodHandle INDY_call451 () throws Throwable { + if (INDY_call451 != null) return INDY_call451; + CallSite cs = (CallSite) MH_bootstrap451 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap451 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper451 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call451 ().invokeExact(o1, o2, o3); } + + static Object bootstrap451 (Object l, Object n, Object t) throws Throwable { return _mh[ 451 ].invokeExact(l, n, t); } + + // 452 + private static MethodType MT_bootstrap452 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap452 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap452", MT_bootstrap452 ()); + } + + private static MethodHandle INDY_call452; + private static MethodHandle INDY_call452 () throws Throwable { + if (INDY_call452 != null) return INDY_call452; + CallSite cs = (CallSite) MH_bootstrap452 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap452 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper452 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call452 ().invokeExact(o1, o2, o3); } + + static Object bootstrap452 (Object l, Object n, Object t) throws Throwable { return _mh[ 452 ].invokeExact(l, n, t); } + + // 453 + private static MethodType MT_bootstrap453 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap453 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap453", MT_bootstrap453 ()); + } + + private static MethodHandle INDY_call453; + private static MethodHandle INDY_call453 () throws Throwable { + if (INDY_call453 != null) return INDY_call453; + CallSite cs = (CallSite) MH_bootstrap453 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap453 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper453 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call453 ().invokeExact(o1, o2, o3); } + + static Object bootstrap453 (Object l, Object n, Object t) throws Throwable { return _mh[ 453 ].invokeExact(l, n, t); } + + // 454 + private static MethodType MT_bootstrap454 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap454 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap454", MT_bootstrap454 ()); + } + + private static MethodHandle INDY_call454; + private static MethodHandle INDY_call454 () throws Throwable { + if (INDY_call454 != null) return INDY_call454; + CallSite cs = (CallSite) MH_bootstrap454 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap454 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper454 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call454 ().invokeExact(o1, o2, o3); } + + static Object bootstrap454 (Object l, Object n, Object t) throws Throwable { return _mh[ 454 ].invokeExact(l, n, t); } + + // 455 + private static MethodType MT_bootstrap455 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap455 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap455", MT_bootstrap455 ()); + } + + private static MethodHandle INDY_call455; + private static MethodHandle INDY_call455 () throws Throwable { + if (INDY_call455 != null) return INDY_call455; + CallSite cs = (CallSite) MH_bootstrap455 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap455 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper455 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call455 ().invokeExact(o1, o2, o3); } + + static Object bootstrap455 (Object l, Object n, Object t) throws Throwable { return _mh[ 455 ].invokeExact(l, n, t); } + + // 456 + private static MethodType MT_bootstrap456 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap456 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap456", MT_bootstrap456 ()); + } + + private static MethodHandle INDY_call456; + private static MethodHandle INDY_call456 () throws Throwable { + if (INDY_call456 != null) return INDY_call456; + CallSite cs = (CallSite) MH_bootstrap456 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap456 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper456 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call456 ().invokeExact(o1, o2, o3); } + + static Object bootstrap456 (Object l, Object n, Object t) throws Throwable { return _mh[ 456 ].invokeExact(l, n, t); } + + // 457 + private static MethodType MT_bootstrap457 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap457 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap457", MT_bootstrap457 ()); + } + + private static MethodHandle INDY_call457; + private static MethodHandle INDY_call457 () throws Throwable { + if (INDY_call457 != null) return INDY_call457; + CallSite cs = (CallSite) MH_bootstrap457 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap457 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper457 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call457 ().invokeExact(o1, o2, o3); } + + static Object bootstrap457 (Object l, Object n, Object t) throws Throwable { return _mh[ 457 ].invokeExact(l, n, t); } + + // 458 + private static MethodType MT_bootstrap458 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap458 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap458", MT_bootstrap458 ()); + } + + private static MethodHandle INDY_call458; + private static MethodHandle INDY_call458 () throws Throwable { + if (INDY_call458 != null) return INDY_call458; + CallSite cs = (CallSite) MH_bootstrap458 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap458 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper458 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call458 ().invokeExact(o1, o2, o3); } + + static Object bootstrap458 (Object l, Object n, Object t) throws Throwable { return _mh[ 458 ].invokeExact(l, n, t); } + + // 459 + private static MethodType MT_bootstrap459 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap459 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap459", MT_bootstrap459 ()); + } + + private static MethodHandle INDY_call459; + private static MethodHandle INDY_call459 () throws Throwable { + if (INDY_call459 != null) return INDY_call459; + CallSite cs = (CallSite) MH_bootstrap459 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap459 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper459 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call459 ().invokeExact(o1, o2, o3); } + + static Object bootstrap459 (Object l, Object n, Object t) throws Throwable { return _mh[ 459 ].invokeExact(l, n, t); } + + // 460 + private static MethodType MT_bootstrap460 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap460 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap460", MT_bootstrap460 ()); + } + + private static MethodHandle INDY_call460; + private static MethodHandle INDY_call460 () throws Throwable { + if (INDY_call460 != null) return INDY_call460; + CallSite cs = (CallSite) MH_bootstrap460 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap460 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper460 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call460 ().invokeExact(o1, o2, o3); } + + static Object bootstrap460 (Object l, Object n, Object t) throws Throwable { return _mh[ 460 ].invokeExact(l, n, t); } + + // 461 + private static MethodType MT_bootstrap461 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap461 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap461", MT_bootstrap461 ()); + } + + private static MethodHandle INDY_call461; + private static MethodHandle INDY_call461 () throws Throwable { + if (INDY_call461 != null) return INDY_call461; + CallSite cs = (CallSite) MH_bootstrap461 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap461 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper461 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call461 ().invokeExact(o1, o2, o3); } + + static Object bootstrap461 (Object l, Object n, Object t) throws Throwable { return _mh[ 461 ].invokeExact(l, n, t); } + + // 462 + private static MethodType MT_bootstrap462 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap462 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap462", MT_bootstrap462 ()); + } + + private static MethodHandle INDY_call462; + private static MethodHandle INDY_call462 () throws Throwable { + if (INDY_call462 != null) return INDY_call462; + CallSite cs = (CallSite) MH_bootstrap462 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap462 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper462 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call462 ().invokeExact(o1, o2, o3); } + + static Object bootstrap462 (Object l, Object n, Object t) throws Throwable { return _mh[ 462 ].invokeExact(l, n, t); } + + // 463 + private static MethodType MT_bootstrap463 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap463 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap463", MT_bootstrap463 ()); + } + + private static MethodHandle INDY_call463; + private static MethodHandle INDY_call463 () throws Throwable { + if (INDY_call463 != null) return INDY_call463; + CallSite cs = (CallSite) MH_bootstrap463 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap463 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper463 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call463 ().invokeExact(o1, o2, o3); } + + static Object bootstrap463 (Object l, Object n, Object t) throws Throwable { return _mh[ 463 ].invokeExact(l, n, t); } + + // 464 + private static MethodType MT_bootstrap464 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap464 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap464", MT_bootstrap464 ()); + } + + private static MethodHandle INDY_call464; + private static MethodHandle INDY_call464 () throws Throwable { + if (INDY_call464 != null) return INDY_call464; + CallSite cs = (CallSite) MH_bootstrap464 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap464 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper464 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call464 ().invokeExact(o1, o2, o3); } + + static Object bootstrap464 (Object l, Object n, Object t) throws Throwable { return _mh[ 464 ].invokeExact(l, n, t); } + + // 465 + private static MethodType MT_bootstrap465 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap465 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap465", MT_bootstrap465 ()); + } + + private static MethodHandle INDY_call465; + private static MethodHandle INDY_call465 () throws Throwable { + if (INDY_call465 != null) return INDY_call465; + CallSite cs = (CallSite) MH_bootstrap465 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap465 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper465 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call465 ().invokeExact(o1, o2, o3); } + + static Object bootstrap465 (Object l, Object n, Object t) throws Throwable { return _mh[ 465 ].invokeExact(l, n, t); } + + // 466 + private static MethodType MT_bootstrap466 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap466 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap466", MT_bootstrap466 ()); + } + + private static MethodHandle INDY_call466; + private static MethodHandle INDY_call466 () throws Throwable { + if (INDY_call466 != null) return INDY_call466; + CallSite cs = (CallSite) MH_bootstrap466 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap466 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper466 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call466 ().invokeExact(o1, o2, o3); } + + static Object bootstrap466 (Object l, Object n, Object t) throws Throwable { return _mh[ 466 ].invokeExact(l, n, t); } + + // 467 + private static MethodType MT_bootstrap467 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap467 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap467", MT_bootstrap467 ()); + } + + private static MethodHandle INDY_call467; + private static MethodHandle INDY_call467 () throws Throwable { + if (INDY_call467 != null) return INDY_call467; + CallSite cs = (CallSite) MH_bootstrap467 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap467 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper467 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call467 ().invokeExact(o1, o2, o3); } + + static Object bootstrap467 (Object l, Object n, Object t) throws Throwable { return _mh[ 467 ].invokeExact(l, n, t); } + + // 468 + private static MethodType MT_bootstrap468 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap468 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap468", MT_bootstrap468 ()); + } + + private static MethodHandle INDY_call468; + private static MethodHandle INDY_call468 () throws Throwable { + if (INDY_call468 != null) return INDY_call468; + CallSite cs = (CallSite) MH_bootstrap468 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap468 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper468 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call468 ().invokeExact(o1, o2, o3); } + + static Object bootstrap468 (Object l, Object n, Object t) throws Throwable { return _mh[ 468 ].invokeExact(l, n, t); } + + // 469 + private static MethodType MT_bootstrap469 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap469 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap469", MT_bootstrap469 ()); + } + + private static MethodHandle INDY_call469; + private static MethodHandle INDY_call469 () throws Throwable { + if (INDY_call469 != null) return INDY_call469; + CallSite cs = (CallSite) MH_bootstrap469 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap469 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper469 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call469 ().invokeExact(o1, o2, o3); } + + static Object bootstrap469 (Object l, Object n, Object t) throws Throwable { return _mh[ 469 ].invokeExact(l, n, t); } + + // 470 + private static MethodType MT_bootstrap470 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap470 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap470", MT_bootstrap470 ()); + } + + private static MethodHandle INDY_call470; + private static MethodHandle INDY_call470 () throws Throwable { + if (INDY_call470 != null) return INDY_call470; + CallSite cs = (CallSite) MH_bootstrap470 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap470 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper470 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call470 ().invokeExact(o1, o2, o3); } + + static Object bootstrap470 (Object l, Object n, Object t) throws Throwable { return _mh[ 470 ].invokeExact(l, n, t); } + + // 471 + private static MethodType MT_bootstrap471 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap471 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap471", MT_bootstrap471 ()); + } + + private static MethodHandle INDY_call471; + private static MethodHandle INDY_call471 () throws Throwable { + if (INDY_call471 != null) return INDY_call471; + CallSite cs = (CallSite) MH_bootstrap471 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap471 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper471 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call471 ().invokeExact(o1, o2, o3); } + + static Object bootstrap471 (Object l, Object n, Object t) throws Throwable { return _mh[ 471 ].invokeExact(l, n, t); } + + // 472 + private static MethodType MT_bootstrap472 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap472 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap472", MT_bootstrap472 ()); + } + + private static MethodHandle INDY_call472; + private static MethodHandle INDY_call472 () throws Throwable { + if (INDY_call472 != null) return INDY_call472; + CallSite cs = (CallSite) MH_bootstrap472 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap472 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper472 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call472 ().invokeExact(o1, o2, o3); } + + static Object bootstrap472 (Object l, Object n, Object t) throws Throwable { return _mh[ 472 ].invokeExact(l, n, t); } + + // 473 + private static MethodType MT_bootstrap473 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap473 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap473", MT_bootstrap473 ()); + } + + private static MethodHandle INDY_call473; + private static MethodHandle INDY_call473 () throws Throwable { + if (INDY_call473 != null) return INDY_call473; + CallSite cs = (CallSite) MH_bootstrap473 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap473 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper473 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call473 ().invokeExact(o1, o2, o3); } + + static Object bootstrap473 (Object l, Object n, Object t) throws Throwable { return _mh[ 473 ].invokeExact(l, n, t); } + + // 474 + private static MethodType MT_bootstrap474 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap474 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap474", MT_bootstrap474 ()); + } + + private static MethodHandle INDY_call474; + private static MethodHandle INDY_call474 () throws Throwable { + if (INDY_call474 != null) return INDY_call474; + CallSite cs = (CallSite) MH_bootstrap474 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap474 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper474 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call474 ().invokeExact(o1, o2, o3); } + + static Object bootstrap474 (Object l, Object n, Object t) throws Throwable { return _mh[ 474 ].invokeExact(l, n, t); } + + // 475 + private static MethodType MT_bootstrap475 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap475 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap475", MT_bootstrap475 ()); + } + + private static MethodHandle INDY_call475; + private static MethodHandle INDY_call475 () throws Throwable { + if (INDY_call475 != null) return INDY_call475; + CallSite cs = (CallSite) MH_bootstrap475 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap475 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper475 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call475 ().invokeExact(o1, o2, o3); } + + static Object bootstrap475 (Object l, Object n, Object t) throws Throwable { return _mh[ 475 ].invokeExact(l, n, t); } + + // 476 + private static MethodType MT_bootstrap476 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap476 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap476", MT_bootstrap476 ()); + } + + private static MethodHandle INDY_call476; + private static MethodHandle INDY_call476 () throws Throwable { + if (INDY_call476 != null) return INDY_call476; + CallSite cs = (CallSite) MH_bootstrap476 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap476 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper476 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call476 ().invokeExact(o1, o2, o3); } + + static Object bootstrap476 (Object l, Object n, Object t) throws Throwable { return _mh[ 476 ].invokeExact(l, n, t); } + + // 477 + private static MethodType MT_bootstrap477 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap477 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap477", MT_bootstrap477 ()); + } + + private static MethodHandle INDY_call477; + private static MethodHandle INDY_call477 () throws Throwable { + if (INDY_call477 != null) return INDY_call477; + CallSite cs = (CallSite) MH_bootstrap477 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap477 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper477 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call477 ().invokeExact(o1, o2, o3); } + + static Object bootstrap477 (Object l, Object n, Object t) throws Throwable { return _mh[ 477 ].invokeExact(l, n, t); } + + // 478 + private static MethodType MT_bootstrap478 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap478 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap478", MT_bootstrap478 ()); + } + + private static MethodHandle INDY_call478; + private static MethodHandle INDY_call478 () throws Throwable { + if (INDY_call478 != null) return INDY_call478; + CallSite cs = (CallSite) MH_bootstrap478 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap478 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper478 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call478 ().invokeExact(o1, o2, o3); } + + static Object bootstrap478 (Object l, Object n, Object t) throws Throwable { return _mh[ 478 ].invokeExact(l, n, t); } + + // 479 + private static MethodType MT_bootstrap479 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap479 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap479", MT_bootstrap479 ()); + } + + private static MethodHandle INDY_call479; + private static MethodHandle INDY_call479 () throws Throwable { + if (INDY_call479 != null) return INDY_call479; + CallSite cs = (CallSite) MH_bootstrap479 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap479 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper479 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call479 ().invokeExact(o1, o2, o3); } + + static Object bootstrap479 (Object l, Object n, Object t) throws Throwable { return _mh[ 479 ].invokeExact(l, n, t); } + + // 480 + private static MethodType MT_bootstrap480 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap480 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap480", MT_bootstrap480 ()); + } + + private static MethodHandle INDY_call480; + private static MethodHandle INDY_call480 () throws Throwable { + if (INDY_call480 != null) return INDY_call480; + CallSite cs = (CallSite) MH_bootstrap480 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap480 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper480 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call480 ().invokeExact(o1, o2, o3); } + + static Object bootstrap480 (Object l, Object n, Object t) throws Throwable { return _mh[ 480 ].invokeExact(l, n, t); } + + // 481 + private static MethodType MT_bootstrap481 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap481 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap481", MT_bootstrap481 ()); + } + + private static MethodHandle INDY_call481; + private static MethodHandle INDY_call481 () throws Throwable { + if (INDY_call481 != null) return INDY_call481; + CallSite cs = (CallSite) MH_bootstrap481 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap481 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper481 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call481 ().invokeExact(o1, o2, o3); } + + static Object bootstrap481 (Object l, Object n, Object t) throws Throwable { return _mh[ 481 ].invokeExact(l, n, t); } + + // 482 + private static MethodType MT_bootstrap482 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap482 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap482", MT_bootstrap482 ()); + } + + private static MethodHandle INDY_call482; + private static MethodHandle INDY_call482 () throws Throwable { + if (INDY_call482 != null) return INDY_call482; + CallSite cs = (CallSite) MH_bootstrap482 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap482 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper482 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call482 ().invokeExact(o1, o2, o3); } + + static Object bootstrap482 (Object l, Object n, Object t) throws Throwable { return _mh[ 482 ].invokeExact(l, n, t); } + + // 483 + private static MethodType MT_bootstrap483 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap483 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap483", MT_bootstrap483 ()); + } + + private static MethodHandle INDY_call483; + private static MethodHandle INDY_call483 () throws Throwable { + if (INDY_call483 != null) return INDY_call483; + CallSite cs = (CallSite) MH_bootstrap483 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap483 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper483 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call483 ().invokeExact(o1, o2, o3); } + + static Object bootstrap483 (Object l, Object n, Object t) throws Throwable { return _mh[ 483 ].invokeExact(l, n, t); } + + // 484 + private static MethodType MT_bootstrap484 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap484 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap484", MT_bootstrap484 ()); + } + + private static MethodHandle INDY_call484; + private static MethodHandle INDY_call484 () throws Throwable { + if (INDY_call484 != null) return INDY_call484; + CallSite cs = (CallSite) MH_bootstrap484 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap484 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper484 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call484 ().invokeExact(o1, o2, o3); } + + static Object bootstrap484 (Object l, Object n, Object t) throws Throwable { return _mh[ 484 ].invokeExact(l, n, t); } + + // 485 + private static MethodType MT_bootstrap485 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap485 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap485", MT_bootstrap485 ()); + } + + private static MethodHandle INDY_call485; + private static MethodHandle INDY_call485 () throws Throwable { + if (INDY_call485 != null) return INDY_call485; + CallSite cs = (CallSite) MH_bootstrap485 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap485 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper485 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call485 ().invokeExact(o1, o2, o3); } + + static Object bootstrap485 (Object l, Object n, Object t) throws Throwable { return _mh[ 485 ].invokeExact(l, n, t); } + + // 486 + private static MethodType MT_bootstrap486 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap486 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap486", MT_bootstrap486 ()); + } + + private static MethodHandle INDY_call486; + private static MethodHandle INDY_call486 () throws Throwable { + if (INDY_call486 != null) return INDY_call486; + CallSite cs = (CallSite) MH_bootstrap486 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap486 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper486 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call486 ().invokeExact(o1, o2, o3); } + + static Object bootstrap486 (Object l, Object n, Object t) throws Throwable { return _mh[ 486 ].invokeExact(l, n, t); } + + // 487 + private static MethodType MT_bootstrap487 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap487 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap487", MT_bootstrap487 ()); + } + + private static MethodHandle INDY_call487; + private static MethodHandle INDY_call487 () throws Throwable { + if (INDY_call487 != null) return INDY_call487; + CallSite cs = (CallSite) MH_bootstrap487 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap487 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper487 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call487 ().invokeExact(o1, o2, o3); } + + static Object bootstrap487 (Object l, Object n, Object t) throws Throwable { return _mh[ 487 ].invokeExact(l, n, t); } + + // 488 + private static MethodType MT_bootstrap488 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap488 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap488", MT_bootstrap488 ()); + } + + private static MethodHandle INDY_call488; + private static MethodHandle INDY_call488 () throws Throwable { + if (INDY_call488 != null) return INDY_call488; + CallSite cs = (CallSite) MH_bootstrap488 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap488 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper488 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call488 ().invokeExact(o1, o2, o3); } + + static Object bootstrap488 (Object l, Object n, Object t) throws Throwable { return _mh[ 488 ].invokeExact(l, n, t); } + + // 489 + private static MethodType MT_bootstrap489 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap489 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap489", MT_bootstrap489 ()); + } + + private static MethodHandle INDY_call489; + private static MethodHandle INDY_call489 () throws Throwable { + if (INDY_call489 != null) return INDY_call489; + CallSite cs = (CallSite) MH_bootstrap489 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap489 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper489 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call489 ().invokeExact(o1, o2, o3); } + + static Object bootstrap489 (Object l, Object n, Object t) throws Throwable { return _mh[ 489 ].invokeExact(l, n, t); } + + // 490 + private static MethodType MT_bootstrap490 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap490 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap490", MT_bootstrap490 ()); + } + + private static MethodHandle INDY_call490; + private static MethodHandle INDY_call490 () throws Throwable { + if (INDY_call490 != null) return INDY_call490; + CallSite cs = (CallSite) MH_bootstrap490 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap490 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper490 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call490 ().invokeExact(o1, o2, o3); } + + static Object bootstrap490 (Object l, Object n, Object t) throws Throwable { return _mh[ 490 ].invokeExact(l, n, t); } + + // 491 + private static MethodType MT_bootstrap491 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap491 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap491", MT_bootstrap491 ()); + } + + private static MethodHandle INDY_call491; + private static MethodHandle INDY_call491 () throws Throwable { + if (INDY_call491 != null) return INDY_call491; + CallSite cs = (CallSite) MH_bootstrap491 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap491 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper491 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call491 ().invokeExact(o1, o2, o3); } + + static Object bootstrap491 (Object l, Object n, Object t) throws Throwable { return _mh[ 491 ].invokeExact(l, n, t); } + + // 492 + private static MethodType MT_bootstrap492 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap492 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap492", MT_bootstrap492 ()); + } + + private static MethodHandle INDY_call492; + private static MethodHandle INDY_call492 () throws Throwable { + if (INDY_call492 != null) return INDY_call492; + CallSite cs = (CallSite) MH_bootstrap492 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap492 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper492 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call492 ().invokeExact(o1, o2, o3); } + + static Object bootstrap492 (Object l, Object n, Object t) throws Throwable { return _mh[ 492 ].invokeExact(l, n, t); } + + // 493 + private static MethodType MT_bootstrap493 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap493 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap493", MT_bootstrap493 ()); + } + + private static MethodHandle INDY_call493; + private static MethodHandle INDY_call493 () throws Throwable { + if (INDY_call493 != null) return INDY_call493; + CallSite cs = (CallSite) MH_bootstrap493 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap493 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper493 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call493 ().invokeExact(o1, o2, o3); } + + static Object bootstrap493 (Object l, Object n, Object t) throws Throwable { return _mh[ 493 ].invokeExact(l, n, t); } + + // 494 + private static MethodType MT_bootstrap494 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap494 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap494", MT_bootstrap494 ()); + } + + private static MethodHandle INDY_call494; + private static MethodHandle INDY_call494 () throws Throwable { + if (INDY_call494 != null) return INDY_call494; + CallSite cs = (CallSite) MH_bootstrap494 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap494 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper494 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call494 ().invokeExact(o1, o2, o3); } + + static Object bootstrap494 (Object l, Object n, Object t) throws Throwable { return _mh[ 494 ].invokeExact(l, n, t); } + + // 495 + private static MethodType MT_bootstrap495 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap495 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap495", MT_bootstrap495 ()); + } + + private static MethodHandle INDY_call495; + private static MethodHandle INDY_call495 () throws Throwable { + if (INDY_call495 != null) return INDY_call495; + CallSite cs = (CallSite) MH_bootstrap495 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap495 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper495 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call495 ().invokeExact(o1, o2, o3); } + + static Object bootstrap495 (Object l, Object n, Object t) throws Throwable { return _mh[ 495 ].invokeExact(l, n, t); } + + // 496 + private static MethodType MT_bootstrap496 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap496 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap496", MT_bootstrap496 ()); + } + + private static MethodHandle INDY_call496; + private static MethodHandle INDY_call496 () throws Throwable { + if (INDY_call496 != null) return INDY_call496; + CallSite cs = (CallSite) MH_bootstrap496 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap496 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper496 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call496 ().invokeExact(o1, o2, o3); } + + static Object bootstrap496 (Object l, Object n, Object t) throws Throwable { return _mh[ 496 ].invokeExact(l, n, t); } + + // 497 + private static MethodType MT_bootstrap497 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap497 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap497", MT_bootstrap497 ()); + } + + private static MethodHandle INDY_call497; + private static MethodHandle INDY_call497 () throws Throwable { + if (INDY_call497 != null) return INDY_call497; + CallSite cs = (CallSite) MH_bootstrap497 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap497 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper497 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call497 ().invokeExact(o1, o2, o3); } + + static Object bootstrap497 (Object l, Object n, Object t) throws Throwable { return _mh[ 497 ].invokeExact(l, n, t); } + + // 498 + private static MethodType MT_bootstrap498 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap498 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap498", MT_bootstrap498 ()); + } + + private static MethodHandle INDY_call498; + private static MethodHandle INDY_call498 () throws Throwable { + if (INDY_call498 != null) return INDY_call498; + CallSite cs = (CallSite) MH_bootstrap498 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap498 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper498 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call498 ().invokeExact(o1, o2, o3); } + + static Object bootstrap498 (Object l, Object n, Object t) throws Throwable { return _mh[ 498 ].invokeExact(l, n, t); } + + // 499 + private static MethodType MT_bootstrap499 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap499 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap499", MT_bootstrap499 ()); + } + + private static MethodHandle INDY_call499; + private static MethodHandle INDY_call499 () throws Throwable { + if (INDY_call499 != null) return INDY_call499; + CallSite cs = (CallSite) MH_bootstrap499 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap499 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper499 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call499 ().invokeExact(o1, o2, o3); } + + static Object bootstrap499 (Object l, Object n, Object t) throws Throwable { return _mh[ 499 ].invokeExact(l, n, t); } + + // 500 + private static MethodType MT_bootstrap500 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap500 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap500", MT_bootstrap500 ()); + } + + private static MethodHandle INDY_call500; + private static MethodHandle INDY_call500 () throws Throwable { + if (INDY_call500 != null) return INDY_call500; + CallSite cs = (CallSite) MH_bootstrap500 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap500 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper500 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call500 ().invokeExact(o1, o2, o3); } + + static Object bootstrap500 (Object l, Object n, Object t) throws Throwable { return _mh[ 500 ].invokeExact(l, n, t); } + + // 501 + private static MethodType MT_bootstrap501 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap501 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap501", MT_bootstrap501 ()); + } + + private static MethodHandle INDY_call501; + private static MethodHandle INDY_call501 () throws Throwable { + if (INDY_call501 != null) return INDY_call501; + CallSite cs = (CallSite) MH_bootstrap501 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap501 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper501 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call501 ().invokeExact(o1, o2, o3); } + + static Object bootstrap501 (Object l, Object n, Object t) throws Throwable { return _mh[ 501 ].invokeExact(l, n, t); } + + // 502 + private static MethodType MT_bootstrap502 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap502 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap502", MT_bootstrap502 ()); + } + + private static MethodHandle INDY_call502; + private static MethodHandle INDY_call502 () throws Throwable { + if (INDY_call502 != null) return INDY_call502; + CallSite cs = (CallSite) MH_bootstrap502 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap502 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper502 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call502 ().invokeExact(o1, o2, o3); } + + static Object bootstrap502 (Object l, Object n, Object t) throws Throwable { return _mh[ 502 ].invokeExact(l, n, t); } + + // 503 + private static MethodType MT_bootstrap503 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap503 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap503", MT_bootstrap503 ()); + } + + private static MethodHandle INDY_call503; + private static MethodHandle INDY_call503 () throws Throwable { + if (INDY_call503 != null) return INDY_call503; + CallSite cs = (CallSite) MH_bootstrap503 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap503 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper503 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call503 ().invokeExact(o1, o2, o3); } + + static Object bootstrap503 (Object l, Object n, Object t) throws Throwable { return _mh[ 503 ].invokeExact(l, n, t); } + + // 504 + private static MethodType MT_bootstrap504 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap504 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap504", MT_bootstrap504 ()); + } + + private static MethodHandle INDY_call504; + private static MethodHandle INDY_call504 () throws Throwable { + if (INDY_call504 != null) return INDY_call504; + CallSite cs = (CallSite) MH_bootstrap504 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap504 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper504 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call504 ().invokeExact(o1, o2, o3); } + + static Object bootstrap504 (Object l, Object n, Object t) throws Throwable { return _mh[ 504 ].invokeExact(l, n, t); } + + // 505 + private static MethodType MT_bootstrap505 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap505 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap505", MT_bootstrap505 ()); + } + + private static MethodHandle INDY_call505; + private static MethodHandle INDY_call505 () throws Throwable { + if (INDY_call505 != null) return INDY_call505; + CallSite cs = (CallSite) MH_bootstrap505 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap505 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper505 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call505 ().invokeExact(o1, o2, o3); } + + static Object bootstrap505 (Object l, Object n, Object t) throws Throwable { return _mh[ 505 ].invokeExact(l, n, t); } + + // 506 + private static MethodType MT_bootstrap506 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap506 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap506", MT_bootstrap506 ()); + } + + private static MethodHandle INDY_call506; + private static MethodHandle INDY_call506 () throws Throwable { + if (INDY_call506 != null) return INDY_call506; + CallSite cs = (CallSite) MH_bootstrap506 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap506 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper506 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call506 ().invokeExact(o1, o2, o3); } + + static Object bootstrap506 (Object l, Object n, Object t) throws Throwable { return _mh[ 506 ].invokeExact(l, n, t); } + + // 507 + private static MethodType MT_bootstrap507 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap507 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap507", MT_bootstrap507 ()); + } + + private static MethodHandle INDY_call507; + private static MethodHandle INDY_call507 () throws Throwable { + if (INDY_call507 != null) return INDY_call507; + CallSite cs = (CallSite) MH_bootstrap507 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap507 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper507 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call507 ().invokeExact(o1, o2, o3); } + + static Object bootstrap507 (Object l, Object n, Object t) throws Throwable { return _mh[ 507 ].invokeExact(l, n, t); } + + // 508 + private static MethodType MT_bootstrap508 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap508 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap508", MT_bootstrap508 ()); + } + + private static MethodHandle INDY_call508; + private static MethodHandle INDY_call508 () throws Throwable { + if (INDY_call508 != null) return INDY_call508; + CallSite cs = (CallSite) MH_bootstrap508 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap508 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper508 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call508 ().invokeExact(o1, o2, o3); } + + static Object bootstrap508 (Object l, Object n, Object t) throws Throwable { return _mh[ 508 ].invokeExact(l, n, t); } + + // 509 + private static MethodType MT_bootstrap509 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap509 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap509", MT_bootstrap509 ()); + } + + private static MethodHandle INDY_call509; + private static MethodHandle INDY_call509 () throws Throwable { + if (INDY_call509 != null) return INDY_call509; + CallSite cs = (CallSite) MH_bootstrap509 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap509 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper509 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call509 ().invokeExact(o1, o2, o3); } + + static Object bootstrap509 (Object l, Object n, Object t) throws Throwable { return _mh[ 509 ].invokeExact(l, n, t); } + + // 510 + private static MethodType MT_bootstrap510 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap510 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap510", MT_bootstrap510 ()); + } + + private static MethodHandle INDY_call510; + private static MethodHandle INDY_call510 () throws Throwable { + if (INDY_call510 != null) return INDY_call510; + CallSite cs = (CallSite) MH_bootstrap510 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap510 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper510 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call510 ().invokeExact(o1, o2, o3); } + + static Object bootstrap510 (Object l, Object n, Object t) throws Throwable { return _mh[ 510 ].invokeExact(l, n, t); } + + // 511 + private static MethodType MT_bootstrap511 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap511 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap511", MT_bootstrap511 ()); + } + + private static MethodHandle INDY_call511; + private static MethodHandle INDY_call511 () throws Throwable { + if (INDY_call511 != null) return INDY_call511; + CallSite cs = (CallSite) MH_bootstrap511 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap511 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper511 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call511 ().invokeExact(o1, o2, o3); } + + static Object bootstrap511 (Object l, Object n, Object t) throws Throwable { return _mh[ 511 ].invokeExact(l, n, t); } + + // 512 + private static MethodType MT_bootstrap512 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap512 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap512", MT_bootstrap512 ()); + } + + private static MethodHandle INDY_call512; + private static MethodHandle INDY_call512 () throws Throwable { + if (INDY_call512 != null) return INDY_call512; + CallSite cs = (CallSite) MH_bootstrap512 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap512 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper512 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call512 ().invokeExact(o1, o2, o3); } + + static Object bootstrap512 (Object l, Object n, Object t) throws Throwable { return _mh[ 512 ].invokeExact(l, n, t); } + + // 513 + private static MethodType MT_bootstrap513 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap513 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap513", MT_bootstrap513 ()); + } + + private static MethodHandle INDY_call513; + private static MethodHandle INDY_call513 () throws Throwable { + if (INDY_call513 != null) return INDY_call513; + CallSite cs = (CallSite) MH_bootstrap513 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap513 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper513 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call513 ().invokeExact(o1, o2, o3); } + + static Object bootstrap513 (Object l, Object n, Object t) throws Throwable { return _mh[ 513 ].invokeExact(l, n, t); } + + // 514 + private static MethodType MT_bootstrap514 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap514 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap514", MT_bootstrap514 ()); + } + + private static MethodHandle INDY_call514; + private static MethodHandle INDY_call514 () throws Throwable { + if (INDY_call514 != null) return INDY_call514; + CallSite cs = (CallSite) MH_bootstrap514 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap514 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper514 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call514 ().invokeExact(o1, o2, o3); } + + static Object bootstrap514 (Object l, Object n, Object t) throws Throwable { return _mh[ 514 ].invokeExact(l, n, t); } + + // 515 + private static MethodType MT_bootstrap515 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap515 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap515", MT_bootstrap515 ()); + } + + private static MethodHandle INDY_call515; + private static MethodHandle INDY_call515 () throws Throwable { + if (INDY_call515 != null) return INDY_call515; + CallSite cs = (CallSite) MH_bootstrap515 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap515 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper515 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call515 ().invokeExact(o1, o2, o3); } + + static Object bootstrap515 (Object l, Object n, Object t) throws Throwable { return _mh[ 515 ].invokeExact(l, n, t); } + + // 516 + private static MethodType MT_bootstrap516 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap516 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap516", MT_bootstrap516 ()); + } + + private static MethodHandle INDY_call516; + private static MethodHandle INDY_call516 () throws Throwable { + if (INDY_call516 != null) return INDY_call516; + CallSite cs = (CallSite) MH_bootstrap516 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap516 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper516 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call516 ().invokeExact(o1, o2, o3); } + + static Object bootstrap516 (Object l, Object n, Object t) throws Throwable { return _mh[ 516 ].invokeExact(l, n, t); } + + // 517 + private static MethodType MT_bootstrap517 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap517 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap517", MT_bootstrap517 ()); + } + + private static MethodHandle INDY_call517; + private static MethodHandle INDY_call517 () throws Throwable { + if (INDY_call517 != null) return INDY_call517; + CallSite cs = (CallSite) MH_bootstrap517 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap517 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper517 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call517 ().invokeExact(o1, o2, o3); } + + static Object bootstrap517 (Object l, Object n, Object t) throws Throwable { return _mh[ 517 ].invokeExact(l, n, t); } + + // 518 + private static MethodType MT_bootstrap518 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap518 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap518", MT_bootstrap518 ()); + } + + private static MethodHandle INDY_call518; + private static MethodHandle INDY_call518 () throws Throwable { + if (INDY_call518 != null) return INDY_call518; + CallSite cs = (CallSite) MH_bootstrap518 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap518 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper518 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call518 ().invokeExact(o1, o2, o3); } + + static Object bootstrap518 (Object l, Object n, Object t) throws Throwable { return _mh[ 518 ].invokeExact(l, n, t); } + + // 519 + private static MethodType MT_bootstrap519 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap519 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap519", MT_bootstrap519 ()); + } + + private static MethodHandle INDY_call519; + private static MethodHandle INDY_call519 () throws Throwable { + if (INDY_call519 != null) return INDY_call519; + CallSite cs = (CallSite) MH_bootstrap519 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap519 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper519 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call519 ().invokeExact(o1, o2, o3); } + + static Object bootstrap519 (Object l, Object n, Object t) throws Throwable { return _mh[ 519 ].invokeExact(l, n, t); } + + // 520 + private static MethodType MT_bootstrap520 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap520 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap520", MT_bootstrap520 ()); + } + + private static MethodHandle INDY_call520; + private static MethodHandle INDY_call520 () throws Throwable { + if (INDY_call520 != null) return INDY_call520; + CallSite cs = (CallSite) MH_bootstrap520 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap520 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper520 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call520 ().invokeExact(o1, o2, o3); } + + static Object bootstrap520 (Object l, Object n, Object t) throws Throwable { return _mh[ 520 ].invokeExact(l, n, t); } + + // 521 + private static MethodType MT_bootstrap521 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap521 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap521", MT_bootstrap521 ()); + } + + private static MethodHandle INDY_call521; + private static MethodHandle INDY_call521 () throws Throwable { + if (INDY_call521 != null) return INDY_call521; + CallSite cs = (CallSite) MH_bootstrap521 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap521 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper521 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call521 ().invokeExact(o1, o2, o3); } + + static Object bootstrap521 (Object l, Object n, Object t) throws Throwable { return _mh[ 521 ].invokeExact(l, n, t); } + + // 522 + private static MethodType MT_bootstrap522 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap522 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap522", MT_bootstrap522 ()); + } + + private static MethodHandle INDY_call522; + private static MethodHandle INDY_call522 () throws Throwable { + if (INDY_call522 != null) return INDY_call522; + CallSite cs = (CallSite) MH_bootstrap522 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap522 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper522 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call522 ().invokeExact(o1, o2, o3); } + + static Object bootstrap522 (Object l, Object n, Object t) throws Throwable { return _mh[ 522 ].invokeExact(l, n, t); } + + // 523 + private static MethodType MT_bootstrap523 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap523 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap523", MT_bootstrap523 ()); + } + + private static MethodHandle INDY_call523; + private static MethodHandle INDY_call523 () throws Throwable { + if (INDY_call523 != null) return INDY_call523; + CallSite cs = (CallSite) MH_bootstrap523 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap523 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper523 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call523 ().invokeExact(o1, o2, o3); } + + static Object bootstrap523 (Object l, Object n, Object t) throws Throwable { return _mh[ 523 ].invokeExact(l, n, t); } + + // 524 + private static MethodType MT_bootstrap524 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap524 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap524", MT_bootstrap524 ()); + } + + private static MethodHandle INDY_call524; + private static MethodHandle INDY_call524 () throws Throwable { + if (INDY_call524 != null) return INDY_call524; + CallSite cs = (CallSite) MH_bootstrap524 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap524 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper524 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call524 ().invokeExact(o1, o2, o3); } + + static Object bootstrap524 (Object l, Object n, Object t) throws Throwable { return _mh[ 524 ].invokeExact(l, n, t); } + + // 525 + private static MethodType MT_bootstrap525 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap525 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap525", MT_bootstrap525 ()); + } + + private static MethodHandle INDY_call525; + private static MethodHandle INDY_call525 () throws Throwable { + if (INDY_call525 != null) return INDY_call525; + CallSite cs = (CallSite) MH_bootstrap525 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap525 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper525 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call525 ().invokeExact(o1, o2, o3); } + + static Object bootstrap525 (Object l, Object n, Object t) throws Throwable { return _mh[ 525 ].invokeExact(l, n, t); } + + // 526 + private static MethodType MT_bootstrap526 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap526 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap526", MT_bootstrap526 ()); + } + + private static MethodHandle INDY_call526; + private static MethodHandle INDY_call526 () throws Throwable { + if (INDY_call526 != null) return INDY_call526; + CallSite cs = (CallSite) MH_bootstrap526 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap526 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper526 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call526 ().invokeExact(o1, o2, o3); } + + static Object bootstrap526 (Object l, Object n, Object t) throws Throwable { return _mh[ 526 ].invokeExact(l, n, t); } + + // 527 + private static MethodType MT_bootstrap527 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap527 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap527", MT_bootstrap527 ()); + } + + private static MethodHandle INDY_call527; + private static MethodHandle INDY_call527 () throws Throwable { + if (INDY_call527 != null) return INDY_call527; + CallSite cs = (CallSite) MH_bootstrap527 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap527 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper527 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call527 ().invokeExact(o1, o2, o3); } + + static Object bootstrap527 (Object l, Object n, Object t) throws Throwable { return _mh[ 527 ].invokeExact(l, n, t); } + + // 528 + private static MethodType MT_bootstrap528 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap528 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap528", MT_bootstrap528 ()); + } + + private static MethodHandle INDY_call528; + private static MethodHandle INDY_call528 () throws Throwable { + if (INDY_call528 != null) return INDY_call528; + CallSite cs = (CallSite) MH_bootstrap528 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap528 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper528 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call528 ().invokeExact(o1, o2, o3); } + + static Object bootstrap528 (Object l, Object n, Object t) throws Throwable { return _mh[ 528 ].invokeExact(l, n, t); } + + // 529 + private static MethodType MT_bootstrap529 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap529 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap529", MT_bootstrap529 ()); + } + + private static MethodHandle INDY_call529; + private static MethodHandle INDY_call529 () throws Throwable { + if (INDY_call529 != null) return INDY_call529; + CallSite cs = (CallSite) MH_bootstrap529 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap529 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper529 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call529 ().invokeExact(o1, o2, o3); } + + static Object bootstrap529 (Object l, Object n, Object t) throws Throwable { return _mh[ 529 ].invokeExact(l, n, t); } + + // 530 + private static MethodType MT_bootstrap530 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap530 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap530", MT_bootstrap530 ()); + } + + private static MethodHandle INDY_call530; + private static MethodHandle INDY_call530 () throws Throwable { + if (INDY_call530 != null) return INDY_call530; + CallSite cs = (CallSite) MH_bootstrap530 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap530 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper530 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call530 ().invokeExact(o1, o2, o3); } + + static Object bootstrap530 (Object l, Object n, Object t) throws Throwable { return _mh[ 530 ].invokeExact(l, n, t); } + + // 531 + private static MethodType MT_bootstrap531 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap531 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap531", MT_bootstrap531 ()); + } + + private static MethodHandle INDY_call531; + private static MethodHandle INDY_call531 () throws Throwable { + if (INDY_call531 != null) return INDY_call531; + CallSite cs = (CallSite) MH_bootstrap531 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap531 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper531 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call531 ().invokeExact(o1, o2, o3); } + + static Object bootstrap531 (Object l, Object n, Object t) throws Throwable { return _mh[ 531 ].invokeExact(l, n, t); } + + // 532 + private static MethodType MT_bootstrap532 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap532 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap532", MT_bootstrap532 ()); + } + + private static MethodHandle INDY_call532; + private static MethodHandle INDY_call532 () throws Throwable { + if (INDY_call532 != null) return INDY_call532; + CallSite cs = (CallSite) MH_bootstrap532 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap532 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper532 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call532 ().invokeExact(o1, o2, o3); } + + static Object bootstrap532 (Object l, Object n, Object t) throws Throwable { return _mh[ 532 ].invokeExact(l, n, t); } + + // 533 + private static MethodType MT_bootstrap533 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap533 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap533", MT_bootstrap533 ()); + } + + private static MethodHandle INDY_call533; + private static MethodHandle INDY_call533 () throws Throwable { + if (INDY_call533 != null) return INDY_call533; + CallSite cs = (CallSite) MH_bootstrap533 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap533 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper533 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call533 ().invokeExact(o1, o2, o3); } + + static Object bootstrap533 (Object l, Object n, Object t) throws Throwable { return _mh[ 533 ].invokeExact(l, n, t); } + + // 534 + private static MethodType MT_bootstrap534 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap534 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap534", MT_bootstrap534 ()); + } + + private static MethodHandle INDY_call534; + private static MethodHandle INDY_call534 () throws Throwable { + if (INDY_call534 != null) return INDY_call534; + CallSite cs = (CallSite) MH_bootstrap534 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap534 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper534 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call534 ().invokeExact(o1, o2, o3); } + + static Object bootstrap534 (Object l, Object n, Object t) throws Throwable { return _mh[ 534 ].invokeExact(l, n, t); } + + // 535 + private static MethodType MT_bootstrap535 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap535 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap535", MT_bootstrap535 ()); + } + + private static MethodHandle INDY_call535; + private static MethodHandle INDY_call535 () throws Throwable { + if (INDY_call535 != null) return INDY_call535; + CallSite cs = (CallSite) MH_bootstrap535 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap535 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper535 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call535 ().invokeExact(o1, o2, o3); } + + static Object bootstrap535 (Object l, Object n, Object t) throws Throwable { return _mh[ 535 ].invokeExact(l, n, t); } + + // 536 + private static MethodType MT_bootstrap536 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap536 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap536", MT_bootstrap536 ()); + } + + private static MethodHandle INDY_call536; + private static MethodHandle INDY_call536 () throws Throwable { + if (INDY_call536 != null) return INDY_call536; + CallSite cs = (CallSite) MH_bootstrap536 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap536 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper536 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call536 ().invokeExact(o1, o2, o3); } + + static Object bootstrap536 (Object l, Object n, Object t) throws Throwable { return _mh[ 536 ].invokeExact(l, n, t); } + + // 537 + private static MethodType MT_bootstrap537 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap537 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap537", MT_bootstrap537 ()); + } + + private static MethodHandle INDY_call537; + private static MethodHandle INDY_call537 () throws Throwable { + if (INDY_call537 != null) return INDY_call537; + CallSite cs = (CallSite) MH_bootstrap537 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap537 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper537 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call537 ().invokeExact(o1, o2, o3); } + + static Object bootstrap537 (Object l, Object n, Object t) throws Throwable { return _mh[ 537 ].invokeExact(l, n, t); } + + // 538 + private static MethodType MT_bootstrap538 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap538 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap538", MT_bootstrap538 ()); + } + + private static MethodHandle INDY_call538; + private static MethodHandle INDY_call538 () throws Throwable { + if (INDY_call538 != null) return INDY_call538; + CallSite cs = (CallSite) MH_bootstrap538 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap538 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper538 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call538 ().invokeExact(o1, o2, o3); } + + static Object bootstrap538 (Object l, Object n, Object t) throws Throwable { return _mh[ 538 ].invokeExact(l, n, t); } + + // 539 + private static MethodType MT_bootstrap539 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap539 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap539", MT_bootstrap539 ()); + } + + private static MethodHandle INDY_call539; + private static MethodHandle INDY_call539 () throws Throwable { + if (INDY_call539 != null) return INDY_call539; + CallSite cs = (CallSite) MH_bootstrap539 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap539 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper539 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call539 ().invokeExact(o1, o2, o3); } + + static Object bootstrap539 (Object l, Object n, Object t) throws Throwable { return _mh[ 539 ].invokeExact(l, n, t); } + + // 540 + private static MethodType MT_bootstrap540 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap540 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap540", MT_bootstrap540 ()); + } + + private static MethodHandle INDY_call540; + private static MethodHandle INDY_call540 () throws Throwable { + if (INDY_call540 != null) return INDY_call540; + CallSite cs = (CallSite) MH_bootstrap540 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap540 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper540 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call540 ().invokeExact(o1, o2, o3); } + + static Object bootstrap540 (Object l, Object n, Object t) throws Throwable { return _mh[ 540 ].invokeExact(l, n, t); } + + // 541 + private static MethodType MT_bootstrap541 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap541 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap541", MT_bootstrap541 ()); + } + + private static MethodHandle INDY_call541; + private static MethodHandle INDY_call541 () throws Throwable { + if (INDY_call541 != null) return INDY_call541; + CallSite cs = (CallSite) MH_bootstrap541 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap541 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper541 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call541 ().invokeExact(o1, o2, o3); } + + static Object bootstrap541 (Object l, Object n, Object t) throws Throwable { return _mh[ 541 ].invokeExact(l, n, t); } + + // 542 + private static MethodType MT_bootstrap542 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap542 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap542", MT_bootstrap542 ()); + } + + private static MethodHandle INDY_call542; + private static MethodHandle INDY_call542 () throws Throwable { + if (INDY_call542 != null) return INDY_call542; + CallSite cs = (CallSite) MH_bootstrap542 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap542 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper542 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call542 ().invokeExact(o1, o2, o3); } + + static Object bootstrap542 (Object l, Object n, Object t) throws Throwable { return _mh[ 542 ].invokeExact(l, n, t); } + + // 543 + private static MethodType MT_bootstrap543 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap543 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap543", MT_bootstrap543 ()); + } + + private static MethodHandle INDY_call543; + private static MethodHandle INDY_call543 () throws Throwable { + if (INDY_call543 != null) return INDY_call543; + CallSite cs = (CallSite) MH_bootstrap543 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap543 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper543 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call543 ().invokeExact(o1, o2, o3); } + + static Object bootstrap543 (Object l, Object n, Object t) throws Throwable { return _mh[ 543 ].invokeExact(l, n, t); } + + // 544 + private static MethodType MT_bootstrap544 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap544 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap544", MT_bootstrap544 ()); + } + + private static MethodHandle INDY_call544; + private static MethodHandle INDY_call544 () throws Throwable { + if (INDY_call544 != null) return INDY_call544; + CallSite cs = (CallSite) MH_bootstrap544 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap544 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper544 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call544 ().invokeExact(o1, o2, o3); } + + static Object bootstrap544 (Object l, Object n, Object t) throws Throwable { return _mh[ 544 ].invokeExact(l, n, t); } + + // 545 + private static MethodType MT_bootstrap545 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap545 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap545", MT_bootstrap545 ()); + } + + private static MethodHandle INDY_call545; + private static MethodHandle INDY_call545 () throws Throwable { + if (INDY_call545 != null) return INDY_call545; + CallSite cs = (CallSite) MH_bootstrap545 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap545 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper545 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call545 ().invokeExact(o1, o2, o3); } + + static Object bootstrap545 (Object l, Object n, Object t) throws Throwable { return _mh[ 545 ].invokeExact(l, n, t); } + + // 546 + private static MethodType MT_bootstrap546 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap546 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap546", MT_bootstrap546 ()); + } + + private static MethodHandle INDY_call546; + private static MethodHandle INDY_call546 () throws Throwable { + if (INDY_call546 != null) return INDY_call546; + CallSite cs = (CallSite) MH_bootstrap546 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap546 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper546 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call546 ().invokeExact(o1, o2, o3); } + + static Object bootstrap546 (Object l, Object n, Object t) throws Throwable { return _mh[ 546 ].invokeExact(l, n, t); } + + // 547 + private static MethodType MT_bootstrap547 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap547 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap547", MT_bootstrap547 ()); + } + + private static MethodHandle INDY_call547; + private static MethodHandle INDY_call547 () throws Throwable { + if (INDY_call547 != null) return INDY_call547; + CallSite cs = (CallSite) MH_bootstrap547 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap547 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper547 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call547 ().invokeExact(o1, o2, o3); } + + static Object bootstrap547 (Object l, Object n, Object t) throws Throwable { return _mh[ 547 ].invokeExact(l, n, t); } + + // 548 + private static MethodType MT_bootstrap548 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap548 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap548", MT_bootstrap548 ()); + } + + private static MethodHandle INDY_call548; + private static MethodHandle INDY_call548 () throws Throwable { + if (INDY_call548 != null) return INDY_call548; + CallSite cs = (CallSite) MH_bootstrap548 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap548 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper548 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call548 ().invokeExact(o1, o2, o3); } + + static Object bootstrap548 (Object l, Object n, Object t) throws Throwable { return _mh[ 548 ].invokeExact(l, n, t); } + + // 549 + private static MethodType MT_bootstrap549 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap549 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap549", MT_bootstrap549 ()); + } + + private static MethodHandle INDY_call549; + private static MethodHandle INDY_call549 () throws Throwable { + if (INDY_call549 != null) return INDY_call549; + CallSite cs = (CallSite) MH_bootstrap549 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap549 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper549 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call549 ().invokeExact(o1, o2, o3); } + + static Object bootstrap549 (Object l, Object n, Object t) throws Throwable { return _mh[ 549 ].invokeExact(l, n, t); } + + // 550 + private static MethodType MT_bootstrap550 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap550 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap550", MT_bootstrap550 ()); + } + + private static MethodHandle INDY_call550; + private static MethodHandle INDY_call550 () throws Throwable { + if (INDY_call550 != null) return INDY_call550; + CallSite cs = (CallSite) MH_bootstrap550 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap550 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper550 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call550 ().invokeExact(o1, o2, o3); } + + static Object bootstrap550 (Object l, Object n, Object t) throws Throwable { return _mh[ 550 ].invokeExact(l, n, t); } + + // 551 + private static MethodType MT_bootstrap551 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap551 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap551", MT_bootstrap551 ()); + } + + private static MethodHandle INDY_call551; + private static MethodHandle INDY_call551 () throws Throwable { + if (INDY_call551 != null) return INDY_call551; + CallSite cs = (CallSite) MH_bootstrap551 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap551 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper551 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call551 ().invokeExact(o1, o2, o3); } + + static Object bootstrap551 (Object l, Object n, Object t) throws Throwable { return _mh[ 551 ].invokeExact(l, n, t); } + + // 552 + private static MethodType MT_bootstrap552 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap552 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap552", MT_bootstrap552 ()); + } + + private static MethodHandle INDY_call552; + private static MethodHandle INDY_call552 () throws Throwable { + if (INDY_call552 != null) return INDY_call552; + CallSite cs = (CallSite) MH_bootstrap552 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap552 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper552 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call552 ().invokeExact(o1, o2, o3); } + + static Object bootstrap552 (Object l, Object n, Object t) throws Throwable { return _mh[ 552 ].invokeExact(l, n, t); } + + // 553 + private static MethodType MT_bootstrap553 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap553 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap553", MT_bootstrap553 ()); + } + + private static MethodHandle INDY_call553; + private static MethodHandle INDY_call553 () throws Throwable { + if (INDY_call553 != null) return INDY_call553; + CallSite cs = (CallSite) MH_bootstrap553 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap553 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper553 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call553 ().invokeExact(o1, o2, o3); } + + static Object bootstrap553 (Object l, Object n, Object t) throws Throwable { return _mh[ 553 ].invokeExact(l, n, t); } + + // 554 + private static MethodType MT_bootstrap554 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap554 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap554", MT_bootstrap554 ()); + } + + private static MethodHandle INDY_call554; + private static MethodHandle INDY_call554 () throws Throwable { + if (INDY_call554 != null) return INDY_call554; + CallSite cs = (CallSite) MH_bootstrap554 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap554 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper554 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call554 ().invokeExact(o1, o2, o3); } + + static Object bootstrap554 (Object l, Object n, Object t) throws Throwable { return _mh[ 554 ].invokeExact(l, n, t); } + + // 555 + private static MethodType MT_bootstrap555 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap555 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap555", MT_bootstrap555 ()); + } + + private static MethodHandle INDY_call555; + private static MethodHandle INDY_call555 () throws Throwable { + if (INDY_call555 != null) return INDY_call555; + CallSite cs = (CallSite) MH_bootstrap555 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap555 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper555 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call555 ().invokeExact(o1, o2, o3); } + + static Object bootstrap555 (Object l, Object n, Object t) throws Throwable { return _mh[ 555 ].invokeExact(l, n, t); } + + // 556 + private static MethodType MT_bootstrap556 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap556 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap556", MT_bootstrap556 ()); + } + + private static MethodHandle INDY_call556; + private static MethodHandle INDY_call556 () throws Throwable { + if (INDY_call556 != null) return INDY_call556; + CallSite cs = (CallSite) MH_bootstrap556 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap556 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper556 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call556 ().invokeExact(o1, o2, o3); } + + static Object bootstrap556 (Object l, Object n, Object t) throws Throwable { return _mh[ 556 ].invokeExact(l, n, t); } + + // 557 + private static MethodType MT_bootstrap557 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap557 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap557", MT_bootstrap557 ()); + } + + private static MethodHandle INDY_call557; + private static MethodHandle INDY_call557 () throws Throwable { + if (INDY_call557 != null) return INDY_call557; + CallSite cs = (CallSite) MH_bootstrap557 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap557 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper557 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call557 ().invokeExact(o1, o2, o3); } + + static Object bootstrap557 (Object l, Object n, Object t) throws Throwable { return _mh[ 557 ].invokeExact(l, n, t); } + + // 558 + private static MethodType MT_bootstrap558 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap558 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap558", MT_bootstrap558 ()); + } + + private static MethodHandle INDY_call558; + private static MethodHandle INDY_call558 () throws Throwable { + if (INDY_call558 != null) return INDY_call558; + CallSite cs = (CallSite) MH_bootstrap558 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap558 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper558 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call558 ().invokeExact(o1, o2, o3); } + + static Object bootstrap558 (Object l, Object n, Object t) throws Throwable { return _mh[ 558 ].invokeExact(l, n, t); } + + // 559 + private static MethodType MT_bootstrap559 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap559 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap559", MT_bootstrap559 ()); + } + + private static MethodHandle INDY_call559; + private static MethodHandle INDY_call559 () throws Throwable { + if (INDY_call559 != null) return INDY_call559; + CallSite cs = (CallSite) MH_bootstrap559 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap559 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper559 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call559 ().invokeExact(o1, o2, o3); } + + static Object bootstrap559 (Object l, Object n, Object t) throws Throwable { return _mh[ 559 ].invokeExact(l, n, t); } + + // 560 + private static MethodType MT_bootstrap560 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap560 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap560", MT_bootstrap560 ()); + } + + private static MethodHandle INDY_call560; + private static MethodHandle INDY_call560 () throws Throwable { + if (INDY_call560 != null) return INDY_call560; + CallSite cs = (CallSite) MH_bootstrap560 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap560 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper560 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call560 ().invokeExact(o1, o2, o3); } + + static Object bootstrap560 (Object l, Object n, Object t) throws Throwable { return _mh[ 560 ].invokeExact(l, n, t); } + + // 561 + private static MethodType MT_bootstrap561 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap561 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap561", MT_bootstrap561 ()); + } + + private static MethodHandle INDY_call561; + private static MethodHandle INDY_call561 () throws Throwable { + if (INDY_call561 != null) return INDY_call561; + CallSite cs = (CallSite) MH_bootstrap561 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap561 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper561 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call561 ().invokeExact(o1, o2, o3); } + + static Object bootstrap561 (Object l, Object n, Object t) throws Throwable { return _mh[ 561 ].invokeExact(l, n, t); } + + // 562 + private static MethodType MT_bootstrap562 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap562 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap562", MT_bootstrap562 ()); + } + + private static MethodHandle INDY_call562; + private static MethodHandle INDY_call562 () throws Throwable { + if (INDY_call562 != null) return INDY_call562; + CallSite cs = (CallSite) MH_bootstrap562 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap562 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper562 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call562 ().invokeExact(o1, o2, o3); } + + static Object bootstrap562 (Object l, Object n, Object t) throws Throwable { return _mh[ 562 ].invokeExact(l, n, t); } + + // 563 + private static MethodType MT_bootstrap563 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap563 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap563", MT_bootstrap563 ()); + } + + private static MethodHandle INDY_call563; + private static MethodHandle INDY_call563 () throws Throwable { + if (INDY_call563 != null) return INDY_call563; + CallSite cs = (CallSite) MH_bootstrap563 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap563 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper563 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call563 ().invokeExact(o1, o2, o3); } + + static Object bootstrap563 (Object l, Object n, Object t) throws Throwable { return _mh[ 563 ].invokeExact(l, n, t); } + + // 564 + private static MethodType MT_bootstrap564 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap564 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap564", MT_bootstrap564 ()); + } + + private static MethodHandle INDY_call564; + private static MethodHandle INDY_call564 () throws Throwable { + if (INDY_call564 != null) return INDY_call564; + CallSite cs = (CallSite) MH_bootstrap564 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap564 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper564 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call564 ().invokeExact(o1, o2, o3); } + + static Object bootstrap564 (Object l, Object n, Object t) throws Throwable { return _mh[ 564 ].invokeExact(l, n, t); } + + // 565 + private static MethodType MT_bootstrap565 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap565 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap565", MT_bootstrap565 ()); + } + + private static MethodHandle INDY_call565; + private static MethodHandle INDY_call565 () throws Throwable { + if (INDY_call565 != null) return INDY_call565; + CallSite cs = (CallSite) MH_bootstrap565 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap565 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper565 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call565 ().invokeExact(o1, o2, o3); } + + static Object bootstrap565 (Object l, Object n, Object t) throws Throwable { return _mh[ 565 ].invokeExact(l, n, t); } + + // 566 + private static MethodType MT_bootstrap566 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap566 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap566", MT_bootstrap566 ()); + } + + private static MethodHandle INDY_call566; + private static MethodHandle INDY_call566 () throws Throwable { + if (INDY_call566 != null) return INDY_call566; + CallSite cs = (CallSite) MH_bootstrap566 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap566 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper566 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call566 ().invokeExact(o1, o2, o3); } + + static Object bootstrap566 (Object l, Object n, Object t) throws Throwable { return _mh[ 566 ].invokeExact(l, n, t); } + + // 567 + private static MethodType MT_bootstrap567 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap567 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap567", MT_bootstrap567 ()); + } + + private static MethodHandle INDY_call567; + private static MethodHandle INDY_call567 () throws Throwable { + if (INDY_call567 != null) return INDY_call567; + CallSite cs = (CallSite) MH_bootstrap567 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap567 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper567 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call567 ().invokeExact(o1, o2, o3); } + + static Object bootstrap567 (Object l, Object n, Object t) throws Throwable { return _mh[ 567 ].invokeExact(l, n, t); } + + // 568 + private static MethodType MT_bootstrap568 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap568 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap568", MT_bootstrap568 ()); + } + + private static MethodHandle INDY_call568; + private static MethodHandle INDY_call568 () throws Throwable { + if (INDY_call568 != null) return INDY_call568; + CallSite cs = (CallSite) MH_bootstrap568 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap568 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper568 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call568 ().invokeExact(o1, o2, o3); } + + static Object bootstrap568 (Object l, Object n, Object t) throws Throwable { return _mh[ 568 ].invokeExact(l, n, t); } + + // 569 + private static MethodType MT_bootstrap569 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap569 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap569", MT_bootstrap569 ()); + } + + private static MethodHandle INDY_call569; + private static MethodHandle INDY_call569 () throws Throwable { + if (INDY_call569 != null) return INDY_call569; + CallSite cs = (CallSite) MH_bootstrap569 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap569 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper569 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call569 ().invokeExact(o1, o2, o3); } + + static Object bootstrap569 (Object l, Object n, Object t) throws Throwable { return _mh[ 569 ].invokeExact(l, n, t); } + + // 570 + private static MethodType MT_bootstrap570 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap570 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap570", MT_bootstrap570 ()); + } + + private static MethodHandle INDY_call570; + private static MethodHandle INDY_call570 () throws Throwable { + if (INDY_call570 != null) return INDY_call570; + CallSite cs = (CallSite) MH_bootstrap570 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap570 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper570 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call570 ().invokeExact(o1, o2, o3); } + + static Object bootstrap570 (Object l, Object n, Object t) throws Throwable { return _mh[ 570 ].invokeExact(l, n, t); } + + // 571 + private static MethodType MT_bootstrap571 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap571 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap571", MT_bootstrap571 ()); + } + + private static MethodHandle INDY_call571; + private static MethodHandle INDY_call571 () throws Throwable { + if (INDY_call571 != null) return INDY_call571; + CallSite cs = (CallSite) MH_bootstrap571 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap571 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper571 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call571 ().invokeExact(o1, o2, o3); } + + static Object bootstrap571 (Object l, Object n, Object t) throws Throwable { return _mh[ 571 ].invokeExact(l, n, t); } + + // 572 + private static MethodType MT_bootstrap572 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap572 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap572", MT_bootstrap572 ()); + } + + private static MethodHandle INDY_call572; + private static MethodHandle INDY_call572 () throws Throwable { + if (INDY_call572 != null) return INDY_call572; + CallSite cs = (CallSite) MH_bootstrap572 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap572 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper572 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call572 ().invokeExact(o1, o2, o3); } + + static Object bootstrap572 (Object l, Object n, Object t) throws Throwable { return _mh[ 572 ].invokeExact(l, n, t); } + + // 573 + private static MethodType MT_bootstrap573 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap573 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap573", MT_bootstrap573 ()); + } + + private static MethodHandle INDY_call573; + private static MethodHandle INDY_call573 () throws Throwable { + if (INDY_call573 != null) return INDY_call573; + CallSite cs = (CallSite) MH_bootstrap573 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap573 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper573 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call573 ().invokeExact(o1, o2, o3); } + + static Object bootstrap573 (Object l, Object n, Object t) throws Throwable { return _mh[ 573 ].invokeExact(l, n, t); } + + // 574 + private static MethodType MT_bootstrap574 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap574 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap574", MT_bootstrap574 ()); + } + + private static MethodHandle INDY_call574; + private static MethodHandle INDY_call574 () throws Throwable { + if (INDY_call574 != null) return INDY_call574; + CallSite cs = (CallSite) MH_bootstrap574 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap574 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper574 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call574 ().invokeExact(o1, o2, o3); } + + static Object bootstrap574 (Object l, Object n, Object t) throws Throwable { return _mh[ 574 ].invokeExact(l, n, t); } + + // 575 + private static MethodType MT_bootstrap575 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap575 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap575", MT_bootstrap575 ()); + } + + private static MethodHandle INDY_call575; + private static MethodHandle INDY_call575 () throws Throwable { + if (INDY_call575 != null) return INDY_call575; + CallSite cs = (CallSite) MH_bootstrap575 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap575 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper575 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call575 ().invokeExact(o1, o2, o3); } + + static Object bootstrap575 (Object l, Object n, Object t) throws Throwable { return _mh[ 575 ].invokeExact(l, n, t); } + + // 576 + private static MethodType MT_bootstrap576 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap576 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap576", MT_bootstrap576 ()); + } + + private static MethodHandle INDY_call576; + private static MethodHandle INDY_call576 () throws Throwable { + if (INDY_call576 != null) return INDY_call576; + CallSite cs = (CallSite) MH_bootstrap576 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap576 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper576 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call576 ().invokeExact(o1, o2, o3); } + + static Object bootstrap576 (Object l, Object n, Object t) throws Throwable { return _mh[ 576 ].invokeExact(l, n, t); } + + // 577 + private static MethodType MT_bootstrap577 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap577 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap577", MT_bootstrap577 ()); + } + + private static MethodHandle INDY_call577; + private static MethodHandle INDY_call577 () throws Throwable { + if (INDY_call577 != null) return INDY_call577; + CallSite cs = (CallSite) MH_bootstrap577 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap577 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper577 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call577 ().invokeExact(o1, o2, o3); } + + static Object bootstrap577 (Object l, Object n, Object t) throws Throwable { return _mh[ 577 ].invokeExact(l, n, t); } + + // 578 + private static MethodType MT_bootstrap578 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap578 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap578", MT_bootstrap578 ()); + } + + private static MethodHandle INDY_call578; + private static MethodHandle INDY_call578 () throws Throwable { + if (INDY_call578 != null) return INDY_call578; + CallSite cs = (CallSite) MH_bootstrap578 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap578 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper578 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call578 ().invokeExact(o1, o2, o3); } + + static Object bootstrap578 (Object l, Object n, Object t) throws Throwable { return _mh[ 578 ].invokeExact(l, n, t); } + + // 579 + private static MethodType MT_bootstrap579 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap579 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap579", MT_bootstrap579 ()); + } + + private static MethodHandle INDY_call579; + private static MethodHandle INDY_call579 () throws Throwable { + if (INDY_call579 != null) return INDY_call579; + CallSite cs = (CallSite) MH_bootstrap579 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap579 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper579 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call579 ().invokeExact(o1, o2, o3); } + + static Object bootstrap579 (Object l, Object n, Object t) throws Throwable { return _mh[ 579 ].invokeExact(l, n, t); } + + // 580 + private static MethodType MT_bootstrap580 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap580 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap580", MT_bootstrap580 ()); + } + + private static MethodHandle INDY_call580; + private static MethodHandle INDY_call580 () throws Throwable { + if (INDY_call580 != null) return INDY_call580; + CallSite cs = (CallSite) MH_bootstrap580 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap580 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper580 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call580 ().invokeExact(o1, o2, o3); } + + static Object bootstrap580 (Object l, Object n, Object t) throws Throwable { return _mh[ 580 ].invokeExact(l, n, t); } + + // 581 + private static MethodType MT_bootstrap581 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap581 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap581", MT_bootstrap581 ()); + } + + private static MethodHandle INDY_call581; + private static MethodHandle INDY_call581 () throws Throwable { + if (INDY_call581 != null) return INDY_call581; + CallSite cs = (CallSite) MH_bootstrap581 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap581 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper581 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call581 ().invokeExact(o1, o2, o3); } + + static Object bootstrap581 (Object l, Object n, Object t) throws Throwable { return _mh[ 581 ].invokeExact(l, n, t); } + + // 582 + private static MethodType MT_bootstrap582 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap582 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap582", MT_bootstrap582 ()); + } + + private static MethodHandle INDY_call582; + private static MethodHandle INDY_call582 () throws Throwable { + if (INDY_call582 != null) return INDY_call582; + CallSite cs = (CallSite) MH_bootstrap582 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap582 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper582 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call582 ().invokeExact(o1, o2, o3); } + + static Object bootstrap582 (Object l, Object n, Object t) throws Throwable { return _mh[ 582 ].invokeExact(l, n, t); } + + // 583 + private static MethodType MT_bootstrap583 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap583 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap583", MT_bootstrap583 ()); + } + + private static MethodHandle INDY_call583; + private static MethodHandle INDY_call583 () throws Throwable { + if (INDY_call583 != null) return INDY_call583; + CallSite cs = (CallSite) MH_bootstrap583 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap583 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper583 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call583 ().invokeExact(o1, o2, o3); } + + static Object bootstrap583 (Object l, Object n, Object t) throws Throwable { return _mh[ 583 ].invokeExact(l, n, t); } + + // 584 + private static MethodType MT_bootstrap584 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap584 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap584", MT_bootstrap584 ()); + } + + private static MethodHandle INDY_call584; + private static MethodHandle INDY_call584 () throws Throwable { + if (INDY_call584 != null) return INDY_call584; + CallSite cs = (CallSite) MH_bootstrap584 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap584 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper584 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call584 ().invokeExact(o1, o2, o3); } + + static Object bootstrap584 (Object l, Object n, Object t) throws Throwable { return _mh[ 584 ].invokeExact(l, n, t); } + + // 585 + private static MethodType MT_bootstrap585 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap585 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap585", MT_bootstrap585 ()); + } + + private static MethodHandle INDY_call585; + private static MethodHandle INDY_call585 () throws Throwable { + if (INDY_call585 != null) return INDY_call585; + CallSite cs = (CallSite) MH_bootstrap585 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap585 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper585 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call585 ().invokeExact(o1, o2, o3); } + + static Object bootstrap585 (Object l, Object n, Object t) throws Throwable { return _mh[ 585 ].invokeExact(l, n, t); } + + // 586 + private static MethodType MT_bootstrap586 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap586 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap586", MT_bootstrap586 ()); + } + + private static MethodHandle INDY_call586; + private static MethodHandle INDY_call586 () throws Throwable { + if (INDY_call586 != null) return INDY_call586; + CallSite cs = (CallSite) MH_bootstrap586 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap586 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper586 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call586 ().invokeExact(o1, o2, o3); } + + static Object bootstrap586 (Object l, Object n, Object t) throws Throwable { return _mh[ 586 ].invokeExact(l, n, t); } + + // 587 + private static MethodType MT_bootstrap587 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap587 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap587", MT_bootstrap587 ()); + } + + private static MethodHandle INDY_call587; + private static MethodHandle INDY_call587 () throws Throwable { + if (INDY_call587 != null) return INDY_call587; + CallSite cs = (CallSite) MH_bootstrap587 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap587 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper587 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call587 ().invokeExact(o1, o2, o3); } + + static Object bootstrap587 (Object l, Object n, Object t) throws Throwable { return _mh[ 587 ].invokeExact(l, n, t); } + + // 588 + private static MethodType MT_bootstrap588 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap588 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap588", MT_bootstrap588 ()); + } + + private static MethodHandle INDY_call588; + private static MethodHandle INDY_call588 () throws Throwable { + if (INDY_call588 != null) return INDY_call588; + CallSite cs = (CallSite) MH_bootstrap588 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap588 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper588 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call588 ().invokeExact(o1, o2, o3); } + + static Object bootstrap588 (Object l, Object n, Object t) throws Throwable { return _mh[ 588 ].invokeExact(l, n, t); } + + // 589 + private static MethodType MT_bootstrap589 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap589 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap589", MT_bootstrap589 ()); + } + + private static MethodHandle INDY_call589; + private static MethodHandle INDY_call589 () throws Throwable { + if (INDY_call589 != null) return INDY_call589; + CallSite cs = (CallSite) MH_bootstrap589 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap589 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper589 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call589 ().invokeExact(o1, o2, o3); } + + static Object bootstrap589 (Object l, Object n, Object t) throws Throwable { return _mh[ 589 ].invokeExact(l, n, t); } + + // 590 + private static MethodType MT_bootstrap590 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap590 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap590", MT_bootstrap590 ()); + } + + private static MethodHandle INDY_call590; + private static MethodHandle INDY_call590 () throws Throwable { + if (INDY_call590 != null) return INDY_call590; + CallSite cs = (CallSite) MH_bootstrap590 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap590 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper590 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call590 ().invokeExact(o1, o2, o3); } + + static Object bootstrap590 (Object l, Object n, Object t) throws Throwable { return _mh[ 590 ].invokeExact(l, n, t); } + + // 591 + private static MethodType MT_bootstrap591 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap591 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap591", MT_bootstrap591 ()); + } + + private static MethodHandle INDY_call591; + private static MethodHandle INDY_call591 () throws Throwable { + if (INDY_call591 != null) return INDY_call591; + CallSite cs = (CallSite) MH_bootstrap591 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap591 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper591 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call591 ().invokeExact(o1, o2, o3); } + + static Object bootstrap591 (Object l, Object n, Object t) throws Throwable { return _mh[ 591 ].invokeExact(l, n, t); } + + // 592 + private static MethodType MT_bootstrap592 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap592 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap592", MT_bootstrap592 ()); + } + + private static MethodHandle INDY_call592; + private static MethodHandle INDY_call592 () throws Throwable { + if (INDY_call592 != null) return INDY_call592; + CallSite cs = (CallSite) MH_bootstrap592 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap592 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper592 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call592 ().invokeExact(o1, o2, o3); } + + static Object bootstrap592 (Object l, Object n, Object t) throws Throwable { return _mh[ 592 ].invokeExact(l, n, t); } + + // 593 + private static MethodType MT_bootstrap593 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap593 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap593", MT_bootstrap593 ()); + } + + private static MethodHandle INDY_call593; + private static MethodHandle INDY_call593 () throws Throwable { + if (INDY_call593 != null) return INDY_call593; + CallSite cs = (CallSite) MH_bootstrap593 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap593 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper593 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call593 ().invokeExact(o1, o2, o3); } + + static Object bootstrap593 (Object l, Object n, Object t) throws Throwable { return _mh[ 593 ].invokeExact(l, n, t); } + + // 594 + private static MethodType MT_bootstrap594 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap594 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap594", MT_bootstrap594 ()); + } + + private static MethodHandle INDY_call594; + private static MethodHandle INDY_call594 () throws Throwable { + if (INDY_call594 != null) return INDY_call594; + CallSite cs = (CallSite) MH_bootstrap594 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap594 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper594 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call594 ().invokeExact(o1, o2, o3); } + + static Object bootstrap594 (Object l, Object n, Object t) throws Throwable { return _mh[ 594 ].invokeExact(l, n, t); } + + // 595 + private static MethodType MT_bootstrap595 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap595 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap595", MT_bootstrap595 ()); + } + + private static MethodHandle INDY_call595; + private static MethodHandle INDY_call595 () throws Throwable { + if (INDY_call595 != null) return INDY_call595; + CallSite cs = (CallSite) MH_bootstrap595 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap595 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper595 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call595 ().invokeExact(o1, o2, o3); } + + static Object bootstrap595 (Object l, Object n, Object t) throws Throwable { return _mh[ 595 ].invokeExact(l, n, t); } + + // 596 + private static MethodType MT_bootstrap596 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap596 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap596", MT_bootstrap596 ()); + } + + private static MethodHandle INDY_call596; + private static MethodHandle INDY_call596 () throws Throwable { + if (INDY_call596 != null) return INDY_call596; + CallSite cs = (CallSite) MH_bootstrap596 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap596 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper596 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call596 ().invokeExact(o1, o2, o3); } + + static Object bootstrap596 (Object l, Object n, Object t) throws Throwable { return _mh[ 596 ].invokeExact(l, n, t); } + + // 597 + private static MethodType MT_bootstrap597 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap597 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap597", MT_bootstrap597 ()); + } + + private static MethodHandle INDY_call597; + private static MethodHandle INDY_call597 () throws Throwable { + if (INDY_call597 != null) return INDY_call597; + CallSite cs = (CallSite) MH_bootstrap597 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap597 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper597 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call597 ().invokeExact(o1, o2, o3); } + + static Object bootstrap597 (Object l, Object n, Object t) throws Throwable { return _mh[ 597 ].invokeExact(l, n, t); } + + // 598 + private static MethodType MT_bootstrap598 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap598 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap598", MT_bootstrap598 ()); + } + + private static MethodHandle INDY_call598; + private static MethodHandle INDY_call598 () throws Throwable { + if (INDY_call598 != null) return INDY_call598; + CallSite cs = (CallSite) MH_bootstrap598 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap598 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper598 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call598 ().invokeExact(o1, o2, o3); } + + static Object bootstrap598 (Object l, Object n, Object t) throws Throwable { return _mh[ 598 ].invokeExact(l, n, t); } + + // 599 + private static MethodType MT_bootstrap599 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap599 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap599", MT_bootstrap599 ()); + } + + private static MethodHandle INDY_call599; + private static MethodHandle INDY_call599 () throws Throwable { + if (INDY_call599 != null) return INDY_call599; + CallSite cs = (CallSite) MH_bootstrap599 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap599 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper599 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call599 ().invokeExact(o1, o2, o3); } + + static Object bootstrap599 (Object l, Object n, Object t) throws Throwable { return _mh[ 599 ].invokeExact(l, n, t); } + + // 600 + private static MethodType MT_bootstrap600 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap600 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap600", MT_bootstrap600 ()); + } + + private static MethodHandle INDY_call600; + private static MethodHandle INDY_call600 () throws Throwable { + if (INDY_call600 != null) return INDY_call600; + CallSite cs = (CallSite) MH_bootstrap600 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap600 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper600 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call600 ().invokeExact(o1, o2, o3); } + + static Object bootstrap600 (Object l, Object n, Object t) throws Throwable { return _mh[ 600 ].invokeExact(l, n, t); } + + // 601 + private static MethodType MT_bootstrap601 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap601 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap601", MT_bootstrap601 ()); + } + + private static MethodHandle INDY_call601; + private static MethodHandle INDY_call601 () throws Throwable { + if (INDY_call601 != null) return INDY_call601; + CallSite cs = (CallSite) MH_bootstrap601 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap601 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper601 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call601 ().invokeExact(o1, o2, o3); } + + static Object bootstrap601 (Object l, Object n, Object t) throws Throwable { return _mh[ 601 ].invokeExact(l, n, t); } + + // 602 + private static MethodType MT_bootstrap602 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap602 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap602", MT_bootstrap602 ()); + } + + private static MethodHandle INDY_call602; + private static MethodHandle INDY_call602 () throws Throwable { + if (INDY_call602 != null) return INDY_call602; + CallSite cs = (CallSite) MH_bootstrap602 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap602 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper602 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call602 ().invokeExact(o1, o2, o3); } + + static Object bootstrap602 (Object l, Object n, Object t) throws Throwable { return _mh[ 602 ].invokeExact(l, n, t); } + + // 603 + private static MethodType MT_bootstrap603 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap603 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap603", MT_bootstrap603 ()); + } + + private static MethodHandle INDY_call603; + private static MethodHandle INDY_call603 () throws Throwable { + if (INDY_call603 != null) return INDY_call603; + CallSite cs = (CallSite) MH_bootstrap603 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap603 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper603 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call603 ().invokeExact(o1, o2, o3); } + + static Object bootstrap603 (Object l, Object n, Object t) throws Throwable { return _mh[ 603 ].invokeExact(l, n, t); } + + // 604 + private static MethodType MT_bootstrap604 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap604 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap604", MT_bootstrap604 ()); + } + + private static MethodHandle INDY_call604; + private static MethodHandle INDY_call604 () throws Throwable { + if (INDY_call604 != null) return INDY_call604; + CallSite cs = (CallSite) MH_bootstrap604 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap604 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper604 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call604 ().invokeExact(o1, o2, o3); } + + static Object bootstrap604 (Object l, Object n, Object t) throws Throwable { return _mh[ 604 ].invokeExact(l, n, t); } + + // 605 + private static MethodType MT_bootstrap605 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap605 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap605", MT_bootstrap605 ()); + } + + private static MethodHandle INDY_call605; + private static MethodHandle INDY_call605 () throws Throwable { + if (INDY_call605 != null) return INDY_call605; + CallSite cs = (CallSite) MH_bootstrap605 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap605 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper605 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call605 ().invokeExact(o1, o2, o3); } + + static Object bootstrap605 (Object l, Object n, Object t) throws Throwable { return _mh[ 605 ].invokeExact(l, n, t); } + + // 606 + private static MethodType MT_bootstrap606 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap606 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap606", MT_bootstrap606 ()); + } + + private static MethodHandle INDY_call606; + private static MethodHandle INDY_call606 () throws Throwable { + if (INDY_call606 != null) return INDY_call606; + CallSite cs = (CallSite) MH_bootstrap606 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap606 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper606 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call606 ().invokeExact(o1, o2, o3); } + + static Object bootstrap606 (Object l, Object n, Object t) throws Throwable { return _mh[ 606 ].invokeExact(l, n, t); } + + // 607 + private static MethodType MT_bootstrap607 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap607 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap607", MT_bootstrap607 ()); + } + + private static MethodHandle INDY_call607; + private static MethodHandle INDY_call607 () throws Throwable { + if (INDY_call607 != null) return INDY_call607; + CallSite cs = (CallSite) MH_bootstrap607 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap607 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper607 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call607 ().invokeExact(o1, o2, o3); } + + static Object bootstrap607 (Object l, Object n, Object t) throws Throwable { return _mh[ 607 ].invokeExact(l, n, t); } + + // 608 + private static MethodType MT_bootstrap608 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap608 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap608", MT_bootstrap608 ()); + } + + private static MethodHandle INDY_call608; + private static MethodHandle INDY_call608 () throws Throwable { + if (INDY_call608 != null) return INDY_call608; + CallSite cs = (CallSite) MH_bootstrap608 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap608 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper608 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call608 ().invokeExact(o1, o2, o3); } + + static Object bootstrap608 (Object l, Object n, Object t) throws Throwable { return _mh[ 608 ].invokeExact(l, n, t); } + + // 609 + private static MethodType MT_bootstrap609 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap609 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap609", MT_bootstrap609 ()); + } + + private static MethodHandle INDY_call609; + private static MethodHandle INDY_call609 () throws Throwable { + if (INDY_call609 != null) return INDY_call609; + CallSite cs = (CallSite) MH_bootstrap609 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap609 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper609 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call609 ().invokeExact(o1, o2, o3); } + + static Object bootstrap609 (Object l, Object n, Object t) throws Throwable { return _mh[ 609 ].invokeExact(l, n, t); } + + // 610 + private static MethodType MT_bootstrap610 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap610 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap610", MT_bootstrap610 ()); + } + + private static MethodHandle INDY_call610; + private static MethodHandle INDY_call610 () throws Throwable { + if (INDY_call610 != null) return INDY_call610; + CallSite cs = (CallSite) MH_bootstrap610 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap610 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper610 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call610 ().invokeExact(o1, o2, o3); } + + static Object bootstrap610 (Object l, Object n, Object t) throws Throwable { return _mh[ 610 ].invokeExact(l, n, t); } + + // 611 + private static MethodType MT_bootstrap611 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap611 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap611", MT_bootstrap611 ()); + } + + private static MethodHandle INDY_call611; + private static MethodHandle INDY_call611 () throws Throwable { + if (INDY_call611 != null) return INDY_call611; + CallSite cs = (CallSite) MH_bootstrap611 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap611 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper611 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call611 ().invokeExact(o1, o2, o3); } + + static Object bootstrap611 (Object l, Object n, Object t) throws Throwable { return _mh[ 611 ].invokeExact(l, n, t); } + + // 612 + private static MethodType MT_bootstrap612 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap612 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap612", MT_bootstrap612 ()); + } + + private static MethodHandle INDY_call612; + private static MethodHandle INDY_call612 () throws Throwable { + if (INDY_call612 != null) return INDY_call612; + CallSite cs = (CallSite) MH_bootstrap612 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap612 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper612 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call612 ().invokeExact(o1, o2, o3); } + + static Object bootstrap612 (Object l, Object n, Object t) throws Throwable { return _mh[ 612 ].invokeExact(l, n, t); } + + // 613 + private static MethodType MT_bootstrap613 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap613 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap613", MT_bootstrap613 ()); + } + + private static MethodHandle INDY_call613; + private static MethodHandle INDY_call613 () throws Throwable { + if (INDY_call613 != null) return INDY_call613; + CallSite cs = (CallSite) MH_bootstrap613 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap613 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper613 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call613 ().invokeExact(o1, o2, o3); } + + static Object bootstrap613 (Object l, Object n, Object t) throws Throwable { return _mh[ 613 ].invokeExact(l, n, t); } + + // 614 + private static MethodType MT_bootstrap614 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap614 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap614", MT_bootstrap614 ()); + } + + private static MethodHandle INDY_call614; + private static MethodHandle INDY_call614 () throws Throwable { + if (INDY_call614 != null) return INDY_call614; + CallSite cs = (CallSite) MH_bootstrap614 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap614 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper614 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call614 ().invokeExact(o1, o2, o3); } + + static Object bootstrap614 (Object l, Object n, Object t) throws Throwable { return _mh[ 614 ].invokeExact(l, n, t); } + + // 615 + private static MethodType MT_bootstrap615 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap615 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap615", MT_bootstrap615 ()); + } + + private static MethodHandle INDY_call615; + private static MethodHandle INDY_call615 () throws Throwable { + if (INDY_call615 != null) return INDY_call615; + CallSite cs = (CallSite) MH_bootstrap615 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap615 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper615 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call615 ().invokeExact(o1, o2, o3); } + + static Object bootstrap615 (Object l, Object n, Object t) throws Throwable { return _mh[ 615 ].invokeExact(l, n, t); } + + // 616 + private static MethodType MT_bootstrap616 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap616 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap616", MT_bootstrap616 ()); + } + + private static MethodHandle INDY_call616; + private static MethodHandle INDY_call616 () throws Throwable { + if (INDY_call616 != null) return INDY_call616; + CallSite cs = (CallSite) MH_bootstrap616 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap616 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper616 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call616 ().invokeExact(o1, o2, o3); } + + static Object bootstrap616 (Object l, Object n, Object t) throws Throwable { return _mh[ 616 ].invokeExact(l, n, t); } + + // 617 + private static MethodType MT_bootstrap617 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap617 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap617", MT_bootstrap617 ()); + } + + private static MethodHandle INDY_call617; + private static MethodHandle INDY_call617 () throws Throwable { + if (INDY_call617 != null) return INDY_call617; + CallSite cs = (CallSite) MH_bootstrap617 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap617 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper617 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call617 ().invokeExact(o1, o2, o3); } + + static Object bootstrap617 (Object l, Object n, Object t) throws Throwable { return _mh[ 617 ].invokeExact(l, n, t); } + + // 618 + private static MethodType MT_bootstrap618 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap618 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap618", MT_bootstrap618 ()); + } + + private static MethodHandle INDY_call618; + private static MethodHandle INDY_call618 () throws Throwable { + if (INDY_call618 != null) return INDY_call618; + CallSite cs = (CallSite) MH_bootstrap618 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap618 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper618 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call618 ().invokeExact(o1, o2, o3); } + + static Object bootstrap618 (Object l, Object n, Object t) throws Throwable { return _mh[ 618 ].invokeExact(l, n, t); } + + // 619 + private static MethodType MT_bootstrap619 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap619 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap619", MT_bootstrap619 ()); + } + + private static MethodHandle INDY_call619; + private static MethodHandle INDY_call619 () throws Throwable { + if (INDY_call619 != null) return INDY_call619; + CallSite cs = (CallSite) MH_bootstrap619 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap619 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper619 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call619 ().invokeExact(o1, o2, o3); } + + static Object bootstrap619 (Object l, Object n, Object t) throws Throwable { return _mh[ 619 ].invokeExact(l, n, t); } + + // 620 + private static MethodType MT_bootstrap620 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap620 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap620", MT_bootstrap620 ()); + } + + private static MethodHandle INDY_call620; + private static MethodHandle INDY_call620 () throws Throwable { + if (INDY_call620 != null) return INDY_call620; + CallSite cs = (CallSite) MH_bootstrap620 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap620 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper620 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call620 ().invokeExact(o1, o2, o3); } + + static Object bootstrap620 (Object l, Object n, Object t) throws Throwable { return _mh[ 620 ].invokeExact(l, n, t); } + + // 621 + private static MethodType MT_bootstrap621 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap621 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap621", MT_bootstrap621 ()); + } + + private static MethodHandle INDY_call621; + private static MethodHandle INDY_call621 () throws Throwable { + if (INDY_call621 != null) return INDY_call621; + CallSite cs = (CallSite) MH_bootstrap621 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap621 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper621 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call621 ().invokeExact(o1, o2, o3); } + + static Object bootstrap621 (Object l, Object n, Object t) throws Throwable { return _mh[ 621 ].invokeExact(l, n, t); } + + // 622 + private static MethodType MT_bootstrap622 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap622 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap622", MT_bootstrap622 ()); + } + + private static MethodHandle INDY_call622; + private static MethodHandle INDY_call622 () throws Throwable { + if (INDY_call622 != null) return INDY_call622; + CallSite cs = (CallSite) MH_bootstrap622 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap622 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper622 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call622 ().invokeExact(o1, o2, o3); } + + static Object bootstrap622 (Object l, Object n, Object t) throws Throwable { return _mh[ 622 ].invokeExact(l, n, t); } + + // 623 + private static MethodType MT_bootstrap623 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap623 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap623", MT_bootstrap623 ()); + } + + private static MethodHandle INDY_call623; + private static MethodHandle INDY_call623 () throws Throwable { + if (INDY_call623 != null) return INDY_call623; + CallSite cs = (CallSite) MH_bootstrap623 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap623 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper623 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call623 ().invokeExact(o1, o2, o3); } + + static Object bootstrap623 (Object l, Object n, Object t) throws Throwable { return _mh[ 623 ].invokeExact(l, n, t); } + + // 624 + private static MethodType MT_bootstrap624 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap624 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap624", MT_bootstrap624 ()); + } + + private static MethodHandle INDY_call624; + private static MethodHandle INDY_call624 () throws Throwable { + if (INDY_call624 != null) return INDY_call624; + CallSite cs = (CallSite) MH_bootstrap624 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap624 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper624 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call624 ().invokeExact(o1, o2, o3); } + + static Object bootstrap624 (Object l, Object n, Object t) throws Throwable { return _mh[ 624 ].invokeExact(l, n, t); } + + // 625 + private static MethodType MT_bootstrap625 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap625 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap625", MT_bootstrap625 ()); + } + + private static MethodHandle INDY_call625; + private static MethodHandle INDY_call625 () throws Throwable { + if (INDY_call625 != null) return INDY_call625; + CallSite cs = (CallSite) MH_bootstrap625 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap625 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper625 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call625 ().invokeExact(o1, o2, o3); } + + static Object bootstrap625 (Object l, Object n, Object t) throws Throwable { return _mh[ 625 ].invokeExact(l, n, t); } + + // 626 + private static MethodType MT_bootstrap626 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap626 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap626", MT_bootstrap626 ()); + } + + private static MethodHandle INDY_call626; + private static MethodHandle INDY_call626 () throws Throwable { + if (INDY_call626 != null) return INDY_call626; + CallSite cs = (CallSite) MH_bootstrap626 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap626 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper626 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call626 ().invokeExact(o1, o2, o3); } + + static Object bootstrap626 (Object l, Object n, Object t) throws Throwable { return _mh[ 626 ].invokeExact(l, n, t); } + + // 627 + private static MethodType MT_bootstrap627 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap627 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap627", MT_bootstrap627 ()); + } + + private static MethodHandle INDY_call627; + private static MethodHandle INDY_call627 () throws Throwable { + if (INDY_call627 != null) return INDY_call627; + CallSite cs = (CallSite) MH_bootstrap627 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap627 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper627 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call627 ().invokeExact(o1, o2, o3); } + + static Object bootstrap627 (Object l, Object n, Object t) throws Throwable { return _mh[ 627 ].invokeExact(l, n, t); } + + // 628 + private static MethodType MT_bootstrap628 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap628 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap628", MT_bootstrap628 ()); + } + + private static MethodHandle INDY_call628; + private static MethodHandle INDY_call628 () throws Throwable { + if (INDY_call628 != null) return INDY_call628; + CallSite cs = (CallSite) MH_bootstrap628 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap628 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper628 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call628 ().invokeExact(o1, o2, o3); } + + static Object bootstrap628 (Object l, Object n, Object t) throws Throwable { return _mh[ 628 ].invokeExact(l, n, t); } + + // 629 + private static MethodType MT_bootstrap629 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap629 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap629", MT_bootstrap629 ()); + } + + private static MethodHandle INDY_call629; + private static MethodHandle INDY_call629 () throws Throwable { + if (INDY_call629 != null) return INDY_call629; + CallSite cs = (CallSite) MH_bootstrap629 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap629 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper629 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call629 ().invokeExact(o1, o2, o3); } + + static Object bootstrap629 (Object l, Object n, Object t) throws Throwable { return _mh[ 629 ].invokeExact(l, n, t); } + + // 630 + private static MethodType MT_bootstrap630 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap630 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap630", MT_bootstrap630 ()); + } + + private static MethodHandle INDY_call630; + private static MethodHandle INDY_call630 () throws Throwable { + if (INDY_call630 != null) return INDY_call630; + CallSite cs = (CallSite) MH_bootstrap630 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap630 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper630 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call630 ().invokeExact(o1, o2, o3); } + + static Object bootstrap630 (Object l, Object n, Object t) throws Throwable { return _mh[ 630 ].invokeExact(l, n, t); } + + // 631 + private static MethodType MT_bootstrap631 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap631 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap631", MT_bootstrap631 ()); + } + + private static MethodHandle INDY_call631; + private static MethodHandle INDY_call631 () throws Throwable { + if (INDY_call631 != null) return INDY_call631; + CallSite cs = (CallSite) MH_bootstrap631 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap631 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper631 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call631 ().invokeExact(o1, o2, o3); } + + static Object bootstrap631 (Object l, Object n, Object t) throws Throwable { return _mh[ 631 ].invokeExact(l, n, t); } + + // 632 + private static MethodType MT_bootstrap632 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap632 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap632", MT_bootstrap632 ()); + } + + private static MethodHandle INDY_call632; + private static MethodHandle INDY_call632 () throws Throwable { + if (INDY_call632 != null) return INDY_call632; + CallSite cs = (CallSite) MH_bootstrap632 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap632 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper632 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call632 ().invokeExact(o1, o2, o3); } + + static Object bootstrap632 (Object l, Object n, Object t) throws Throwable { return _mh[ 632 ].invokeExact(l, n, t); } + + // 633 + private static MethodType MT_bootstrap633 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap633 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap633", MT_bootstrap633 ()); + } + + private static MethodHandle INDY_call633; + private static MethodHandle INDY_call633 () throws Throwable { + if (INDY_call633 != null) return INDY_call633; + CallSite cs = (CallSite) MH_bootstrap633 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap633 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper633 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call633 ().invokeExact(o1, o2, o3); } + + static Object bootstrap633 (Object l, Object n, Object t) throws Throwable { return _mh[ 633 ].invokeExact(l, n, t); } + + // 634 + private static MethodType MT_bootstrap634 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap634 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap634", MT_bootstrap634 ()); + } + + private static MethodHandle INDY_call634; + private static MethodHandle INDY_call634 () throws Throwable { + if (INDY_call634 != null) return INDY_call634; + CallSite cs = (CallSite) MH_bootstrap634 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap634 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper634 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call634 ().invokeExact(o1, o2, o3); } + + static Object bootstrap634 (Object l, Object n, Object t) throws Throwable { return _mh[ 634 ].invokeExact(l, n, t); } + + // 635 + private static MethodType MT_bootstrap635 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap635 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap635", MT_bootstrap635 ()); + } + + private static MethodHandle INDY_call635; + private static MethodHandle INDY_call635 () throws Throwable { + if (INDY_call635 != null) return INDY_call635; + CallSite cs = (CallSite) MH_bootstrap635 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap635 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper635 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call635 ().invokeExact(o1, o2, o3); } + + static Object bootstrap635 (Object l, Object n, Object t) throws Throwable { return _mh[ 635 ].invokeExact(l, n, t); } + + // 636 + private static MethodType MT_bootstrap636 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap636 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap636", MT_bootstrap636 ()); + } + + private static MethodHandle INDY_call636; + private static MethodHandle INDY_call636 () throws Throwable { + if (INDY_call636 != null) return INDY_call636; + CallSite cs = (CallSite) MH_bootstrap636 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap636 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper636 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call636 ().invokeExact(o1, o2, o3); } + + static Object bootstrap636 (Object l, Object n, Object t) throws Throwable { return _mh[ 636 ].invokeExact(l, n, t); } + + // 637 + private static MethodType MT_bootstrap637 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap637 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap637", MT_bootstrap637 ()); + } + + private static MethodHandle INDY_call637; + private static MethodHandle INDY_call637 () throws Throwable { + if (INDY_call637 != null) return INDY_call637; + CallSite cs = (CallSite) MH_bootstrap637 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap637 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper637 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call637 ().invokeExact(o1, o2, o3); } + + static Object bootstrap637 (Object l, Object n, Object t) throws Throwable { return _mh[ 637 ].invokeExact(l, n, t); } + + // 638 + private static MethodType MT_bootstrap638 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap638 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap638", MT_bootstrap638 ()); + } + + private static MethodHandle INDY_call638; + private static MethodHandle INDY_call638 () throws Throwable { + if (INDY_call638 != null) return INDY_call638; + CallSite cs = (CallSite) MH_bootstrap638 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap638 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper638 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call638 ().invokeExact(o1, o2, o3); } + + static Object bootstrap638 (Object l, Object n, Object t) throws Throwable { return _mh[ 638 ].invokeExact(l, n, t); } + + // 639 + private static MethodType MT_bootstrap639 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap639 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap639", MT_bootstrap639 ()); + } + + private static MethodHandle INDY_call639; + private static MethodHandle INDY_call639 () throws Throwable { + if (INDY_call639 != null) return INDY_call639; + CallSite cs = (CallSite) MH_bootstrap639 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap639 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper639 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call639 ().invokeExact(o1, o2, o3); } + + static Object bootstrap639 (Object l, Object n, Object t) throws Throwable { return _mh[ 639 ].invokeExact(l, n, t); } + + // 640 + private static MethodType MT_bootstrap640 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap640 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap640", MT_bootstrap640 ()); + } + + private static MethodHandle INDY_call640; + private static MethodHandle INDY_call640 () throws Throwable { + if (INDY_call640 != null) return INDY_call640; + CallSite cs = (CallSite) MH_bootstrap640 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap640 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper640 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call640 ().invokeExact(o1, o2, o3); } + + static Object bootstrap640 (Object l, Object n, Object t) throws Throwable { return _mh[ 640 ].invokeExact(l, n, t); } + + // 641 + private static MethodType MT_bootstrap641 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap641 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap641", MT_bootstrap641 ()); + } + + private static MethodHandle INDY_call641; + private static MethodHandle INDY_call641 () throws Throwable { + if (INDY_call641 != null) return INDY_call641; + CallSite cs = (CallSite) MH_bootstrap641 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap641 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper641 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call641 ().invokeExact(o1, o2, o3); } + + static Object bootstrap641 (Object l, Object n, Object t) throws Throwable { return _mh[ 641 ].invokeExact(l, n, t); } + + // 642 + private static MethodType MT_bootstrap642 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap642 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap642", MT_bootstrap642 ()); + } + + private static MethodHandle INDY_call642; + private static MethodHandle INDY_call642 () throws Throwable { + if (INDY_call642 != null) return INDY_call642; + CallSite cs = (CallSite) MH_bootstrap642 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap642 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper642 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call642 ().invokeExact(o1, o2, o3); } + + static Object bootstrap642 (Object l, Object n, Object t) throws Throwable { return _mh[ 642 ].invokeExact(l, n, t); } + + // 643 + private static MethodType MT_bootstrap643 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap643 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap643", MT_bootstrap643 ()); + } + + private static MethodHandle INDY_call643; + private static MethodHandle INDY_call643 () throws Throwable { + if (INDY_call643 != null) return INDY_call643; + CallSite cs = (CallSite) MH_bootstrap643 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap643 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper643 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call643 ().invokeExact(o1, o2, o3); } + + static Object bootstrap643 (Object l, Object n, Object t) throws Throwable { return _mh[ 643 ].invokeExact(l, n, t); } + + // 644 + private static MethodType MT_bootstrap644 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap644 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap644", MT_bootstrap644 ()); + } + + private static MethodHandle INDY_call644; + private static MethodHandle INDY_call644 () throws Throwable { + if (INDY_call644 != null) return INDY_call644; + CallSite cs = (CallSite) MH_bootstrap644 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap644 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper644 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call644 ().invokeExact(o1, o2, o3); } + + static Object bootstrap644 (Object l, Object n, Object t) throws Throwable { return _mh[ 644 ].invokeExact(l, n, t); } + + // 645 + private static MethodType MT_bootstrap645 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap645 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap645", MT_bootstrap645 ()); + } + + private static MethodHandle INDY_call645; + private static MethodHandle INDY_call645 () throws Throwable { + if (INDY_call645 != null) return INDY_call645; + CallSite cs = (CallSite) MH_bootstrap645 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap645 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper645 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call645 ().invokeExact(o1, o2, o3); } + + static Object bootstrap645 (Object l, Object n, Object t) throws Throwable { return _mh[ 645 ].invokeExact(l, n, t); } + + // 646 + private static MethodType MT_bootstrap646 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap646 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap646", MT_bootstrap646 ()); + } + + private static MethodHandle INDY_call646; + private static MethodHandle INDY_call646 () throws Throwable { + if (INDY_call646 != null) return INDY_call646; + CallSite cs = (CallSite) MH_bootstrap646 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap646 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper646 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call646 ().invokeExact(o1, o2, o3); } + + static Object bootstrap646 (Object l, Object n, Object t) throws Throwable { return _mh[ 646 ].invokeExact(l, n, t); } + + // 647 + private static MethodType MT_bootstrap647 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap647 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap647", MT_bootstrap647 ()); + } + + private static MethodHandle INDY_call647; + private static MethodHandle INDY_call647 () throws Throwable { + if (INDY_call647 != null) return INDY_call647; + CallSite cs = (CallSite) MH_bootstrap647 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap647 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper647 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call647 ().invokeExact(o1, o2, o3); } + + static Object bootstrap647 (Object l, Object n, Object t) throws Throwable { return _mh[ 647 ].invokeExact(l, n, t); } + + // 648 + private static MethodType MT_bootstrap648 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap648 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap648", MT_bootstrap648 ()); + } + + private static MethodHandle INDY_call648; + private static MethodHandle INDY_call648 () throws Throwable { + if (INDY_call648 != null) return INDY_call648; + CallSite cs = (CallSite) MH_bootstrap648 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap648 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper648 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call648 ().invokeExact(o1, o2, o3); } + + static Object bootstrap648 (Object l, Object n, Object t) throws Throwable { return _mh[ 648 ].invokeExact(l, n, t); } + + // 649 + private static MethodType MT_bootstrap649 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap649 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap649", MT_bootstrap649 ()); + } + + private static MethodHandle INDY_call649; + private static MethodHandle INDY_call649 () throws Throwable { + if (INDY_call649 != null) return INDY_call649; + CallSite cs = (CallSite) MH_bootstrap649 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap649 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper649 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call649 ().invokeExact(o1, o2, o3); } + + static Object bootstrap649 (Object l, Object n, Object t) throws Throwable { return _mh[ 649 ].invokeExact(l, n, t); } + + // 650 + private static MethodType MT_bootstrap650 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap650 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap650", MT_bootstrap650 ()); + } + + private static MethodHandle INDY_call650; + private static MethodHandle INDY_call650 () throws Throwable { + if (INDY_call650 != null) return INDY_call650; + CallSite cs = (CallSite) MH_bootstrap650 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap650 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper650 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call650 ().invokeExact(o1, o2, o3); } + + static Object bootstrap650 (Object l, Object n, Object t) throws Throwable { return _mh[ 650 ].invokeExact(l, n, t); } + + // 651 + private static MethodType MT_bootstrap651 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap651 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap651", MT_bootstrap651 ()); + } + + private static MethodHandle INDY_call651; + private static MethodHandle INDY_call651 () throws Throwable { + if (INDY_call651 != null) return INDY_call651; + CallSite cs = (CallSite) MH_bootstrap651 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap651 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper651 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call651 ().invokeExact(o1, o2, o3); } + + static Object bootstrap651 (Object l, Object n, Object t) throws Throwable { return _mh[ 651 ].invokeExact(l, n, t); } + + // 652 + private static MethodType MT_bootstrap652 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap652 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap652", MT_bootstrap652 ()); + } + + private static MethodHandle INDY_call652; + private static MethodHandle INDY_call652 () throws Throwable { + if (INDY_call652 != null) return INDY_call652; + CallSite cs = (CallSite) MH_bootstrap652 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap652 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper652 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call652 ().invokeExact(o1, o2, o3); } + + static Object bootstrap652 (Object l, Object n, Object t) throws Throwable { return _mh[ 652 ].invokeExact(l, n, t); } + + // 653 + private static MethodType MT_bootstrap653 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap653 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap653", MT_bootstrap653 ()); + } + + private static MethodHandle INDY_call653; + private static MethodHandle INDY_call653 () throws Throwable { + if (INDY_call653 != null) return INDY_call653; + CallSite cs = (CallSite) MH_bootstrap653 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap653 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper653 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call653 ().invokeExact(o1, o2, o3); } + + static Object bootstrap653 (Object l, Object n, Object t) throws Throwable { return _mh[ 653 ].invokeExact(l, n, t); } + + // 654 + private static MethodType MT_bootstrap654 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap654 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap654", MT_bootstrap654 ()); + } + + private static MethodHandle INDY_call654; + private static MethodHandle INDY_call654 () throws Throwable { + if (INDY_call654 != null) return INDY_call654; + CallSite cs = (CallSite) MH_bootstrap654 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap654 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper654 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call654 ().invokeExact(o1, o2, o3); } + + static Object bootstrap654 (Object l, Object n, Object t) throws Throwable { return _mh[ 654 ].invokeExact(l, n, t); } + + // 655 + private static MethodType MT_bootstrap655 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap655 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap655", MT_bootstrap655 ()); + } + + private static MethodHandle INDY_call655; + private static MethodHandle INDY_call655 () throws Throwable { + if (INDY_call655 != null) return INDY_call655; + CallSite cs = (CallSite) MH_bootstrap655 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap655 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper655 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call655 ().invokeExact(o1, o2, o3); } + + static Object bootstrap655 (Object l, Object n, Object t) throws Throwable { return _mh[ 655 ].invokeExact(l, n, t); } + + // 656 + private static MethodType MT_bootstrap656 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap656 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap656", MT_bootstrap656 ()); + } + + private static MethodHandle INDY_call656; + private static MethodHandle INDY_call656 () throws Throwable { + if (INDY_call656 != null) return INDY_call656; + CallSite cs = (CallSite) MH_bootstrap656 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap656 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper656 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call656 ().invokeExact(o1, o2, o3); } + + static Object bootstrap656 (Object l, Object n, Object t) throws Throwable { return _mh[ 656 ].invokeExact(l, n, t); } + + // 657 + private static MethodType MT_bootstrap657 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap657 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap657", MT_bootstrap657 ()); + } + + private static MethodHandle INDY_call657; + private static MethodHandle INDY_call657 () throws Throwable { + if (INDY_call657 != null) return INDY_call657; + CallSite cs = (CallSite) MH_bootstrap657 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap657 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper657 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call657 ().invokeExact(o1, o2, o3); } + + static Object bootstrap657 (Object l, Object n, Object t) throws Throwable { return _mh[ 657 ].invokeExact(l, n, t); } + + // 658 + private static MethodType MT_bootstrap658 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap658 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap658", MT_bootstrap658 ()); + } + + private static MethodHandle INDY_call658; + private static MethodHandle INDY_call658 () throws Throwable { + if (INDY_call658 != null) return INDY_call658; + CallSite cs = (CallSite) MH_bootstrap658 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap658 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper658 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call658 ().invokeExact(o1, o2, o3); } + + static Object bootstrap658 (Object l, Object n, Object t) throws Throwable { return _mh[ 658 ].invokeExact(l, n, t); } + + // 659 + private static MethodType MT_bootstrap659 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap659 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap659", MT_bootstrap659 ()); + } + + private static MethodHandle INDY_call659; + private static MethodHandle INDY_call659 () throws Throwable { + if (INDY_call659 != null) return INDY_call659; + CallSite cs = (CallSite) MH_bootstrap659 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap659 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper659 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call659 ().invokeExact(o1, o2, o3); } + + static Object bootstrap659 (Object l, Object n, Object t) throws Throwable { return _mh[ 659 ].invokeExact(l, n, t); } + + // 660 + private static MethodType MT_bootstrap660 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap660 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap660", MT_bootstrap660 ()); + } + + private static MethodHandle INDY_call660; + private static MethodHandle INDY_call660 () throws Throwable { + if (INDY_call660 != null) return INDY_call660; + CallSite cs = (CallSite) MH_bootstrap660 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap660 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper660 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call660 ().invokeExact(o1, o2, o3); } + + static Object bootstrap660 (Object l, Object n, Object t) throws Throwable { return _mh[ 660 ].invokeExact(l, n, t); } + + // 661 + private static MethodType MT_bootstrap661 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap661 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap661", MT_bootstrap661 ()); + } + + private static MethodHandle INDY_call661; + private static MethodHandle INDY_call661 () throws Throwable { + if (INDY_call661 != null) return INDY_call661; + CallSite cs = (CallSite) MH_bootstrap661 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap661 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper661 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call661 ().invokeExact(o1, o2, o3); } + + static Object bootstrap661 (Object l, Object n, Object t) throws Throwable { return _mh[ 661 ].invokeExact(l, n, t); } + + // 662 + private static MethodType MT_bootstrap662 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap662 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap662", MT_bootstrap662 ()); + } + + private static MethodHandle INDY_call662; + private static MethodHandle INDY_call662 () throws Throwable { + if (INDY_call662 != null) return INDY_call662; + CallSite cs = (CallSite) MH_bootstrap662 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap662 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper662 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call662 ().invokeExact(o1, o2, o3); } + + static Object bootstrap662 (Object l, Object n, Object t) throws Throwable { return _mh[ 662 ].invokeExact(l, n, t); } + + // 663 + private static MethodType MT_bootstrap663 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap663 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap663", MT_bootstrap663 ()); + } + + private static MethodHandle INDY_call663; + private static MethodHandle INDY_call663 () throws Throwable { + if (INDY_call663 != null) return INDY_call663; + CallSite cs = (CallSite) MH_bootstrap663 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap663 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper663 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call663 ().invokeExact(o1, o2, o3); } + + static Object bootstrap663 (Object l, Object n, Object t) throws Throwable { return _mh[ 663 ].invokeExact(l, n, t); } + + // 664 + private static MethodType MT_bootstrap664 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap664 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap664", MT_bootstrap664 ()); + } + + private static MethodHandle INDY_call664; + private static MethodHandle INDY_call664 () throws Throwable { + if (INDY_call664 != null) return INDY_call664; + CallSite cs = (CallSite) MH_bootstrap664 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap664 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper664 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call664 ().invokeExact(o1, o2, o3); } + + static Object bootstrap664 (Object l, Object n, Object t) throws Throwable { return _mh[ 664 ].invokeExact(l, n, t); } + + // 665 + private static MethodType MT_bootstrap665 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap665 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap665", MT_bootstrap665 ()); + } + + private static MethodHandle INDY_call665; + private static MethodHandle INDY_call665 () throws Throwable { + if (INDY_call665 != null) return INDY_call665; + CallSite cs = (CallSite) MH_bootstrap665 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap665 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper665 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call665 ().invokeExact(o1, o2, o3); } + + static Object bootstrap665 (Object l, Object n, Object t) throws Throwable { return _mh[ 665 ].invokeExact(l, n, t); } + + // 666 + private static MethodType MT_bootstrap666 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap666 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap666", MT_bootstrap666 ()); + } + + private static MethodHandle INDY_call666; + private static MethodHandle INDY_call666 () throws Throwable { + if (INDY_call666 != null) return INDY_call666; + CallSite cs = (CallSite) MH_bootstrap666 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap666 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper666 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call666 ().invokeExact(o1, o2, o3); } + + static Object bootstrap666 (Object l, Object n, Object t) throws Throwable { return _mh[ 666 ].invokeExact(l, n, t); } + + // 667 + private static MethodType MT_bootstrap667 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap667 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap667", MT_bootstrap667 ()); + } + + private static MethodHandle INDY_call667; + private static MethodHandle INDY_call667 () throws Throwable { + if (INDY_call667 != null) return INDY_call667; + CallSite cs = (CallSite) MH_bootstrap667 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap667 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper667 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call667 ().invokeExact(o1, o2, o3); } + + static Object bootstrap667 (Object l, Object n, Object t) throws Throwable { return _mh[ 667 ].invokeExact(l, n, t); } + + // 668 + private static MethodType MT_bootstrap668 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap668 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap668", MT_bootstrap668 ()); + } + + private static MethodHandle INDY_call668; + private static MethodHandle INDY_call668 () throws Throwable { + if (INDY_call668 != null) return INDY_call668; + CallSite cs = (CallSite) MH_bootstrap668 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap668 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper668 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call668 ().invokeExact(o1, o2, o3); } + + static Object bootstrap668 (Object l, Object n, Object t) throws Throwable { return _mh[ 668 ].invokeExact(l, n, t); } + + // 669 + private static MethodType MT_bootstrap669 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap669 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap669", MT_bootstrap669 ()); + } + + private static MethodHandle INDY_call669; + private static MethodHandle INDY_call669 () throws Throwable { + if (INDY_call669 != null) return INDY_call669; + CallSite cs = (CallSite) MH_bootstrap669 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap669 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper669 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call669 ().invokeExact(o1, o2, o3); } + + static Object bootstrap669 (Object l, Object n, Object t) throws Throwable { return _mh[ 669 ].invokeExact(l, n, t); } + + // 670 + private static MethodType MT_bootstrap670 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap670 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap670", MT_bootstrap670 ()); + } + + private static MethodHandle INDY_call670; + private static MethodHandle INDY_call670 () throws Throwable { + if (INDY_call670 != null) return INDY_call670; + CallSite cs = (CallSite) MH_bootstrap670 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap670 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper670 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call670 ().invokeExact(o1, o2, o3); } + + static Object bootstrap670 (Object l, Object n, Object t) throws Throwable { return _mh[ 670 ].invokeExact(l, n, t); } + + // 671 + private static MethodType MT_bootstrap671 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap671 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap671", MT_bootstrap671 ()); + } + + private static MethodHandle INDY_call671; + private static MethodHandle INDY_call671 () throws Throwable { + if (INDY_call671 != null) return INDY_call671; + CallSite cs = (CallSite) MH_bootstrap671 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap671 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper671 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call671 ().invokeExact(o1, o2, o3); } + + static Object bootstrap671 (Object l, Object n, Object t) throws Throwable { return _mh[ 671 ].invokeExact(l, n, t); } + + // 672 + private static MethodType MT_bootstrap672 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap672 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap672", MT_bootstrap672 ()); + } + + private static MethodHandle INDY_call672; + private static MethodHandle INDY_call672 () throws Throwable { + if (INDY_call672 != null) return INDY_call672; + CallSite cs = (CallSite) MH_bootstrap672 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap672 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper672 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call672 ().invokeExact(o1, o2, o3); } + + static Object bootstrap672 (Object l, Object n, Object t) throws Throwable { return _mh[ 672 ].invokeExact(l, n, t); } + + // 673 + private static MethodType MT_bootstrap673 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap673 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap673", MT_bootstrap673 ()); + } + + private static MethodHandle INDY_call673; + private static MethodHandle INDY_call673 () throws Throwable { + if (INDY_call673 != null) return INDY_call673; + CallSite cs = (CallSite) MH_bootstrap673 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap673 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper673 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call673 ().invokeExact(o1, o2, o3); } + + static Object bootstrap673 (Object l, Object n, Object t) throws Throwable { return _mh[ 673 ].invokeExact(l, n, t); } + + // 674 + private static MethodType MT_bootstrap674 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap674 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap674", MT_bootstrap674 ()); + } + + private static MethodHandle INDY_call674; + private static MethodHandle INDY_call674 () throws Throwable { + if (INDY_call674 != null) return INDY_call674; + CallSite cs = (CallSite) MH_bootstrap674 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap674 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper674 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call674 ().invokeExact(o1, o2, o3); } + + static Object bootstrap674 (Object l, Object n, Object t) throws Throwable { return _mh[ 674 ].invokeExact(l, n, t); } + + // 675 + private static MethodType MT_bootstrap675 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap675 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap675", MT_bootstrap675 ()); + } + + private static MethodHandle INDY_call675; + private static MethodHandle INDY_call675 () throws Throwable { + if (INDY_call675 != null) return INDY_call675; + CallSite cs = (CallSite) MH_bootstrap675 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap675 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper675 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call675 ().invokeExact(o1, o2, o3); } + + static Object bootstrap675 (Object l, Object n, Object t) throws Throwable { return _mh[ 675 ].invokeExact(l, n, t); } + + // 676 + private static MethodType MT_bootstrap676 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap676 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap676", MT_bootstrap676 ()); + } + + private static MethodHandle INDY_call676; + private static MethodHandle INDY_call676 () throws Throwable { + if (INDY_call676 != null) return INDY_call676; + CallSite cs = (CallSite) MH_bootstrap676 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap676 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper676 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call676 ().invokeExact(o1, o2, o3); } + + static Object bootstrap676 (Object l, Object n, Object t) throws Throwable { return _mh[ 676 ].invokeExact(l, n, t); } + + // 677 + private static MethodType MT_bootstrap677 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap677 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap677", MT_bootstrap677 ()); + } + + private static MethodHandle INDY_call677; + private static MethodHandle INDY_call677 () throws Throwable { + if (INDY_call677 != null) return INDY_call677; + CallSite cs = (CallSite) MH_bootstrap677 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap677 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper677 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call677 ().invokeExact(o1, o2, o3); } + + static Object bootstrap677 (Object l, Object n, Object t) throws Throwable { return _mh[ 677 ].invokeExact(l, n, t); } + + // 678 + private static MethodType MT_bootstrap678 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap678 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap678", MT_bootstrap678 ()); + } + + private static MethodHandle INDY_call678; + private static MethodHandle INDY_call678 () throws Throwable { + if (INDY_call678 != null) return INDY_call678; + CallSite cs = (CallSite) MH_bootstrap678 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap678 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper678 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call678 ().invokeExact(o1, o2, o3); } + + static Object bootstrap678 (Object l, Object n, Object t) throws Throwable { return _mh[ 678 ].invokeExact(l, n, t); } + + // 679 + private static MethodType MT_bootstrap679 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap679 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap679", MT_bootstrap679 ()); + } + + private static MethodHandle INDY_call679; + private static MethodHandle INDY_call679 () throws Throwable { + if (INDY_call679 != null) return INDY_call679; + CallSite cs = (CallSite) MH_bootstrap679 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap679 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper679 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call679 ().invokeExact(o1, o2, o3); } + + static Object bootstrap679 (Object l, Object n, Object t) throws Throwable { return _mh[ 679 ].invokeExact(l, n, t); } + + // 680 + private static MethodType MT_bootstrap680 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap680 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap680", MT_bootstrap680 ()); + } + + private static MethodHandle INDY_call680; + private static MethodHandle INDY_call680 () throws Throwable { + if (INDY_call680 != null) return INDY_call680; + CallSite cs = (CallSite) MH_bootstrap680 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap680 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper680 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call680 ().invokeExact(o1, o2, o3); } + + static Object bootstrap680 (Object l, Object n, Object t) throws Throwable { return _mh[ 680 ].invokeExact(l, n, t); } + + // 681 + private static MethodType MT_bootstrap681 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap681 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap681", MT_bootstrap681 ()); + } + + private static MethodHandle INDY_call681; + private static MethodHandle INDY_call681 () throws Throwable { + if (INDY_call681 != null) return INDY_call681; + CallSite cs = (CallSite) MH_bootstrap681 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap681 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper681 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call681 ().invokeExact(o1, o2, o3); } + + static Object bootstrap681 (Object l, Object n, Object t) throws Throwable { return _mh[ 681 ].invokeExact(l, n, t); } + + // 682 + private static MethodType MT_bootstrap682 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap682 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap682", MT_bootstrap682 ()); + } + + private static MethodHandle INDY_call682; + private static MethodHandle INDY_call682 () throws Throwable { + if (INDY_call682 != null) return INDY_call682; + CallSite cs = (CallSite) MH_bootstrap682 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap682 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper682 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call682 ().invokeExact(o1, o2, o3); } + + static Object bootstrap682 (Object l, Object n, Object t) throws Throwable { return _mh[ 682 ].invokeExact(l, n, t); } + + // 683 + private static MethodType MT_bootstrap683 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap683 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap683", MT_bootstrap683 ()); + } + + private static MethodHandle INDY_call683; + private static MethodHandle INDY_call683 () throws Throwable { + if (INDY_call683 != null) return INDY_call683; + CallSite cs = (CallSite) MH_bootstrap683 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap683 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper683 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call683 ().invokeExact(o1, o2, o3); } + + static Object bootstrap683 (Object l, Object n, Object t) throws Throwable { return _mh[ 683 ].invokeExact(l, n, t); } + + // 684 + private static MethodType MT_bootstrap684 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap684 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap684", MT_bootstrap684 ()); + } + + private static MethodHandle INDY_call684; + private static MethodHandle INDY_call684 () throws Throwable { + if (INDY_call684 != null) return INDY_call684; + CallSite cs = (CallSite) MH_bootstrap684 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap684 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper684 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call684 ().invokeExact(o1, o2, o3); } + + static Object bootstrap684 (Object l, Object n, Object t) throws Throwable { return _mh[ 684 ].invokeExact(l, n, t); } + + // 685 + private static MethodType MT_bootstrap685 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap685 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap685", MT_bootstrap685 ()); + } + + private static MethodHandle INDY_call685; + private static MethodHandle INDY_call685 () throws Throwable { + if (INDY_call685 != null) return INDY_call685; + CallSite cs = (CallSite) MH_bootstrap685 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap685 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper685 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call685 ().invokeExact(o1, o2, o3); } + + static Object bootstrap685 (Object l, Object n, Object t) throws Throwable { return _mh[ 685 ].invokeExact(l, n, t); } + + // 686 + private static MethodType MT_bootstrap686 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap686 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap686", MT_bootstrap686 ()); + } + + private static MethodHandle INDY_call686; + private static MethodHandle INDY_call686 () throws Throwable { + if (INDY_call686 != null) return INDY_call686; + CallSite cs = (CallSite) MH_bootstrap686 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap686 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper686 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call686 ().invokeExact(o1, o2, o3); } + + static Object bootstrap686 (Object l, Object n, Object t) throws Throwable { return _mh[ 686 ].invokeExact(l, n, t); } + + // 687 + private static MethodType MT_bootstrap687 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap687 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap687", MT_bootstrap687 ()); + } + + private static MethodHandle INDY_call687; + private static MethodHandle INDY_call687 () throws Throwable { + if (INDY_call687 != null) return INDY_call687; + CallSite cs = (CallSite) MH_bootstrap687 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap687 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper687 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call687 ().invokeExact(o1, o2, o3); } + + static Object bootstrap687 (Object l, Object n, Object t) throws Throwable { return _mh[ 687 ].invokeExact(l, n, t); } + + // 688 + private static MethodType MT_bootstrap688 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap688 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap688", MT_bootstrap688 ()); + } + + private static MethodHandle INDY_call688; + private static MethodHandle INDY_call688 () throws Throwable { + if (INDY_call688 != null) return INDY_call688; + CallSite cs = (CallSite) MH_bootstrap688 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap688 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper688 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call688 ().invokeExact(o1, o2, o3); } + + static Object bootstrap688 (Object l, Object n, Object t) throws Throwable { return _mh[ 688 ].invokeExact(l, n, t); } + + // 689 + private static MethodType MT_bootstrap689 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap689 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap689", MT_bootstrap689 ()); + } + + private static MethodHandle INDY_call689; + private static MethodHandle INDY_call689 () throws Throwable { + if (INDY_call689 != null) return INDY_call689; + CallSite cs = (CallSite) MH_bootstrap689 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap689 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper689 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call689 ().invokeExact(o1, o2, o3); } + + static Object bootstrap689 (Object l, Object n, Object t) throws Throwable { return _mh[ 689 ].invokeExact(l, n, t); } + + // 690 + private static MethodType MT_bootstrap690 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap690 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap690", MT_bootstrap690 ()); + } + + private static MethodHandle INDY_call690; + private static MethodHandle INDY_call690 () throws Throwable { + if (INDY_call690 != null) return INDY_call690; + CallSite cs = (CallSite) MH_bootstrap690 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap690 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper690 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call690 ().invokeExact(o1, o2, o3); } + + static Object bootstrap690 (Object l, Object n, Object t) throws Throwable { return _mh[ 690 ].invokeExact(l, n, t); } + + // 691 + private static MethodType MT_bootstrap691 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap691 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap691", MT_bootstrap691 ()); + } + + private static MethodHandle INDY_call691; + private static MethodHandle INDY_call691 () throws Throwable { + if (INDY_call691 != null) return INDY_call691; + CallSite cs = (CallSite) MH_bootstrap691 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap691 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper691 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call691 ().invokeExact(o1, o2, o3); } + + static Object bootstrap691 (Object l, Object n, Object t) throws Throwable { return _mh[ 691 ].invokeExact(l, n, t); } + + // 692 + private static MethodType MT_bootstrap692 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap692 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap692", MT_bootstrap692 ()); + } + + private static MethodHandle INDY_call692; + private static MethodHandle INDY_call692 () throws Throwable { + if (INDY_call692 != null) return INDY_call692; + CallSite cs = (CallSite) MH_bootstrap692 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap692 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper692 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call692 ().invokeExact(o1, o2, o3); } + + static Object bootstrap692 (Object l, Object n, Object t) throws Throwable { return _mh[ 692 ].invokeExact(l, n, t); } + + // 693 + private static MethodType MT_bootstrap693 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap693 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap693", MT_bootstrap693 ()); + } + + private static MethodHandle INDY_call693; + private static MethodHandle INDY_call693 () throws Throwable { + if (INDY_call693 != null) return INDY_call693; + CallSite cs = (CallSite) MH_bootstrap693 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap693 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper693 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call693 ().invokeExact(o1, o2, o3); } + + static Object bootstrap693 (Object l, Object n, Object t) throws Throwable { return _mh[ 693 ].invokeExact(l, n, t); } + + // 694 + private static MethodType MT_bootstrap694 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap694 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap694", MT_bootstrap694 ()); + } + + private static MethodHandle INDY_call694; + private static MethodHandle INDY_call694 () throws Throwable { + if (INDY_call694 != null) return INDY_call694; + CallSite cs = (CallSite) MH_bootstrap694 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap694 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper694 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call694 ().invokeExact(o1, o2, o3); } + + static Object bootstrap694 (Object l, Object n, Object t) throws Throwable { return _mh[ 694 ].invokeExact(l, n, t); } + + // 695 + private static MethodType MT_bootstrap695 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap695 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap695", MT_bootstrap695 ()); + } + + private static MethodHandle INDY_call695; + private static MethodHandle INDY_call695 () throws Throwable { + if (INDY_call695 != null) return INDY_call695; + CallSite cs = (CallSite) MH_bootstrap695 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap695 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper695 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call695 ().invokeExact(o1, o2, o3); } + + static Object bootstrap695 (Object l, Object n, Object t) throws Throwable { return _mh[ 695 ].invokeExact(l, n, t); } + + // 696 + private static MethodType MT_bootstrap696 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap696 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap696", MT_bootstrap696 ()); + } + + private static MethodHandle INDY_call696; + private static MethodHandle INDY_call696 () throws Throwable { + if (INDY_call696 != null) return INDY_call696; + CallSite cs = (CallSite) MH_bootstrap696 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap696 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper696 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call696 ().invokeExact(o1, o2, o3); } + + static Object bootstrap696 (Object l, Object n, Object t) throws Throwable { return _mh[ 696 ].invokeExact(l, n, t); } + + // 697 + private static MethodType MT_bootstrap697 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap697 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap697", MT_bootstrap697 ()); + } + + private static MethodHandle INDY_call697; + private static MethodHandle INDY_call697 () throws Throwable { + if (INDY_call697 != null) return INDY_call697; + CallSite cs = (CallSite) MH_bootstrap697 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap697 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper697 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call697 ().invokeExact(o1, o2, o3); } + + static Object bootstrap697 (Object l, Object n, Object t) throws Throwable { return _mh[ 697 ].invokeExact(l, n, t); } + + // 698 + private static MethodType MT_bootstrap698 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap698 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap698", MT_bootstrap698 ()); + } + + private static MethodHandle INDY_call698; + private static MethodHandle INDY_call698 () throws Throwable { + if (INDY_call698 != null) return INDY_call698; + CallSite cs = (CallSite) MH_bootstrap698 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap698 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper698 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call698 ().invokeExact(o1, o2, o3); } + + static Object bootstrap698 (Object l, Object n, Object t) throws Throwable { return _mh[ 698 ].invokeExact(l, n, t); } + + // 699 + private static MethodType MT_bootstrap699 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap699 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap699", MT_bootstrap699 ()); + } + + private static MethodHandle INDY_call699; + private static MethodHandle INDY_call699 () throws Throwable { + if (INDY_call699 != null) return INDY_call699; + CallSite cs = (CallSite) MH_bootstrap699 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap699 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper699 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call699 ().invokeExact(o1, o2, o3); } + + static Object bootstrap699 (Object l, Object n, Object t) throws Throwable { return _mh[ 699 ].invokeExact(l, n, t); } + + // 700 + private static MethodType MT_bootstrap700 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap700 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap700", MT_bootstrap700 ()); + } + + private static MethodHandle INDY_call700; + private static MethodHandle INDY_call700 () throws Throwable { + if (INDY_call700 != null) return INDY_call700; + CallSite cs = (CallSite) MH_bootstrap700 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap700 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper700 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call700 ().invokeExact(o1, o2, o3); } + + static Object bootstrap700 (Object l, Object n, Object t) throws Throwable { return _mh[ 700 ].invokeExact(l, n, t); } + + // 701 + private static MethodType MT_bootstrap701 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap701 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap701", MT_bootstrap701 ()); + } + + private static MethodHandle INDY_call701; + private static MethodHandle INDY_call701 () throws Throwable { + if (INDY_call701 != null) return INDY_call701; + CallSite cs = (CallSite) MH_bootstrap701 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap701 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper701 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call701 ().invokeExact(o1, o2, o3); } + + static Object bootstrap701 (Object l, Object n, Object t) throws Throwable { return _mh[ 701 ].invokeExact(l, n, t); } + + // 702 + private static MethodType MT_bootstrap702 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap702 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap702", MT_bootstrap702 ()); + } + + private static MethodHandle INDY_call702; + private static MethodHandle INDY_call702 () throws Throwable { + if (INDY_call702 != null) return INDY_call702; + CallSite cs = (CallSite) MH_bootstrap702 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap702 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper702 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call702 ().invokeExact(o1, o2, o3); } + + static Object bootstrap702 (Object l, Object n, Object t) throws Throwable { return _mh[ 702 ].invokeExact(l, n, t); } + + // 703 + private static MethodType MT_bootstrap703 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap703 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap703", MT_bootstrap703 ()); + } + + private static MethodHandle INDY_call703; + private static MethodHandle INDY_call703 () throws Throwable { + if (INDY_call703 != null) return INDY_call703; + CallSite cs = (CallSite) MH_bootstrap703 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap703 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper703 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call703 ().invokeExact(o1, o2, o3); } + + static Object bootstrap703 (Object l, Object n, Object t) throws Throwable { return _mh[ 703 ].invokeExact(l, n, t); } + + // 704 + private static MethodType MT_bootstrap704 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap704 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap704", MT_bootstrap704 ()); + } + + private static MethodHandle INDY_call704; + private static MethodHandle INDY_call704 () throws Throwable { + if (INDY_call704 != null) return INDY_call704; + CallSite cs = (CallSite) MH_bootstrap704 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap704 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper704 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call704 ().invokeExact(o1, o2, o3); } + + static Object bootstrap704 (Object l, Object n, Object t) throws Throwable { return _mh[ 704 ].invokeExact(l, n, t); } + + // 705 + private static MethodType MT_bootstrap705 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap705 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap705", MT_bootstrap705 ()); + } + + private static MethodHandle INDY_call705; + private static MethodHandle INDY_call705 () throws Throwable { + if (INDY_call705 != null) return INDY_call705; + CallSite cs = (CallSite) MH_bootstrap705 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap705 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper705 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call705 ().invokeExact(o1, o2, o3); } + + static Object bootstrap705 (Object l, Object n, Object t) throws Throwable { return _mh[ 705 ].invokeExact(l, n, t); } + + // 706 + private static MethodType MT_bootstrap706 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap706 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap706", MT_bootstrap706 ()); + } + + private static MethodHandle INDY_call706; + private static MethodHandle INDY_call706 () throws Throwable { + if (INDY_call706 != null) return INDY_call706; + CallSite cs = (CallSite) MH_bootstrap706 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap706 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper706 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call706 ().invokeExact(o1, o2, o3); } + + static Object bootstrap706 (Object l, Object n, Object t) throws Throwable { return _mh[ 706 ].invokeExact(l, n, t); } + + // 707 + private static MethodType MT_bootstrap707 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap707 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap707", MT_bootstrap707 ()); + } + + private static MethodHandle INDY_call707; + private static MethodHandle INDY_call707 () throws Throwable { + if (INDY_call707 != null) return INDY_call707; + CallSite cs = (CallSite) MH_bootstrap707 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap707 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper707 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call707 ().invokeExact(o1, o2, o3); } + + static Object bootstrap707 (Object l, Object n, Object t) throws Throwable { return _mh[ 707 ].invokeExact(l, n, t); } + + // 708 + private static MethodType MT_bootstrap708 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap708 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap708", MT_bootstrap708 ()); + } + + private static MethodHandle INDY_call708; + private static MethodHandle INDY_call708 () throws Throwable { + if (INDY_call708 != null) return INDY_call708; + CallSite cs = (CallSite) MH_bootstrap708 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap708 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper708 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call708 ().invokeExact(o1, o2, o3); } + + static Object bootstrap708 (Object l, Object n, Object t) throws Throwable { return _mh[ 708 ].invokeExact(l, n, t); } + + // 709 + private static MethodType MT_bootstrap709 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap709 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap709", MT_bootstrap709 ()); + } + + private static MethodHandle INDY_call709; + private static MethodHandle INDY_call709 () throws Throwable { + if (INDY_call709 != null) return INDY_call709; + CallSite cs = (CallSite) MH_bootstrap709 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap709 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper709 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call709 ().invokeExact(o1, o2, o3); } + + static Object bootstrap709 (Object l, Object n, Object t) throws Throwable { return _mh[ 709 ].invokeExact(l, n, t); } + + // 710 + private static MethodType MT_bootstrap710 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap710 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap710", MT_bootstrap710 ()); + } + + private static MethodHandle INDY_call710; + private static MethodHandle INDY_call710 () throws Throwable { + if (INDY_call710 != null) return INDY_call710; + CallSite cs = (CallSite) MH_bootstrap710 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap710 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper710 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call710 ().invokeExact(o1, o2, o3); } + + static Object bootstrap710 (Object l, Object n, Object t) throws Throwable { return _mh[ 710 ].invokeExact(l, n, t); } + + // 711 + private static MethodType MT_bootstrap711 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap711 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap711", MT_bootstrap711 ()); + } + + private static MethodHandle INDY_call711; + private static MethodHandle INDY_call711 () throws Throwable { + if (INDY_call711 != null) return INDY_call711; + CallSite cs = (CallSite) MH_bootstrap711 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap711 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper711 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call711 ().invokeExact(o1, o2, o3); } + + static Object bootstrap711 (Object l, Object n, Object t) throws Throwable { return _mh[ 711 ].invokeExact(l, n, t); } + + // 712 + private static MethodType MT_bootstrap712 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap712 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap712", MT_bootstrap712 ()); + } + + private static MethodHandle INDY_call712; + private static MethodHandle INDY_call712 () throws Throwable { + if (INDY_call712 != null) return INDY_call712; + CallSite cs = (CallSite) MH_bootstrap712 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap712 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper712 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call712 ().invokeExact(o1, o2, o3); } + + static Object bootstrap712 (Object l, Object n, Object t) throws Throwable { return _mh[ 712 ].invokeExact(l, n, t); } + + // 713 + private static MethodType MT_bootstrap713 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap713 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap713", MT_bootstrap713 ()); + } + + private static MethodHandle INDY_call713; + private static MethodHandle INDY_call713 () throws Throwable { + if (INDY_call713 != null) return INDY_call713; + CallSite cs = (CallSite) MH_bootstrap713 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap713 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper713 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call713 ().invokeExact(o1, o2, o3); } + + static Object bootstrap713 (Object l, Object n, Object t) throws Throwable { return _mh[ 713 ].invokeExact(l, n, t); } + + // 714 + private static MethodType MT_bootstrap714 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap714 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap714", MT_bootstrap714 ()); + } + + private static MethodHandle INDY_call714; + private static MethodHandle INDY_call714 () throws Throwable { + if (INDY_call714 != null) return INDY_call714; + CallSite cs = (CallSite) MH_bootstrap714 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap714 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper714 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call714 ().invokeExact(o1, o2, o3); } + + static Object bootstrap714 (Object l, Object n, Object t) throws Throwable { return _mh[ 714 ].invokeExact(l, n, t); } + + // 715 + private static MethodType MT_bootstrap715 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap715 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap715", MT_bootstrap715 ()); + } + + private static MethodHandle INDY_call715; + private static MethodHandle INDY_call715 () throws Throwable { + if (INDY_call715 != null) return INDY_call715; + CallSite cs = (CallSite) MH_bootstrap715 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap715 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper715 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call715 ().invokeExact(o1, o2, o3); } + + static Object bootstrap715 (Object l, Object n, Object t) throws Throwable { return _mh[ 715 ].invokeExact(l, n, t); } + + // 716 + private static MethodType MT_bootstrap716 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap716 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap716", MT_bootstrap716 ()); + } + + private static MethodHandle INDY_call716; + private static MethodHandle INDY_call716 () throws Throwable { + if (INDY_call716 != null) return INDY_call716; + CallSite cs = (CallSite) MH_bootstrap716 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap716 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper716 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call716 ().invokeExact(o1, o2, o3); } + + static Object bootstrap716 (Object l, Object n, Object t) throws Throwable { return _mh[ 716 ].invokeExact(l, n, t); } + + // 717 + private static MethodType MT_bootstrap717 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap717 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap717", MT_bootstrap717 ()); + } + + private static MethodHandle INDY_call717; + private static MethodHandle INDY_call717 () throws Throwable { + if (INDY_call717 != null) return INDY_call717; + CallSite cs = (CallSite) MH_bootstrap717 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap717 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper717 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call717 ().invokeExact(o1, o2, o3); } + + static Object bootstrap717 (Object l, Object n, Object t) throws Throwable { return _mh[ 717 ].invokeExact(l, n, t); } + + // 718 + private static MethodType MT_bootstrap718 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap718 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap718", MT_bootstrap718 ()); + } + + private static MethodHandle INDY_call718; + private static MethodHandle INDY_call718 () throws Throwable { + if (INDY_call718 != null) return INDY_call718; + CallSite cs = (CallSite) MH_bootstrap718 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap718 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper718 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call718 ().invokeExact(o1, o2, o3); } + + static Object bootstrap718 (Object l, Object n, Object t) throws Throwable { return _mh[ 718 ].invokeExact(l, n, t); } + + // 719 + private static MethodType MT_bootstrap719 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap719 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap719", MT_bootstrap719 ()); + } + + private static MethodHandle INDY_call719; + private static MethodHandle INDY_call719 () throws Throwable { + if (INDY_call719 != null) return INDY_call719; + CallSite cs = (CallSite) MH_bootstrap719 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap719 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper719 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call719 ().invokeExact(o1, o2, o3); } + + static Object bootstrap719 (Object l, Object n, Object t) throws Throwable { return _mh[ 719 ].invokeExact(l, n, t); } + + // 720 + private static MethodType MT_bootstrap720 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap720 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap720", MT_bootstrap720 ()); + } + + private static MethodHandle INDY_call720; + private static MethodHandle INDY_call720 () throws Throwable { + if (INDY_call720 != null) return INDY_call720; + CallSite cs = (CallSite) MH_bootstrap720 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap720 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper720 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call720 ().invokeExact(o1, o2, o3); } + + static Object bootstrap720 (Object l, Object n, Object t) throws Throwable { return _mh[ 720 ].invokeExact(l, n, t); } + + // 721 + private static MethodType MT_bootstrap721 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap721 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap721", MT_bootstrap721 ()); + } + + private static MethodHandle INDY_call721; + private static MethodHandle INDY_call721 () throws Throwable { + if (INDY_call721 != null) return INDY_call721; + CallSite cs = (CallSite) MH_bootstrap721 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap721 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper721 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call721 ().invokeExact(o1, o2, o3); } + + static Object bootstrap721 (Object l, Object n, Object t) throws Throwable { return _mh[ 721 ].invokeExact(l, n, t); } + + // 722 + private static MethodType MT_bootstrap722 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap722 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap722", MT_bootstrap722 ()); + } + + private static MethodHandle INDY_call722; + private static MethodHandle INDY_call722 () throws Throwable { + if (INDY_call722 != null) return INDY_call722; + CallSite cs = (CallSite) MH_bootstrap722 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap722 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper722 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call722 ().invokeExact(o1, o2, o3); } + + static Object bootstrap722 (Object l, Object n, Object t) throws Throwable { return _mh[ 722 ].invokeExact(l, n, t); } + + // 723 + private static MethodType MT_bootstrap723 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap723 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap723", MT_bootstrap723 ()); + } + + private static MethodHandle INDY_call723; + private static MethodHandle INDY_call723 () throws Throwable { + if (INDY_call723 != null) return INDY_call723; + CallSite cs = (CallSite) MH_bootstrap723 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap723 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper723 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call723 ().invokeExact(o1, o2, o3); } + + static Object bootstrap723 (Object l, Object n, Object t) throws Throwable { return _mh[ 723 ].invokeExact(l, n, t); } + + // 724 + private static MethodType MT_bootstrap724 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap724 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap724", MT_bootstrap724 ()); + } + + private static MethodHandle INDY_call724; + private static MethodHandle INDY_call724 () throws Throwable { + if (INDY_call724 != null) return INDY_call724; + CallSite cs = (CallSite) MH_bootstrap724 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap724 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper724 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call724 ().invokeExact(o1, o2, o3); } + + static Object bootstrap724 (Object l, Object n, Object t) throws Throwable { return _mh[ 724 ].invokeExact(l, n, t); } + + // 725 + private static MethodType MT_bootstrap725 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap725 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap725", MT_bootstrap725 ()); + } + + private static MethodHandle INDY_call725; + private static MethodHandle INDY_call725 () throws Throwable { + if (INDY_call725 != null) return INDY_call725; + CallSite cs = (CallSite) MH_bootstrap725 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap725 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper725 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call725 ().invokeExact(o1, o2, o3); } + + static Object bootstrap725 (Object l, Object n, Object t) throws Throwable { return _mh[ 725 ].invokeExact(l, n, t); } + + // 726 + private static MethodType MT_bootstrap726 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap726 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap726", MT_bootstrap726 ()); + } + + private static MethodHandle INDY_call726; + private static MethodHandle INDY_call726 () throws Throwable { + if (INDY_call726 != null) return INDY_call726; + CallSite cs = (CallSite) MH_bootstrap726 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap726 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper726 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call726 ().invokeExact(o1, o2, o3); } + + static Object bootstrap726 (Object l, Object n, Object t) throws Throwable { return _mh[ 726 ].invokeExact(l, n, t); } + + // 727 + private static MethodType MT_bootstrap727 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap727 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap727", MT_bootstrap727 ()); + } + + private static MethodHandle INDY_call727; + private static MethodHandle INDY_call727 () throws Throwable { + if (INDY_call727 != null) return INDY_call727; + CallSite cs = (CallSite) MH_bootstrap727 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap727 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper727 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call727 ().invokeExact(o1, o2, o3); } + + static Object bootstrap727 (Object l, Object n, Object t) throws Throwable { return _mh[ 727 ].invokeExact(l, n, t); } + + // 728 + private static MethodType MT_bootstrap728 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap728 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap728", MT_bootstrap728 ()); + } + + private static MethodHandle INDY_call728; + private static MethodHandle INDY_call728 () throws Throwable { + if (INDY_call728 != null) return INDY_call728; + CallSite cs = (CallSite) MH_bootstrap728 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap728 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper728 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call728 ().invokeExact(o1, o2, o3); } + + static Object bootstrap728 (Object l, Object n, Object t) throws Throwable { return _mh[ 728 ].invokeExact(l, n, t); } + + // 729 + private static MethodType MT_bootstrap729 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap729 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap729", MT_bootstrap729 ()); + } + + private static MethodHandle INDY_call729; + private static MethodHandle INDY_call729 () throws Throwable { + if (INDY_call729 != null) return INDY_call729; + CallSite cs = (CallSite) MH_bootstrap729 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap729 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper729 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call729 ().invokeExact(o1, o2, o3); } + + static Object bootstrap729 (Object l, Object n, Object t) throws Throwable { return _mh[ 729 ].invokeExact(l, n, t); } + + // 730 + private static MethodType MT_bootstrap730 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap730 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap730", MT_bootstrap730 ()); + } + + private static MethodHandle INDY_call730; + private static MethodHandle INDY_call730 () throws Throwable { + if (INDY_call730 != null) return INDY_call730; + CallSite cs = (CallSite) MH_bootstrap730 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap730 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper730 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call730 ().invokeExact(o1, o2, o3); } + + static Object bootstrap730 (Object l, Object n, Object t) throws Throwable { return _mh[ 730 ].invokeExact(l, n, t); } + + // 731 + private static MethodType MT_bootstrap731 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap731 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap731", MT_bootstrap731 ()); + } + + private static MethodHandle INDY_call731; + private static MethodHandle INDY_call731 () throws Throwable { + if (INDY_call731 != null) return INDY_call731; + CallSite cs = (CallSite) MH_bootstrap731 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap731 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper731 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call731 ().invokeExact(o1, o2, o3); } + + static Object bootstrap731 (Object l, Object n, Object t) throws Throwable { return _mh[ 731 ].invokeExact(l, n, t); } + + // 732 + private static MethodType MT_bootstrap732 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap732 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap732", MT_bootstrap732 ()); + } + + private static MethodHandle INDY_call732; + private static MethodHandle INDY_call732 () throws Throwable { + if (INDY_call732 != null) return INDY_call732; + CallSite cs = (CallSite) MH_bootstrap732 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap732 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper732 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call732 ().invokeExact(o1, o2, o3); } + + static Object bootstrap732 (Object l, Object n, Object t) throws Throwable { return _mh[ 732 ].invokeExact(l, n, t); } + + // 733 + private static MethodType MT_bootstrap733 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap733 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap733", MT_bootstrap733 ()); + } + + private static MethodHandle INDY_call733; + private static MethodHandle INDY_call733 () throws Throwable { + if (INDY_call733 != null) return INDY_call733; + CallSite cs = (CallSite) MH_bootstrap733 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap733 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper733 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call733 ().invokeExact(o1, o2, o3); } + + static Object bootstrap733 (Object l, Object n, Object t) throws Throwable { return _mh[ 733 ].invokeExact(l, n, t); } + + // 734 + private static MethodType MT_bootstrap734 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap734 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap734", MT_bootstrap734 ()); + } + + private static MethodHandle INDY_call734; + private static MethodHandle INDY_call734 () throws Throwable { + if (INDY_call734 != null) return INDY_call734; + CallSite cs = (CallSite) MH_bootstrap734 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap734 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper734 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call734 ().invokeExact(o1, o2, o3); } + + static Object bootstrap734 (Object l, Object n, Object t) throws Throwable { return _mh[ 734 ].invokeExact(l, n, t); } + + // 735 + private static MethodType MT_bootstrap735 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap735 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap735", MT_bootstrap735 ()); + } + + private static MethodHandle INDY_call735; + private static MethodHandle INDY_call735 () throws Throwable { + if (INDY_call735 != null) return INDY_call735; + CallSite cs = (CallSite) MH_bootstrap735 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap735 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper735 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call735 ().invokeExact(o1, o2, o3); } + + static Object bootstrap735 (Object l, Object n, Object t) throws Throwable { return _mh[ 735 ].invokeExact(l, n, t); } + + // 736 + private static MethodType MT_bootstrap736 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap736 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap736", MT_bootstrap736 ()); + } + + private static MethodHandle INDY_call736; + private static MethodHandle INDY_call736 () throws Throwable { + if (INDY_call736 != null) return INDY_call736; + CallSite cs = (CallSite) MH_bootstrap736 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap736 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper736 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call736 ().invokeExact(o1, o2, o3); } + + static Object bootstrap736 (Object l, Object n, Object t) throws Throwable { return _mh[ 736 ].invokeExact(l, n, t); } + + // 737 + private static MethodType MT_bootstrap737 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap737 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap737", MT_bootstrap737 ()); + } + + private static MethodHandle INDY_call737; + private static MethodHandle INDY_call737 () throws Throwable { + if (INDY_call737 != null) return INDY_call737; + CallSite cs = (CallSite) MH_bootstrap737 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap737 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper737 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call737 ().invokeExact(o1, o2, o3); } + + static Object bootstrap737 (Object l, Object n, Object t) throws Throwable { return _mh[ 737 ].invokeExact(l, n, t); } + + // 738 + private static MethodType MT_bootstrap738 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap738 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap738", MT_bootstrap738 ()); + } + + private static MethodHandle INDY_call738; + private static MethodHandle INDY_call738 () throws Throwable { + if (INDY_call738 != null) return INDY_call738; + CallSite cs = (CallSite) MH_bootstrap738 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap738 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper738 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call738 ().invokeExact(o1, o2, o3); } + + static Object bootstrap738 (Object l, Object n, Object t) throws Throwable { return _mh[ 738 ].invokeExact(l, n, t); } + + // 739 + private static MethodType MT_bootstrap739 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap739 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap739", MT_bootstrap739 ()); + } + + private static MethodHandle INDY_call739; + private static MethodHandle INDY_call739 () throws Throwable { + if (INDY_call739 != null) return INDY_call739; + CallSite cs = (CallSite) MH_bootstrap739 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap739 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper739 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call739 ().invokeExact(o1, o2, o3); } + + static Object bootstrap739 (Object l, Object n, Object t) throws Throwable { return _mh[ 739 ].invokeExact(l, n, t); } + + // 740 + private static MethodType MT_bootstrap740 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap740 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap740", MT_bootstrap740 ()); + } + + private static MethodHandle INDY_call740; + private static MethodHandle INDY_call740 () throws Throwable { + if (INDY_call740 != null) return INDY_call740; + CallSite cs = (CallSite) MH_bootstrap740 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap740 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper740 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call740 ().invokeExact(o1, o2, o3); } + + static Object bootstrap740 (Object l, Object n, Object t) throws Throwable { return _mh[ 740 ].invokeExact(l, n, t); } + + // 741 + private static MethodType MT_bootstrap741 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap741 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap741", MT_bootstrap741 ()); + } + + private static MethodHandle INDY_call741; + private static MethodHandle INDY_call741 () throws Throwable { + if (INDY_call741 != null) return INDY_call741; + CallSite cs = (CallSite) MH_bootstrap741 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap741 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper741 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call741 ().invokeExact(o1, o2, o3); } + + static Object bootstrap741 (Object l, Object n, Object t) throws Throwable { return _mh[ 741 ].invokeExact(l, n, t); } + + // 742 + private static MethodType MT_bootstrap742 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap742 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap742", MT_bootstrap742 ()); + } + + private static MethodHandle INDY_call742; + private static MethodHandle INDY_call742 () throws Throwable { + if (INDY_call742 != null) return INDY_call742; + CallSite cs = (CallSite) MH_bootstrap742 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap742 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper742 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call742 ().invokeExact(o1, o2, o3); } + + static Object bootstrap742 (Object l, Object n, Object t) throws Throwable { return _mh[ 742 ].invokeExact(l, n, t); } + + // 743 + private static MethodType MT_bootstrap743 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap743 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap743", MT_bootstrap743 ()); + } + + private static MethodHandle INDY_call743; + private static MethodHandle INDY_call743 () throws Throwable { + if (INDY_call743 != null) return INDY_call743; + CallSite cs = (CallSite) MH_bootstrap743 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap743 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper743 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call743 ().invokeExact(o1, o2, o3); } + + static Object bootstrap743 (Object l, Object n, Object t) throws Throwable { return _mh[ 743 ].invokeExact(l, n, t); } + + // 744 + private static MethodType MT_bootstrap744 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap744 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap744", MT_bootstrap744 ()); + } + + private static MethodHandle INDY_call744; + private static MethodHandle INDY_call744 () throws Throwable { + if (INDY_call744 != null) return INDY_call744; + CallSite cs = (CallSite) MH_bootstrap744 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap744 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper744 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call744 ().invokeExact(o1, o2, o3); } + + static Object bootstrap744 (Object l, Object n, Object t) throws Throwable { return _mh[ 744 ].invokeExact(l, n, t); } + + // 745 + private static MethodType MT_bootstrap745 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap745 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap745", MT_bootstrap745 ()); + } + + private static MethodHandle INDY_call745; + private static MethodHandle INDY_call745 () throws Throwable { + if (INDY_call745 != null) return INDY_call745; + CallSite cs = (CallSite) MH_bootstrap745 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap745 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper745 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call745 ().invokeExact(o1, o2, o3); } + + static Object bootstrap745 (Object l, Object n, Object t) throws Throwable { return _mh[ 745 ].invokeExact(l, n, t); } + + // 746 + private static MethodType MT_bootstrap746 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap746 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap746", MT_bootstrap746 ()); + } + + private static MethodHandle INDY_call746; + private static MethodHandle INDY_call746 () throws Throwable { + if (INDY_call746 != null) return INDY_call746; + CallSite cs = (CallSite) MH_bootstrap746 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap746 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper746 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call746 ().invokeExact(o1, o2, o3); } + + static Object bootstrap746 (Object l, Object n, Object t) throws Throwable { return _mh[ 746 ].invokeExact(l, n, t); } + + // 747 + private static MethodType MT_bootstrap747 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap747 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap747", MT_bootstrap747 ()); + } + + private static MethodHandle INDY_call747; + private static MethodHandle INDY_call747 () throws Throwable { + if (INDY_call747 != null) return INDY_call747; + CallSite cs = (CallSite) MH_bootstrap747 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap747 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper747 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call747 ().invokeExact(o1, o2, o3); } + + static Object bootstrap747 (Object l, Object n, Object t) throws Throwable { return _mh[ 747 ].invokeExact(l, n, t); } + + // 748 + private static MethodType MT_bootstrap748 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap748 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap748", MT_bootstrap748 ()); + } + + private static MethodHandle INDY_call748; + private static MethodHandle INDY_call748 () throws Throwable { + if (INDY_call748 != null) return INDY_call748; + CallSite cs = (CallSite) MH_bootstrap748 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap748 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper748 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call748 ().invokeExact(o1, o2, o3); } + + static Object bootstrap748 (Object l, Object n, Object t) throws Throwable { return _mh[ 748 ].invokeExact(l, n, t); } + + // 749 + private static MethodType MT_bootstrap749 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap749 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap749", MT_bootstrap749 ()); + } + + private static MethodHandle INDY_call749; + private static MethodHandle INDY_call749 () throws Throwable { + if (INDY_call749 != null) return INDY_call749; + CallSite cs = (CallSite) MH_bootstrap749 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap749 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper749 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call749 ().invokeExact(o1, o2, o3); } + + static Object bootstrap749 (Object l, Object n, Object t) throws Throwable { return _mh[ 749 ].invokeExact(l, n, t); } + + // 750 + private static MethodType MT_bootstrap750 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap750 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap750", MT_bootstrap750 ()); + } + + private static MethodHandle INDY_call750; + private static MethodHandle INDY_call750 () throws Throwable { + if (INDY_call750 != null) return INDY_call750; + CallSite cs = (CallSite) MH_bootstrap750 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap750 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper750 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call750 ().invokeExact(o1, o2, o3); } + + static Object bootstrap750 (Object l, Object n, Object t) throws Throwable { return _mh[ 750 ].invokeExact(l, n, t); } + + // 751 + private static MethodType MT_bootstrap751 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap751 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap751", MT_bootstrap751 ()); + } + + private static MethodHandle INDY_call751; + private static MethodHandle INDY_call751 () throws Throwable { + if (INDY_call751 != null) return INDY_call751; + CallSite cs = (CallSite) MH_bootstrap751 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap751 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper751 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call751 ().invokeExact(o1, o2, o3); } + + static Object bootstrap751 (Object l, Object n, Object t) throws Throwable { return _mh[ 751 ].invokeExact(l, n, t); } + + // 752 + private static MethodType MT_bootstrap752 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap752 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap752", MT_bootstrap752 ()); + } + + private static MethodHandle INDY_call752; + private static MethodHandle INDY_call752 () throws Throwable { + if (INDY_call752 != null) return INDY_call752; + CallSite cs = (CallSite) MH_bootstrap752 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap752 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper752 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call752 ().invokeExact(o1, o2, o3); } + + static Object bootstrap752 (Object l, Object n, Object t) throws Throwable { return _mh[ 752 ].invokeExact(l, n, t); } + + // 753 + private static MethodType MT_bootstrap753 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap753 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap753", MT_bootstrap753 ()); + } + + private static MethodHandle INDY_call753; + private static MethodHandle INDY_call753 () throws Throwable { + if (INDY_call753 != null) return INDY_call753; + CallSite cs = (CallSite) MH_bootstrap753 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap753 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper753 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call753 ().invokeExact(o1, o2, o3); } + + static Object bootstrap753 (Object l, Object n, Object t) throws Throwable { return _mh[ 753 ].invokeExact(l, n, t); } + + // 754 + private static MethodType MT_bootstrap754 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap754 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap754", MT_bootstrap754 ()); + } + + private static MethodHandle INDY_call754; + private static MethodHandle INDY_call754 () throws Throwable { + if (INDY_call754 != null) return INDY_call754; + CallSite cs = (CallSite) MH_bootstrap754 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap754 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper754 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call754 ().invokeExact(o1, o2, o3); } + + static Object bootstrap754 (Object l, Object n, Object t) throws Throwable { return _mh[ 754 ].invokeExact(l, n, t); } + + // 755 + private static MethodType MT_bootstrap755 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap755 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap755", MT_bootstrap755 ()); + } + + private static MethodHandle INDY_call755; + private static MethodHandle INDY_call755 () throws Throwable { + if (INDY_call755 != null) return INDY_call755; + CallSite cs = (CallSite) MH_bootstrap755 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap755 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper755 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call755 ().invokeExact(o1, o2, o3); } + + static Object bootstrap755 (Object l, Object n, Object t) throws Throwable { return _mh[ 755 ].invokeExact(l, n, t); } + + // 756 + private static MethodType MT_bootstrap756 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap756 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap756", MT_bootstrap756 ()); + } + + private static MethodHandle INDY_call756; + private static MethodHandle INDY_call756 () throws Throwable { + if (INDY_call756 != null) return INDY_call756; + CallSite cs = (CallSite) MH_bootstrap756 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap756 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper756 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call756 ().invokeExact(o1, o2, o3); } + + static Object bootstrap756 (Object l, Object n, Object t) throws Throwable { return _mh[ 756 ].invokeExact(l, n, t); } + + // 757 + private static MethodType MT_bootstrap757 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap757 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap757", MT_bootstrap757 ()); + } + + private static MethodHandle INDY_call757; + private static MethodHandle INDY_call757 () throws Throwable { + if (INDY_call757 != null) return INDY_call757; + CallSite cs = (CallSite) MH_bootstrap757 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap757 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper757 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call757 ().invokeExact(o1, o2, o3); } + + static Object bootstrap757 (Object l, Object n, Object t) throws Throwable { return _mh[ 757 ].invokeExact(l, n, t); } + + // 758 + private static MethodType MT_bootstrap758 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap758 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap758", MT_bootstrap758 ()); + } + + private static MethodHandle INDY_call758; + private static MethodHandle INDY_call758 () throws Throwable { + if (INDY_call758 != null) return INDY_call758; + CallSite cs = (CallSite) MH_bootstrap758 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap758 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper758 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call758 ().invokeExact(o1, o2, o3); } + + static Object bootstrap758 (Object l, Object n, Object t) throws Throwable { return _mh[ 758 ].invokeExact(l, n, t); } + + // 759 + private static MethodType MT_bootstrap759 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap759 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap759", MT_bootstrap759 ()); + } + + private static MethodHandle INDY_call759; + private static MethodHandle INDY_call759 () throws Throwable { + if (INDY_call759 != null) return INDY_call759; + CallSite cs = (CallSite) MH_bootstrap759 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap759 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper759 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call759 ().invokeExact(o1, o2, o3); } + + static Object bootstrap759 (Object l, Object n, Object t) throws Throwable { return _mh[ 759 ].invokeExact(l, n, t); } + + // 760 + private static MethodType MT_bootstrap760 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap760 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap760", MT_bootstrap760 ()); + } + + private static MethodHandle INDY_call760; + private static MethodHandle INDY_call760 () throws Throwable { + if (INDY_call760 != null) return INDY_call760; + CallSite cs = (CallSite) MH_bootstrap760 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap760 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper760 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call760 ().invokeExact(o1, o2, o3); } + + static Object bootstrap760 (Object l, Object n, Object t) throws Throwable { return _mh[ 760 ].invokeExact(l, n, t); } + + // 761 + private static MethodType MT_bootstrap761 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap761 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap761", MT_bootstrap761 ()); + } + + private static MethodHandle INDY_call761; + private static MethodHandle INDY_call761 () throws Throwable { + if (INDY_call761 != null) return INDY_call761; + CallSite cs = (CallSite) MH_bootstrap761 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap761 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper761 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call761 ().invokeExact(o1, o2, o3); } + + static Object bootstrap761 (Object l, Object n, Object t) throws Throwable { return _mh[ 761 ].invokeExact(l, n, t); } + + // 762 + private static MethodType MT_bootstrap762 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap762 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap762", MT_bootstrap762 ()); + } + + private static MethodHandle INDY_call762; + private static MethodHandle INDY_call762 () throws Throwable { + if (INDY_call762 != null) return INDY_call762; + CallSite cs = (CallSite) MH_bootstrap762 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap762 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper762 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call762 ().invokeExact(o1, o2, o3); } + + static Object bootstrap762 (Object l, Object n, Object t) throws Throwable { return _mh[ 762 ].invokeExact(l, n, t); } + + // 763 + private static MethodType MT_bootstrap763 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap763 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap763", MT_bootstrap763 ()); + } + + private static MethodHandle INDY_call763; + private static MethodHandle INDY_call763 () throws Throwable { + if (INDY_call763 != null) return INDY_call763; + CallSite cs = (CallSite) MH_bootstrap763 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap763 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper763 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call763 ().invokeExact(o1, o2, o3); } + + static Object bootstrap763 (Object l, Object n, Object t) throws Throwable { return _mh[ 763 ].invokeExact(l, n, t); } + + // 764 + private static MethodType MT_bootstrap764 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap764 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap764", MT_bootstrap764 ()); + } + + private static MethodHandle INDY_call764; + private static MethodHandle INDY_call764 () throws Throwable { + if (INDY_call764 != null) return INDY_call764; + CallSite cs = (CallSite) MH_bootstrap764 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap764 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper764 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call764 ().invokeExact(o1, o2, o3); } + + static Object bootstrap764 (Object l, Object n, Object t) throws Throwable { return _mh[ 764 ].invokeExact(l, n, t); } + + // 765 + private static MethodType MT_bootstrap765 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap765 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap765", MT_bootstrap765 ()); + } + + private static MethodHandle INDY_call765; + private static MethodHandle INDY_call765 () throws Throwable { + if (INDY_call765 != null) return INDY_call765; + CallSite cs = (CallSite) MH_bootstrap765 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap765 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper765 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call765 ().invokeExact(o1, o2, o3); } + + static Object bootstrap765 (Object l, Object n, Object t) throws Throwable { return _mh[ 765 ].invokeExact(l, n, t); } + + // 766 + private static MethodType MT_bootstrap766 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap766 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap766", MT_bootstrap766 ()); + } + + private static MethodHandle INDY_call766; + private static MethodHandle INDY_call766 () throws Throwable { + if (INDY_call766 != null) return INDY_call766; + CallSite cs = (CallSite) MH_bootstrap766 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap766 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper766 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call766 ().invokeExact(o1, o2, o3); } + + static Object bootstrap766 (Object l, Object n, Object t) throws Throwable { return _mh[ 766 ].invokeExact(l, n, t); } + + // 767 + private static MethodType MT_bootstrap767 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap767 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap767", MT_bootstrap767 ()); + } + + private static MethodHandle INDY_call767; + private static MethodHandle INDY_call767 () throws Throwable { + if (INDY_call767 != null) return INDY_call767; + CallSite cs = (CallSite) MH_bootstrap767 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap767 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper767 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call767 ().invokeExact(o1, o2, o3); } + + static Object bootstrap767 (Object l, Object n, Object t) throws Throwable { return _mh[ 767 ].invokeExact(l, n, t); } + + // 768 + private static MethodType MT_bootstrap768 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap768 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap768", MT_bootstrap768 ()); + } + + private static MethodHandle INDY_call768; + private static MethodHandle INDY_call768 () throws Throwable { + if (INDY_call768 != null) return INDY_call768; + CallSite cs = (CallSite) MH_bootstrap768 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap768 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper768 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call768 ().invokeExact(o1, o2, o3); } + + static Object bootstrap768 (Object l, Object n, Object t) throws Throwable { return _mh[ 768 ].invokeExact(l, n, t); } + + // 769 + private static MethodType MT_bootstrap769 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap769 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap769", MT_bootstrap769 ()); + } + + private static MethodHandle INDY_call769; + private static MethodHandle INDY_call769 () throws Throwable { + if (INDY_call769 != null) return INDY_call769; + CallSite cs = (CallSite) MH_bootstrap769 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap769 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper769 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call769 ().invokeExact(o1, o2, o3); } + + static Object bootstrap769 (Object l, Object n, Object t) throws Throwable { return _mh[ 769 ].invokeExact(l, n, t); } + + // 770 + private static MethodType MT_bootstrap770 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap770 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap770", MT_bootstrap770 ()); + } + + private static MethodHandle INDY_call770; + private static MethodHandle INDY_call770 () throws Throwable { + if (INDY_call770 != null) return INDY_call770; + CallSite cs = (CallSite) MH_bootstrap770 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap770 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper770 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call770 ().invokeExact(o1, o2, o3); } + + static Object bootstrap770 (Object l, Object n, Object t) throws Throwable { return _mh[ 770 ].invokeExact(l, n, t); } + + // 771 + private static MethodType MT_bootstrap771 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap771 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap771", MT_bootstrap771 ()); + } + + private static MethodHandle INDY_call771; + private static MethodHandle INDY_call771 () throws Throwable { + if (INDY_call771 != null) return INDY_call771; + CallSite cs = (CallSite) MH_bootstrap771 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap771 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper771 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call771 ().invokeExact(o1, o2, o3); } + + static Object bootstrap771 (Object l, Object n, Object t) throws Throwable { return _mh[ 771 ].invokeExact(l, n, t); } + + // 772 + private static MethodType MT_bootstrap772 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap772 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap772", MT_bootstrap772 ()); + } + + private static MethodHandle INDY_call772; + private static MethodHandle INDY_call772 () throws Throwable { + if (INDY_call772 != null) return INDY_call772; + CallSite cs = (CallSite) MH_bootstrap772 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap772 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper772 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call772 ().invokeExact(o1, o2, o3); } + + static Object bootstrap772 (Object l, Object n, Object t) throws Throwable { return _mh[ 772 ].invokeExact(l, n, t); } + + // 773 + private static MethodType MT_bootstrap773 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap773 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap773", MT_bootstrap773 ()); + } + + private static MethodHandle INDY_call773; + private static MethodHandle INDY_call773 () throws Throwable { + if (INDY_call773 != null) return INDY_call773; + CallSite cs = (CallSite) MH_bootstrap773 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap773 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper773 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call773 ().invokeExact(o1, o2, o3); } + + static Object bootstrap773 (Object l, Object n, Object t) throws Throwable { return _mh[ 773 ].invokeExact(l, n, t); } + + // 774 + private static MethodType MT_bootstrap774 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap774 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap774", MT_bootstrap774 ()); + } + + private static MethodHandle INDY_call774; + private static MethodHandle INDY_call774 () throws Throwable { + if (INDY_call774 != null) return INDY_call774; + CallSite cs = (CallSite) MH_bootstrap774 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap774 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper774 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call774 ().invokeExact(o1, o2, o3); } + + static Object bootstrap774 (Object l, Object n, Object t) throws Throwable { return _mh[ 774 ].invokeExact(l, n, t); } + + // 775 + private static MethodType MT_bootstrap775 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap775 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap775", MT_bootstrap775 ()); + } + + private static MethodHandle INDY_call775; + private static MethodHandle INDY_call775 () throws Throwable { + if (INDY_call775 != null) return INDY_call775; + CallSite cs = (CallSite) MH_bootstrap775 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap775 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper775 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call775 ().invokeExact(o1, o2, o3); } + + static Object bootstrap775 (Object l, Object n, Object t) throws Throwable { return _mh[ 775 ].invokeExact(l, n, t); } + + // 776 + private static MethodType MT_bootstrap776 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap776 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap776", MT_bootstrap776 ()); + } + + private static MethodHandle INDY_call776; + private static MethodHandle INDY_call776 () throws Throwable { + if (INDY_call776 != null) return INDY_call776; + CallSite cs = (CallSite) MH_bootstrap776 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap776 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper776 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call776 ().invokeExact(o1, o2, o3); } + + static Object bootstrap776 (Object l, Object n, Object t) throws Throwable { return _mh[ 776 ].invokeExact(l, n, t); } + + // 777 + private static MethodType MT_bootstrap777 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap777 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap777", MT_bootstrap777 ()); + } + + private static MethodHandle INDY_call777; + private static MethodHandle INDY_call777 () throws Throwable { + if (INDY_call777 != null) return INDY_call777; + CallSite cs = (CallSite) MH_bootstrap777 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap777 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper777 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call777 ().invokeExact(o1, o2, o3); } + + static Object bootstrap777 (Object l, Object n, Object t) throws Throwable { return _mh[ 777 ].invokeExact(l, n, t); } + + // 778 + private static MethodType MT_bootstrap778 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap778 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap778", MT_bootstrap778 ()); + } + + private static MethodHandle INDY_call778; + private static MethodHandle INDY_call778 () throws Throwable { + if (INDY_call778 != null) return INDY_call778; + CallSite cs = (CallSite) MH_bootstrap778 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap778 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper778 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call778 ().invokeExact(o1, o2, o3); } + + static Object bootstrap778 (Object l, Object n, Object t) throws Throwable { return _mh[ 778 ].invokeExact(l, n, t); } + + // 779 + private static MethodType MT_bootstrap779 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap779 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap779", MT_bootstrap779 ()); + } + + private static MethodHandle INDY_call779; + private static MethodHandle INDY_call779 () throws Throwable { + if (INDY_call779 != null) return INDY_call779; + CallSite cs = (CallSite) MH_bootstrap779 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap779 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper779 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call779 ().invokeExact(o1, o2, o3); } + + static Object bootstrap779 (Object l, Object n, Object t) throws Throwable { return _mh[ 779 ].invokeExact(l, n, t); } + + // 780 + private static MethodType MT_bootstrap780 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap780 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap780", MT_bootstrap780 ()); + } + + private static MethodHandle INDY_call780; + private static MethodHandle INDY_call780 () throws Throwable { + if (INDY_call780 != null) return INDY_call780; + CallSite cs = (CallSite) MH_bootstrap780 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap780 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper780 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call780 ().invokeExact(o1, o2, o3); } + + static Object bootstrap780 (Object l, Object n, Object t) throws Throwable { return _mh[ 780 ].invokeExact(l, n, t); } + + // 781 + private static MethodType MT_bootstrap781 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap781 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap781", MT_bootstrap781 ()); + } + + private static MethodHandle INDY_call781; + private static MethodHandle INDY_call781 () throws Throwable { + if (INDY_call781 != null) return INDY_call781; + CallSite cs = (CallSite) MH_bootstrap781 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap781 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper781 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call781 ().invokeExact(o1, o2, o3); } + + static Object bootstrap781 (Object l, Object n, Object t) throws Throwable { return _mh[ 781 ].invokeExact(l, n, t); } + + // 782 + private static MethodType MT_bootstrap782 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap782 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap782", MT_bootstrap782 ()); + } + + private static MethodHandle INDY_call782; + private static MethodHandle INDY_call782 () throws Throwable { + if (INDY_call782 != null) return INDY_call782; + CallSite cs = (CallSite) MH_bootstrap782 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap782 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper782 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call782 ().invokeExact(o1, o2, o3); } + + static Object bootstrap782 (Object l, Object n, Object t) throws Throwable { return _mh[ 782 ].invokeExact(l, n, t); } + + // 783 + private static MethodType MT_bootstrap783 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap783 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap783", MT_bootstrap783 ()); + } + + private static MethodHandle INDY_call783; + private static MethodHandle INDY_call783 () throws Throwable { + if (INDY_call783 != null) return INDY_call783; + CallSite cs = (CallSite) MH_bootstrap783 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap783 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper783 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call783 ().invokeExact(o1, o2, o3); } + + static Object bootstrap783 (Object l, Object n, Object t) throws Throwable { return _mh[ 783 ].invokeExact(l, n, t); } + + // 784 + private static MethodType MT_bootstrap784 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap784 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap784", MT_bootstrap784 ()); + } + + private static MethodHandle INDY_call784; + private static MethodHandle INDY_call784 () throws Throwable { + if (INDY_call784 != null) return INDY_call784; + CallSite cs = (CallSite) MH_bootstrap784 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap784 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper784 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call784 ().invokeExact(o1, o2, o3); } + + static Object bootstrap784 (Object l, Object n, Object t) throws Throwable { return _mh[ 784 ].invokeExact(l, n, t); } + + // 785 + private static MethodType MT_bootstrap785 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap785 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap785", MT_bootstrap785 ()); + } + + private static MethodHandle INDY_call785; + private static MethodHandle INDY_call785 () throws Throwable { + if (INDY_call785 != null) return INDY_call785; + CallSite cs = (CallSite) MH_bootstrap785 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap785 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper785 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call785 ().invokeExact(o1, o2, o3); } + + static Object bootstrap785 (Object l, Object n, Object t) throws Throwable { return _mh[ 785 ].invokeExact(l, n, t); } + + // 786 + private static MethodType MT_bootstrap786 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap786 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap786", MT_bootstrap786 ()); + } + + private static MethodHandle INDY_call786; + private static MethodHandle INDY_call786 () throws Throwable { + if (INDY_call786 != null) return INDY_call786; + CallSite cs = (CallSite) MH_bootstrap786 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap786 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper786 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call786 ().invokeExact(o1, o2, o3); } + + static Object bootstrap786 (Object l, Object n, Object t) throws Throwable { return _mh[ 786 ].invokeExact(l, n, t); } + + // 787 + private static MethodType MT_bootstrap787 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap787 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap787", MT_bootstrap787 ()); + } + + private static MethodHandle INDY_call787; + private static MethodHandle INDY_call787 () throws Throwable { + if (INDY_call787 != null) return INDY_call787; + CallSite cs = (CallSite) MH_bootstrap787 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap787 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper787 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call787 ().invokeExact(o1, o2, o3); } + + static Object bootstrap787 (Object l, Object n, Object t) throws Throwable { return _mh[ 787 ].invokeExact(l, n, t); } + + // 788 + private static MethodType MT_bootstrap788 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap788 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap788", MT_bootstrap788 ()); + } + + private static MethodHandle INDY_call788; + private static MethodHandle INDY_call788 () throws Throwable { + if (INDY_call788 != null) return INDY_call788; + CallSite cs = (CallSite) MH_bootstrap788 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap788 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper788 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call788 ().invokeExact(o1, o2, o3); } + + static Object bootstrap788 (Object l, Object n, Object t) throws Throwable { return _mh[ 788 ].invokeExact(l, n, t); } + + // 789 + private static MethodType MT_bootstrap789 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap789 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap789", MT_bootstrap789 ()); + } + + private static MethodHandle INDY_call789; + private static MethodHandle INDY_call789 () throws Throwable { + if (INDY_call789 != null) return INDY_call789; + CallSite cs = (CallSite) MH_bootstrap789 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap789 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper789 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call789 ().invokeExact(o1, o2, o3); } + + static Object bootstrap789 (Object l, Object n, Object t) throws Throwable { return _mh[ 789 ].invokeExact(l, n, t); } + + // 790 + private static MethodType MT_bootstrap790 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap790 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap790", MT_bootstrap790 ()); + } + + private static MethodHandle INDY_call790; + private static MethodHandle INDY_call790 () throws Throwable { + if (INDY_call790 != null) return INDY_call790; + CallSite cs = (CallSite) MH_bootstrap790 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap790 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper790 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call790 ().invokeExact(o1, o2, o3); } + + static Object bootstrap790 (Object l, Object n, Object t) throws Throwable { return _mh[ 790 ].invokeExact(l, n, t); } + + // 791 + private static MethodType MT_bootstrap791 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap791 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap791", MT_bootstrap791 ()); + } + + private static MethodHandle INDY_call791; + private static MethodHandle INDY_call791 () throws Throwable { + if (INDY_call791 != null) return INDY_call791; + CallSite cs = (CallSite) MH_bootstrap791 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap791 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper791 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call791 ().invokeExact(o1, o2, o3); } + + static Object bootstrap791 (Object l, Object n, Object t) throws Throwable { return _mh[ 791 ].invokeExact(l, n, t); } + + // 792 + private static MethodType MT_bootstrap792 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap792 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap792", MT_bootstrap792 ()); + } + + private static MethodHandle INDY_call792; + private static MethodHandle INDY_call792 () throws Throwable { + if (INDY_call792 != null) return INDY_call792; + CallSite cs = (CallSite) MH_bootstrap792 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap792 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper792 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call792 ().invokeExact(o1, o2, o3); } + + static Object bootstrap792 (Object l, Object n, Object t) throws Throwable { return _mh[ 792 ].invokeExact(l, n, t); } + + // 793 + private static MethodType MT_bootstrap793 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap793 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap793", MT_bootstrap793 ()); + } + + private static MethodHandle INDY_call793; + private static MethodHandle INDY_call793 () throws Throwable { + if (INDY_call793 != null) return INDY_call793; + CallSite cs = (CallSite) MH_bootstrap793 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap793 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper793 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call793 ().invokeExact(o1, o2, o3); } + + static Object bootstrap793 (Object l, Object n, Object t) throws Throwable { return _mh[ 793 ].invokeExact(l, n, t); } + + // 794 + private static MethodType MT_bootstrap794 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap794 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap794", MT_bootstrap794 ()); + } + + private static MethodHandle INDY_call794; + private static MethodHandle INDY_call794 () throws Throwable { + if (INDY_call794 != null) return INDY_call794; + CallSite cs = (CallSite) MH_bootstrap794 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap794 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper794 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call794 ().invokeExact(o1, o2, o3); } + + static Object bootstrap794 (Object l, Object n, Object t) throws Throwable { return _mh[ 794 ].invokeExact(l, n, t); } + + // 795 + private static MethodType MT_bootstrap795 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap795 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap795", MT_bootstrap795 ()); + } + + private static MethodHandle INDY_call795; + private static MethodHandle INDY_call795 () throws Throwable { + if (INDY_call795 != null) return INDY_call795; + CallSite cs = (CallSite) MH_bootstrap795 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap795 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper795 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call795 ().invokeExact(o1, o2, o3); } + + static Object bootstrap795 (Object l, Object n, Object t) throws Throwable { return _mh[ 795 ].invokeExact(l, n, t); } + + // 796 + private static MethodType MT_bootstrap796 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap796 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap796", MT_bootstrap796 ()); + } + + private static MethodHandle INDY_call796; + private static MethodHandle INDY_call796 () throws Throwable { + if (INDY_call796 != null) return INDY_call796; + CallSite cs = (CallSite) MH_bootstrap796 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap796 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper796 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call796 ().invokeExact(o1, o2, o3); } + + static Object bootstrap796 (Object l, Object n, Object t) throws Throwable { return _mh[ 796 ].invokeExact(l, n, t); } + + // 797 + private static MethodType MT_bootstrap797 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap797 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap797", MT_bootstrap797 ()); + } + + private static MethodHandle INDY_call797; + private static MethodHandle INDY_call797 () throws Throwable { + if (INDY_call797 != null) return INDY_call797; + CallSite cs = (CallSite) MH_bootstrap797 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap797 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper797 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call797 ().invokeExact(o1, o2, o3); } + + static Object bootstrap797 (Object l, Object n, Object t) throws Throwable { return _mh[ 797 ].invokeExact(l, n, t); } + + // 798 + private static MethodType MT_bootstrap798 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap798 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap798", MT_bootstrap798 ()); + } + + private static MethodHandle INDY_call798; + private static MethodHandle INDY_call798 () throws Throwable { + if (INDY_call798 != null) return INDY_call798; + CallSite cs = (CallSite) MH_bootstrap798 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap798 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper798 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call798 ().invokeExact(o1, o2, o3); } + + static Object bootstrap798 (Object l, Object n, Object t) throws Throwable { return _mh[ 798 ].invokeExact(l, n, t); } + + // 799 + private static MethodType MT_bootstrap799 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap799 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap799", MT_bootstrap799 ()); + } + + private static MethodHandle INDY_call799; + private static MethodHandle INDY_call799 () throws Throwable { + if (INDY_call799 != null) return INDY_call799; + CallSite cs = (CallSite) MH_bootstrap799 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap799 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper799 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call799 ().invokeExact(o1, o2, o3); } + + static Object bootstrap799 (Object l, Object n, Object t) throws Throwable { return _mh[ 799 ].invokeExact(l, n, t); } + + // 800 + private static MethodType MT_bootstrap800 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap800 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap800", MT_bootstrap800 ()); + } + + private static MethodHandle INDY_call800; + private static MethodHandle INDY_call800 () throws Throwable { + if (INDY_call800 != null) return INDY_call800; + CallSite cs = (CallSite) MH_bootstrap800 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap800 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper800 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call800 ().invokeExact(o1, o2, o3); } + + static Object bootstrap800 (Object l, Object n, Object t) throws Throwable { return _mh[ 800 ].invokeExact(l, n, t); } + + // 801 + private static MethodType MT_bootstrap801 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap801 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap801", MT_bootstrap801 ()); + } + + private static MethodHandle INDY_call801; + private static MethodHandle INDY_call801 () throws Throwable { + if (INDY_call801 != null) return INDY_call801; + CallSite cs = (CallSite) MH_bootstrap801 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap801 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper801 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call801 ().invokeExact(o1, o2, o3); } + + static Object bootstrap801 (Object l, Object n, Object t) throws Throwable { return _mh[ 801 ].invokeExact(l, n, t); } + + // 802 + private static MethodType MT_bootstrap802 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap802 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap802", MT_bootstrap802 ()); + } + + private static MethodHandle INDY_call802; + private static MethodHandle INDY_call802 () throws Throwable { + if (INDY_call802 != null) return INDY_call802; + CallSite cs = (CallSite) MH_bootstrap802 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap802 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper802 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call802 ().invokeExact(o1, o2, o3); } + + static Object bootstrap802 (Object l, Object n, Object t) throws Throwable { return _mh[ 802 ].invokeExact(l, n, t); } + + // 803 + private static MethodType MT_bootstrap803 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap803 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap803", MT_bootstrap803 ()); + } + + private static MethodHandle INDY_call803; + private static MethodHandle INDY_call803 () throws Throwable { + if (INDY_call803 != null) return INDY_call803; + CallSite cs = (CallSite) MH_bootstrap803 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap803 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper803 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call803 ().invokeExact(o1, o2, o3); } + + static Object bootstrap803 (Object l, Object n, Object t) throws Throwable { return _mh[ 803 ].invokeExact(l, n, t); } + + // 804 + private static MethodType MT_bootstrap804 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap804 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap804", MT_bootstrap804 ()); + } + + private static MethodHandle INDY_call804; + private static MethodHandle INDY_call804 () throws Throwable { + if (INDY_call804 != null) return INDY_call804; + CallSite cs = (CallSite) MH_bootstrap804 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap804 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper804 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call804 ().invokeExact(o1, o2, o3); } + + static Object bootstrap804 (Object l, Object n, Object t) throws Throwable { return _mh[ 804 ].invokeExact(l, n, t); } + + // 805 + private static MethodType MT_bootstrap805 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap805 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap805", MT_bootstrap805 ()); + } + + private static MethodHandle INDY_call805; + private static MethodHandle INDY_call805 () throws Throwable { + if (INDY_call805 != null) return INDY_call805; + CallSite cs = (CallSite) MH_bootstrap805 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap805 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper805 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call805 ().invokeExact(o1, o2, o3); } + + static Object bootstrap805 (Object l, Object n, Object t) throws Throwable { return _mh[ 805 ].invokeExact(l, n, t); } + + // 806 + private static MethodType MT_bootstrap806 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap806 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap806", MT_bootstrap806 ()); + } + + private static MethodHandle INDY_call806; + private static MethodHandle INDY_call806 () throws Throwable { + if (INDY_call806 != null) return INDY_call806; + CallSite cs = (CallSite) MH_bootstrap806 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap806 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper806 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call806 ().invokeExact(o1, o2, o3); } + + static Object bootstrap806 (Object l, Object n, Object t) throws Throwable { return _mh[ 806 ].invokeExact(l, n, t); } + + // 807 + private static MethodType MT_bootstrap807 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap807 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap807", MT_bootstrap807 ()); + } + + private static MethodHandle INDY_call807; + private static MethodHandle INDY_call807 () throws Throwable { + if (INDY_call807 != null) return INDY_call807; + CallSite cs = (CallSite) MH_bootstrap807 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap807 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper807 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call807 ().invokeExact(o1, o2, o3); } + + static Object bootstrap807 (Object l, Object n, Object t) throws Throwable { return _mh[ 807 ].invokeExact(l, n, t); } + + // 808 + private static MethodType MT_bootstrap808 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap808 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap808", MT_bootstrap808 ()); + } + + private static MethodHandle INDY_call808; + private static MethodHandle INDY_call808 () throws Throwable { + if (INDY_call808 != null) return INDY_call808; + CallSite cs = (CallSite) MH_bootstrap808 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap808 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper808 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call808 ().invokeExact(o1, o2, o3); } + + static Object bootstrap808 (Object l, Object n, Object t) throws Throwable { return _mh[ 808 ].invokeExact(l, n, t); } + + // 809 + private static MethodType MT_bootstrap809 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap809 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap809", MT_bootstrap809 ()); + } + + private static MethodHandle INDY_call809; + private static MethodHandle INDY_call809 () throws Throwable { + if (INDY_call809 != null) return INDY_call809; + CallSite cs = (CallSite) MH_bootstrap809 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap809 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper809 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call809 ().invokeExact(o1, o2, o3); } + + static Object bootstrap809 (Object l, Object n, Object t) throws Throwable { return _mh[ 809 ].invokeExact(l, n, t); } + + // 810 + private static MethodType MT_bootstrap810 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap810 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap810", MT_bootstrap810 ()); + } + + private static MethodHandle INDY_call810; + private static MethodHandle INDY_call810 () throws Throwable { + if (INDY_call810 != null) return INDY_call810; + CallSite cs = (CallSite) MH_bootstrap810 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap810 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper810 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call810 ().invokeExact(o1, o2, o3); } + + static Object bootstrap810 (Object l, Object n, Object t) throws Throwable { return _mh[ 810 ].invokeExact(l, n, t); } + + // 811 + private static MethodType MT_bootstrap811 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap811 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap811", MT_bootstrap811 ()); + } + + private static MethodHandle INDY_call811; + private static MethodHandle INDY_call811 () throws Throwable { + if (INDY_call811 != null) return INDY_call811; + CallSite cs = (CallSite) MH_bootstrap811 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap811 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper811 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call811 ().invokeExact(o1, o2, o3); } + + static Object bootstrap811 (Object l, Object n, Object t) throws Throwable { return _mh[ 811 ].invokeExact(l, n, t); } + + // 812 + private static MethodType MT_bootstrap812 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap812 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap812", MT_bootstrap812 ()); + } + + private static MethodHandle INDY_call812; + private static MethodHandle INDY_call812 () throws Throwable { + if (INDY_call812 != null) return INDY_call812; + CallSite cs = (CallSite) MH_bootstrap812 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap812 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper812 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call812 ().invokeExact(o1, o2, o3); } + + static Object bootstrap812 (Object l, Object n, Object t) throws Throwable { return _mh[ 812 ].invokeExact(l, n, t); } + + // 813 + private static MethodType MT_bootstrap813 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap813 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap813", MT_bootstrap813 ()); + } + + private static MethodHandle INDY_call813; + private static MethodHandle INDY_call813 () throws Throwable { + if (INDY_call813 != null) return INDY_call813; + CallSite cs = (CallSite) MH_bootstrap813 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap813 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper813 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call813 ().invokeExact(o1, o2, o3); } + + static Object bootstrap813 (Object l, Object n, Object t) throws Throwable { return _mh[ 813 ].invokeExact(l, n, t); } + + // 814 + private static MethodType MT_bootstrap814 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap814 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap814", MT_bootstrap814 ()); + } + + private static MethodHandle INDY_call814; + private static MethodHandle INDY_call814 () throws Throwable { + if (INDY_call814 != null) return INDY_call814; + CallSite cs = (CallSite) MH_bootstrap814 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap814 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper814 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call814 ().invokeExact(o1, o2, o3); } + + static Object bootstrap814 (Object l, Object n, Object t) throws Throwable { return _mh[ 814 ].invokeExact(l, n, t); } + + // 815 + private static MethodType MT_bootstrap815 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap815 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap815", MT_bootstrap815 ()); + } + + private static MethodHandle INDY_call815; + private static MethodHandle INDY_call815 () throws Throwable { + if (INDY_call815 != null) return INDY_call815; + CallSite cs = (CallSite) MH_bootstrap815 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap815 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper815 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call815 ().invokeExact(o1, o2, o3); } + + static Object bootstrap815 (Object l, Object n, Object t) throws Throwable { return _mh[ 815 ].invokeExact(l, n, t); } + + // 816 + private static MethodType MT_bootstrap816 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap816 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap816", MT_bootstrap816 ()); + } + + private static MethodHandle INDY_call816; + private static MethodHandle INDY_call816 () throws Throwable { + if (INDY_call816 != null) return INDY_call816; + CallSite cs = (CallSite) MH_bootstrap816 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap816 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper816 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call816 ().invokeExact(o1, o2, o3); } + + static Object bootstrap816 (Object l, Object n, Object t) throws Throwable { return _mh[ 816 ].invokeExact(l, n, t); } + + // 817 + private static MethodType MT_bootstrap817 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap817 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap817", MT_bootstrap817 ()); + } + + private static MethodHandle INDY_call817; + private static MethodHandle INDY_call817 () throws Throwable { + if (INDY_call817 != null) return INDY_call817; + CallSite cs = (CallSite) MH_bootstrap817 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap817 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper817 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call817 ().invokeExact(o1, o2, o3); } + + static Object bootstrap817 (Object l, Object n, Object t) throws Throwable { return _mh[ 817 ].invokeExact(l, n, t); } + + // 818 + private static MethodType MT_bootstrap818 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap818 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap818", MT_bootstrap818 ()); + } + + private static MethodHandle INDY_call818; + private static MethodHandle INDY_call818 () throws Throwable { + if (INDY_call818 != null) return INDY_call818; + CallSite cs = (CallSite) MH_bootstrap818 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap818 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper818 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call818 ().invokeExact(o1, o2, o3); } + + static Object bootstrap818 (Object l, Object n, Object t) throws Throwable { return _mh[ 818 ].invokeExact(l, n, t); } + + // 819 + private static MethodType MT_bootstrap819 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap819 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap819", MT_bootstrap819 ()); + } + + private static MethodHandle INDY_call819; + private static MethodHandle INDY_call819 () throws Throwable { + if (INDY_call819 != null) return INDY_call819; + CallSite cs = (CallSite) MH_bootstrap819 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap819 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper819 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call819 ().invokeExact(o1, o2, o3); } + + static Object bootstrap819 (Object l, Object n, Object t) throws Throwable { return _mh[ 819 ].invokeExact(l, n, t); } + + // 820 + private static MethodType MT_bootstrap820 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap820 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap820", MT_bootstrap820 ()); + } + + private static MethodHandle INDY_call820; + private static MethodHandle INDY_call820 () throws Throwable { + if (INDY_call820 != null) return INDY_call820; + CallSite cs = (CallSite) MH_bootstrap820 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap820 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper820 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call820 ().invokeExact(o1, o2, o3); } + + static Object bootstrap820 (Object l, Object n, Object t) throws Throwable { return _mh[ 820 ].invokeExact(l, n, t); } + + // 821 + private static MethodType MT_bootstrap821 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap821 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap821", MT_bootstrap821 ()); + } + + private static MethodHandle INDY_call821; + private static MethodHandle INDY_call821 () throws Throwable { + if (INDY_call821 != null) return INDY_call821; + CallSite cs = (CallSite) MH_bootstrap821 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap821 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper821 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call821 ().invokeExact(o1, o2, o3); } + + static Object bootstrap821 (Object l, Object n, Object t) throws Throwable { return _mh[ 821 ].invokeExact(l, n, t); } + + // 822 + private static MethodType MT_bootstrap822 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap822 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap822", MT_bootstrap822 ()); + } + + private static MethodHandle INDY_call822; + private static MethodHandle INDY_call822 () throws Throwable { + if (INDY_call822 != null) return INDY_call822; + CallSite cs = (CallSite) MH_bootstrap822 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap822 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper822 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call822 ().invokeExact(o1, o2, o3); } + + static Object bootstrap822 (Object l, Object n, Object t) throws Throwable { return _mh[ 822 ].invokeExact(l, n, t); } + + // 823 + private static MethodType MT_bootstrap823 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap823 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap823", MT_bootstrap823 ()); + } + + private static MethodHandle INDY_call823; + private static MethodHandle INDY_call823 () throws Throwable { + if (INDY_call823 != null) return INDY_call823; + CallSite cs = (CallSite) MH_bootstrap823 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap823 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper823 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call823 ().invokeExact(o1, o2, o3); } + + static Object bootstrap823 (Object l, Object n, Object t) throws Throwable { return _mh[ 823 ].invokeExact(l, n, t); } + + // 824 + private static MethodType MT_bootstrap824 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap824 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap824", MT_bootstrap824 ()); + } + + private static MethodHandle INDY_call824; + private static MethodHandle INDY_call824 () throws Throwable { + if (INDY_call824 != null) return INDY_call824; + CallSite cs = (CallSite) MH_bootstrap824 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap824 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper824 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call824 ().invokeExact(o1, o2, o3); } + + static Object bootstrap824 (Object l, Object n, Object t) throws Throwable { return _mh[ 824 ].invokeExact(l, n, t); } + + // 825 + private static MethodType MT_bootstrap825 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap825 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap825", MT_bootstrap825 ()); + } + + private static MethodHandle INDY_call825; + private static MethodHandle INDY_call825 () throws Throwable { + if (INDY_call825 != null) return INDY_call825; + CallSite cs = (CallSite) MH_bootstrap825 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap825 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper825 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call825 ().invokeExact(o1, o2, o3); } + + static Object bootstrap825 (Object l, Object n, Object t) throws Throwable { return _mh[ 825 ].invokeExact(l, n, t); } + + // 826 + private static MethodType MT_bootstrap826 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap826 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap826", MT_bootstrap826 ()); + } + + private static MethodHandle INDY_call826; + private static MethodHandle INDY_call826 () throws Throwable { + if (INDY_call826 != null) return INDY_call826; + CallSite cs = (CallSite) MH_bootstrap826 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap826 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper826 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call826 ().invokeExact(o1, o2, o3); } + + static Object bootstrap826 (Object l, Object n, Object t) throws Throwable { return _mh[ 826 ].invokeExact(l, n, t); } + + // 827 + private static MethodType MT_bootstrap827 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap827 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap827", MT_bootstrap827 ()); + } + + private static MethodHandle INDY_call827; + private static MethodHandle INDY_call827 () throws Throwable { + if (INDY_call827 != null) return INDY_call827; + CallSite cs = (CallSite) MH_bootstrap827 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap827 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper827 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call827 ().invokeExact(o1, o2, o3); } + + static Object bootstrap827 (Object l, Object n, Object t) throws Throwable { return _mh[ 827 ].invokeExact(l, n, t); } + + // 828 + private static MethodType MT_bootstrap828 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap828 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap828", MT_bootstrap828 ()); + } + + private static MethodHandle INDY_call828; + private static MethodHandle INDY_call828 () throws Throwable { + if (INDY_call828 != null) return INDY_call828; + CallSite cs = (CallSite) MH_bootstrap828 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap828 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper828 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call828 ().invokeExact(o1, o2, o3); } + + static Object bootstrap828 (Object l, Object n, Object t) throws Throwable { return _mh[ 828 ].invokeExact(l, n, t); } + + // 829 + private static MethodType MT_bootstrap829 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap829 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap829", MT_bootstrap829 ()); + } + + private static MethodHandle INDY_call829; + private static MethodHandle INDY_call829 () throws Throwable { + if (INDY_call829 != null) return INDY_call829; + CallSite cs = (CallSite) MH_bootstrap829 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap829 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper829 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call829 ().invokeExact(o1, o2, o3); } + + static Object bootstrap829 (Object l, Object n, Object t) throws Throwable { return _mh[ 829 ].invokeExact(l, n, t); } + + // 830 + private static MethodType MT_bootstrap830 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap830 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap830", MT_bootstrap830 ()); + } + + private static MethodHandle INDY_call830; + private static MethodHandle INDY_call830 () throws Throwable { + if (INDY_call830 != null) return INDY_call830; + CallSite cs = (CallSite) MH_bootstrap830 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap830 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper830 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call830 ().invokeExact(o1, o2, o3); } + + static Object bootstrap830 (Object l, Object n, Object t) throws Throwable { return _mh[ 830 ].invokeExact(l, n, t); } + + // 831 + private static MethodType MT_bootstrap831 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap831 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap831", MT_bootstrap831 ()); + } + + private static MethodHandle INDY_call831; + private static MethodHandle INDY_call831 () throws Throwable { + if (INDY_call831 != null) return INDY_call831; + CallSite cs = (CallSite) MH_bootstrap831 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap831 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper831 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call831 ().invokeExact(o1, o2, o3); } + + static Object bootstrap831 (Object l, Object n, Object t) throws Throwable { return _mh[ 831 ].invokeExact(l, n, t); } + + // 832 + private static MethodType MT_bootstrap832 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap832 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap832", MT_bootstrap832 ()); + } + + private static MethodHandle INDY_call832; + private static MethodHandle INDY_call832 () throws Throwable { + if (INDY_call832 != null) return INDY_call832; + CallSite cs = (CallSite) MH_bootstrap832 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap832 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper832 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call832 ().invokeExact(o1, o2, o3); } + + static Object bootstrap832 (Object l, Object n, Object t) throws Throwable { return _mh[ 832 ].invokeExact(l, n, t); } + + // 833 + private static MethodType MT_bootstrap833 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap833 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap833", MT_bootstrap833 ()); + } + + private static MethodHandle INDY_call833; + private static MethodHandle INDY_call833 () throws Throwable { + if (INDY_call833 != null) return INDY_call833; + CallSite cs = (CallSite) MH_bootstrap833 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap833 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper833 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call833 ().invokeExact(o1, o2, o3); } + + static Object bootstrap833 (Object l, Object n, Object t) throws Throwable { return _mh[ 833 ].invokeExact(l, n, t); } + + // 834 + private static MethodType MT_bootstrap834 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap834 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap834", MT_bootstrap834 ()); + } + + private static MethodHandle INDY_call834; + private static MethodHandle INDY_call834 () throws Throwable { + if (INDY_call834 != null) return INDY_call834; + CallSite cs = (CallSite) MH_bootstrap834 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap834 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper834 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call834 ().invokeExact(o1, o2, o3); } + + static Object bootstrap834 (Object l, Object n, Object t) throws Throwable { return _mh[ 834 ].invokeExact(l, n, t); } + + // 835 + private static MethodType MT_bootstrap835 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap835 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap835", MT_bootstrap835 ()); + } + + private static MethodHandle INDY_call835; + private static MethodHandle INDY_call835 () throws Throwable { + if (INDY_call835 != null) return INDY_call835; + CallSite cs = (CallSite) MH_bootstrap835 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap835 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper835 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call835 ().invokeExact(o1, o2, o3); } + + static Object bootstrap835 (Object l, Object n, Object t) throws Throwable { return _mh[ 835 ].invokeExact(l, n, t); } + + // 836 + private static MethodType MT_bootstrap836 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap836 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap836", MT_bootstrap836 ()); + } + + private static MethodHandle INDY_call836; + private static MethodHandle INDY_call836 () throws Throwable { + if (INDY_call836 != null) return INDY_call836; + CallSite cs = (CallSite) MH_bootstrap836 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap836 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper836 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call836 ().invokeExact(o1, o2, o3); } + + static Object bootstrap836 (Object l, Object n, Object t) throws Throwable { return _mh[ 836 ].invokeExact(l, n, t); } + + // 837 + private static MethodType MT_bootstrap837 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap837 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap837", MT_bootstrap837 ()); + } + + private static MethodHandle INDY_call837; + private static MethodHandle INDY_call837 () throws Throwable { + if (INDY_call837 != null) return INDY_call837; + CallSite cs = (CallSite) MH_bootstrap837 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap837 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper837 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call837 ().invokeExact(o1, o2, o3); } + + static Object bootstrap837 (Object l, Object n, Object t) throws Throwable { return _mh[ 837 ].invokeExact(l, n, t); } + + // 838 + private static MethodType MT_bootstrap838 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap838 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap838", MT_bootstrap838 ()); + } + + private static MethodHandle INDY_call838; + private static MethodHandle INDY_call838 () throws Throwable { + if (INDY_call838 != null) return INDY_call838; + CallSite cs = (CallSite) MH_bootstrap838 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap838 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper838 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call838 ().invokeExact(o1, o2, o3); } + + static Object bootstrap838 (Object l, Object n, Object t) throws Throwable { return _mh[ 838 ].invokeExact(l, n, t); } + + // 839 + private static MethodType MT_bootstrap839 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap839 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap839", MT_bootstrap839 ()); + } + + private static MethodHandle INDY_call839; + private static MethodHandle INDY_call839 () throws Throwable { + if (INDY_call839 != null) return INDY_call839; + CallSite cs = (CallSite) MH_bootstrap839 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap839 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper839 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call839 ().invokeExact(o1, o2, o3); } + + static Object bootstrap839 (Object l, Object n, Object t) throws Throwable { return _mh[ 839 ].invokeExact(l, n, t); } + + // 840 + private static MethodType MT_bootstrap840 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap840 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap840", MT_bootstrap840 ()); + } + + private static MethodHandle INDY_call840; + private static MethodHandle INDY_call840 () throws Throwable { + if (INDY_call840 != null) return INDY_call840; + CallSite cs = (CallSite) MH_bootstrap840 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap840 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper840 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call840 ().invokeExact(o1, o2, o3); } + + static Object bootstrap840 (Object l, Object n, Object t) throws Throwable { return _mh[ 840 ].invokeExact(l, n, t); } + + // 841 + private static MethodType MT_bootstrap841 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap841 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap841", MT_bootstrap841 ()); + } + + private static MethodHandle INDY_call841; + private static MethodHandle INDY_call841 () throws Throwable { + if (INDY_call841 != null) return INDY_call841; + CallSite cs = (CallSite) MH_bootstrap841 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap841 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper841 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call841 ().invokeExact(o1, o2, o3); } + + static Object bootstrap841 (Object l, Object n, Object t) throws Throwable { return _mh[ 841 ].invokeExact(l, n, t); } + + // 842 + private static MethodType MT_bootstrap842 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap842 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap842", MT_bootstrap842 ()); + } + + private static MethodHandle INDY_call842; + private static MethodHandle INDY_call842 () throws Throwable { + if (INDY_call842 != null) return INDY_call842; + CallSite cs = (CallSite) MH_bootstrap842 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap842 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper842 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call842 ().invokeExact(o1, o2, o3); } + + static Object bootstrap842 (Object l, Object n, Object t) throws Throwable { return _mh[ 842 ].invokeExact(l, n, t); } + + // 843 + private static MethodType MT_bootstrap843 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap843 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap843", MT_bootstrap843 ()); + } + + private static MethodHandle INDY_call843; + private static MethodHandle INDY_call843 () throws Throwable { + if (INDY_call843 != null) return INDY_call843; + CallSite cs = (CallSite) MH_bootstrap843 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap843 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper843 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call843 ().invokeExact(o1, o2, o3); } + + static Object bootstrap843 (Object l, Object n, Object t) throws Throwable { return _mh[ 843 ].invokeExact(l, n, t); } + + // 844 + private static MethodType MT_bootstrap844 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap844 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap844", MT_bootstrap844 ()); + } + + private static MethodHandle INDY_call844; + private static MethodHandle INDY_call844 () throws Throwable { + if (INDY_call844 != null) return INDY_call844; + CallSite cs = (CallSite) MH_bootstrap844 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap844 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper844 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call844 ().invokeExact(o1, o2, o3); } + + static Object bootstrap844 (Object l, Object n, Object t) throws Throwable { return _mh[ 844 ].invokeExact(l, n, t); } + + // 845 + private static MethodType MT_bootstrap845 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap845 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap845", MT_bootstrap845 ()); + } + + private static MethodHandle INDY_call845; + private static MethodHandle INDY_call845 () throws Throwable { + if (INDY_call845 != null) return INDY_call845; + CallSite cs = (CallSite) MH_bootstrap845 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap845 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper845 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call845 ().invokeExact(o1, o2, o3); } + + static Object bootstrap845 (Object l, Object n, Object t) throws Throwable { return _mh[ 845 ].invokeExact(l, n, t); } + + // 846 + private static MethodType MT_bootstrap846 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap846 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap846", MT_bootstrap846 ()); + } + + private static MethodHandle INDY_call846; + private static MethodHandle INDY_call846 () throws Throwable { + if (INDY_call846 != null) return INDY_call846; + CallSite cs = (CallSite) MH_bootstrap846 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap846 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper846 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call846 ().invokeExact(o1, o2, o3); } + + static Object bootstrap846 (Object l, Object n, Object t) throws Throwable { return _mh[ 846 ].invokeExact(l, n, t); } + + // 847 + private static MethodType MT_bootstrap847 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap847 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap847", MT_bootstrap847 ()); + } + + private static MethodHandle INDY_call847; + private static MethodHandle INDY_call847 () throws Throwable { + if (INDY_call847 != null) return INDY_call847; + CallSite cs = (CallSite) MH_bootstrap847 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap847 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper847 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call847 ().invokeExact(o1, o2, o3); } + + static Object bootstrap847 (Object l, Object n, Object t) throws Throwable { return _mh[ 847 ].invokeExact(l, n, t); } + + // 848 + private static MethodType MT_bootstrap848 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap848 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap848", MT_bootstrap848 ()); + } + + private static MethodHandle INDY_call848; + private static MethodHandle INDY_call848 () throws Throwable { + if (INDY_call848 != null) return INDY_call848; + CallSite cs = (CallSite) MH_bootstrap848 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap848 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper848 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call848 ().invokeExact(o1, o2, o3); } + + static Object bootstrap848 (Object l, Object n, Object t) throws Throwable { return _mh[ 848 ].invokeExact(l, n, t); } + + // 849 + private static MethodType MT_bootstrap849 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap849 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap849", MT_bootstrap849 ()); + } + + private static MethodHandle INDY_call849; + private static MethodHandle INDY_call849 () throws Throwable { + if (INDY_call849 != null) return INDY_call849; + CallSite cs = (CallSite) MH_bootstrap849 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap849 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper849 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call849 ().invokeExact(o1, o2, o3); } + + static Object bootstrap849 (Object l, Object n, Object t) throws Throwable { return _mh[ 849 ].invokeExact(l, n, t); } + + // 850 + private static MethodType MT_bootstrap850 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap850 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap850", MT_bootstrap850 ()); + } + + private static MethodHandle INDY_call850; + private static MethodHandle INDY_call850 () throws Throwable { + if (INDY_call850 != null) return INDY_call850; + CallSite cs = (CallSite) MH_bootstrap850 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap850 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper850 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call850 ().invokeExact(o1, o2, o3); } + + static Object bootstrap850 (Object l, Object n, Object t) throws Throwable { return _mh[ 850 ].invokeExact(l, n, t); } + + // 851 + private static MethodType MT_bootstrap851 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap851 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap851", MT_bootstrap851 ()); + } + + private static MethodHandle INDY_call851; + private static MethodHandle INDY_call851 () throws Throwable { + if (INDY_call851 != null) return INDY_call851; + CallSite cs = (CallSite) MH_bootstrap851 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap851 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper851 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call851 ().invokeExact(o1, o2, o3); } + + static Object bootstrap851 (Object l, Object n, Object t) throws Throwable { return _mh[ 851 ].invokeExact(l, n, t); } + + // 852 + private static MethodType MT_bootstrap852 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap852 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap852", MT_bootstrap852 ()); + } + + private static MethodHandle INDY_call852; + private static MethodHandle INDY_call852 () throws Throwable { + if (INDY_call852 != null) return INDY_call852; + CallSite cs = (CallSite) MH_bootstrap852 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap852 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper852 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call852 ().invokeExact(o1, o2, o3); } + + static Object bootstrap852 (Object l, Object n, Object t) throws Throwable { return _mh[ 852 ].invokeExact(l, n, t); } + + // 853 + private static MethodType MT_bootstrap853 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap853 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap853", MT_bootstrap853 ()); + } + + private static MethodHandle INDY_call853; + private static MethodHandle INDY_call853 () throws Throwable { + if (INDY_call853 != null) return INDY_call853; + CallSite cs = (CallSite) MH_bootstrap853 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap853 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper853 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call853 ().invokeExact(o1, o2, o3); } + + static Object bootstrap853 (Object l, Object n, Object t) throws Throwable { return _mh[ 853 ].invokeExact(l, n, t); } + + // 854 + private static MethodType MT_bootstrap854 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap854 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap854", MT_bootstrap854 ()); + } + + private static MethodHandle INDY_call854; + private static MethodHandle INDY_call854 () throws Throwable { + if (INDY_call854 != null) return INDY_call854; + CallSite cs = (CallSite) MH_bootstrap854 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap854 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper854 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call854 ().invokeExact(o1, o2, o3); } + + static Object bootstrap854 (Object l, Object n, Object t) throws Throwable { return _mh[ 854 ].invokeExact(l, n, t); } + + // 855 + private static MethodType MT_bootstrap855 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap855 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap855", MT_bootstrap855 ()); + } + + private static MethodHandle INDY_call855; + private static MethodHandle INDY_call855 () throws Throwable { + if (INDY_call855 != null) return INDY_call855; + CallSite cs = (CallSite) MH_bootstrap855 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap855 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper855 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call855 ().invokeExact(o1, o2, o3); } + + static Object bootstrap855 (Object l, Object n, Object t) throws Throwable { return _mh[ 855 ].invokeExact(l, n, t); } + + // 856 + private static MethodType MT_bootstrap856 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap856 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap856", MT_bootstrap856 ()); + } + + private static MethodHandle INDY_call856; + private static MethodHandle INDY_call856 () throws Throwable { + if (INDY_call856 != null) return INDY_call856; + CallSite cs = (CallSite) MH_bootstrap856 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap856 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper856 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call856 ().invokeExact(o1, o2, o3); } + + static Object bootstrap856 (Object l, Object n, Object t) throws Throwable { return _mh[ 856 ].invokeExact(l, n, t); } + + // 857 + private static MethodType MT_bootstrap857 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap857 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap857", MT_bootstrap857 ()); + } + + private static MethodHandle INDY_call857; + private static MethodHandle INDY_call857 () throws Throwable { + if (INDY_call857 != null) return INDY_call857; + CallSite cs = (CallSite) MH_bootstrap857 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap857 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper857 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call857 ().invokeExact(o1, o2, o3); } + + static Object bootstrap857 (Object l, Object n, Object t) throws Throwable { return _mh[ 857 ].invokeExact(l, n, t); } + + // 858 + private static MethodType MT_bootstrap858 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap858 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap858", MT_bootstrap858 ()); + } + + private static MethodHandle INDY_call858; + private static MethodHandle INDY_call858 () throws Throwable { + if (INDY_call858 != null) return INDY_call858; + CallSite cs = (CallSite) MH_bootstrap858 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap858 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper858 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call858 ().invokeExact(o1, o2, o3); } + + static Object bootstrap858 (Object l, Object n, Object t) throws Throwable { return _mh[ 858 ].invokeExact(l, n, t); } + + // 859 + private static MethodType MT_bootstrap859 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap859 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap859", MT_bootstrap859 ()); + } + + private static MethodHandle INDY_call859; + private static MethodHandle INDY_call859 () throws Throwable { + if (INDY_call859 != null) return INDY_call859; + CallSite cs = (CallSite) MH_bootstrap859 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap859 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper859 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call859 ().invokeExact(o1, o2, o3); } + + static Object bootstrap859 (Object l, Object n, Object t) throws Throwable { return _mh[ 859 ].invokeExact(l, n, t); } + + // 860 + private static MethodType MT_bootstrap860 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap860 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap860", MT_bootstrap860 ()); + } + + private static MethodHandle INDY_call860; + private static MethodHandle INDY_call860 () throws Throwable { + if (INDY_call860 != null) return INDY_call860; + CallSite cs = (CallSite) MH_bootstrap860 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap860 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper860 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call860 ().invokeExact(o1, o2, o3); } + + static Object bootstrap860 (Object l, Object n, Object t) throws Throwable { return _mh[ 860 ].invokeExact(l, n, t); } + + // 861 + private static MethodType MT_bootstrap861 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap861 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap861", MT_bootstrap861 ()); + } + + private static MethodHandle INDY_call861; + private static MethodHandle INDY_call861 () throws Throwable { + if (INDY_call861 != null) return INDY_call861; + CallSite cs = (CallSite) MH_bootstrap861 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap861 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper861 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call861 ().invokeExact(o1, o2, o3); } + + static Object bootstrap861 (Object l, Object n, Object t) throws Throwable { return _mh[ 861 ].invokeExact(l, n, t); } + + // 862 + private static MethodType MT_bootstrap862 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap862 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap862", MT_bootstrap862 ()); + } + + private static MethodHandle INDY_call862; + private static MethodHandle INDY_call862 () throws Throwable { + if (INDY_call862 != null) return INDY_call862; + CallSite cs = (CallSite) MH_bootstrap862 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap862 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper862 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call862 ().invokeExact(o1, o2, o3); } + + static Object bootstrap862 (Object l, Object n, Object t) throws Throwable { return _mh[ 862 ].invokeExact(l, n, t); } + + // 863 + private static MethodType MT_bootstrap863 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap863 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap863", MT_bootstrap863 ()); + } + + private static MethodHandle INDY_call863; + private static MethodHandle INDY_call863 () throws Throwable { + if (INDY_call863 != null) return INDY_call863; + CallSite cs = (CallSite) MH_bootstrap863 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap863 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper863 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call863 ().invokeExact(o1, o2, o3); } + + static Object bootstrap863 (Object l, Object n, Object t) throws Throwable { return _mh[ 863 ].invokeExact(l, n, t); } + + // 864 + private static MethodType MT_bootstrap864 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap864 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap864", MT_bootstrap864 ()); + } + + private static MethodHandle INDY_call864; + private static MethodHandle INDY_call864 () throws Throwable { + if (INDY_call864 != null) return INDY_call864; + CallSite cs = (CallSite) MH_bootstrap864 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap864 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper864 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call864 ().invokeExact(o1, o2, o3); } + + static Object bootstrap864 (Object l, Object n, Object t) throws Throwable { return _mh[ 864 ].invokeExact(l, n, t); } + + // 865 + private static MethodType MT_bootstrap865 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap865 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap865", MT_bootstrap865 ()); + } + + private static MethodHandle INDY_call865; + private static MethodHandle INDY_call865 () throws Throwable { + if (INDY_call865 != null) return INDY_call865; + CallSite cs = (CallSite) MH_bootstrap865 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap865 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper865 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call865 ().invokeExact(o1, o2, o3); } + + static Object bootstrap865 (Object l, Object n, Object t) throws Throwable { return _mh[ 865 ].invokeExact(l, n, t); } + + // 866 + private static MethodType MT_bootstrap866 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap866 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap866", MT_bootstrap866 ()); + } + + private static MethodHandle INDY_call866; + private static MethodHandle INDY_call866 () throws Throwable { + if (INDY_call866 != null) return INDY_call866; + CallSite cs = (CallSite) MH_bootstrap866 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap866 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper866 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call866 ().invokeExact(o1, o2, o3); } + + static Object bootstrap866 (Object l, Object n, Object t) throws Throwable { return _mh[ 866 ].invokeExact(l, n, t); } + + // 867 + private static MethodType MT_bootstrap867 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap867 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap867", MT_bootstrap867 ()); + } + + private static MethodHandle INDY_call867; + private static MethodHandle INDY_call867 () throws Throwable { + if (INDY_call867 != null) return INDY_call867; + CallSite cs = (CallSite) MH_bootstrap867 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap867 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper867 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call867 ().invokeExact(o1, o2, o3); } + + static Object bootstrap867 (Object l, Object n, Object t) throws Throwable { return _mh[ 867 ].invokeExact(l, n, t); } + + // 868 + private static MethodType MT_bootstrap868 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap868 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap868", MT_bootstrap868 ()); + } + + private static MethodHandle INDY_call868; + private static MethodHandle INDY_call868 () throws Throwable { + if (INDY_call868 != null) return INDY_call868; + CallSite cs = (CallSite) MH_bootstrap868 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap868 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper868 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call868 ().invokeExact(o1, o2, o3); } + + static Object bootstrap868 (Object l, Object n, Object t) throws Throwable { return _mh[ 868 ].invokeExact(l, n, t); } + + // 869 + private static MethodType MT_bootstrap869 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap869 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap869", MT_bootstrap869 ()); + } + + private static MethodHandle INDY_call869; + private static MethodHandle INDY_call869 () throws Throwable { + if (INDY_call869 != null) return INDY_call869; + CallSite cs = (CallSite) MH_bootstrap869 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap869 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper869 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call869 ().invokeExact(o1, o2, o3); } + + static Object bootstrap869 (Object l, Object n, Object t) throws Throwable { return _mh[ 869 ].invokeExact(l, n, t); } + + // 870 + private static MethodType MT_bootstrap870 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap870 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap870", MT_bootstrap870 ()); + } + + private static MethodHandle INDY_call870; + private static MethodHandle INDY_call870 () throws Throwable { + if (INDY_call870 != null) return INDY_call870; + CallSite cs = (CallSite) MH_bootstrap870 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap870 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper870 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call870 ().invokeExact(o1, o2, o3); } + + static Object bootstrap870 (Object l, Object n, Object t) throws Throwable { return _mh[ 870 ].invokeExact(l, n, t); } + + // 871 + private static MethodType MT_bootstrap871 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap871 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap871", MT_bootstrap871 ()); + } + + private static MethodHandle INDY_call871; + private static MethodHandle INDY_call871 () throws Throwable { + if (INDY_call871 != null) return INDY_call871; + CallSite cs = (CallSite) MH_bootstrap871 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap871 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper871 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call871 ().invokeExact(o1, o2, o3); } + + static Object bootstrap871 (Object l, Object n, Object t) throws Throwable { return _mh[ 871 ].invokeExact(l, n, t); } + + // 872 + private static MethodType MT_bootstrap872 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap872 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap872", MT_bootstrap872 ()); + } + + private static MethodHandle INDY_call872; + private static MethodHandle INDY_call872 () throws Throwable { + if (INDY_call872 != null) return INDY_call872; + CallSite cs = (CallSite) MH_bootstrap872 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap872 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper872 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call872 ().invokeExact(o1, o2, o3); } + + static Object bootstrap872 (Object l, Object n, Object t) throws Throwable { return _mh[ 872 ].invokeExact(l, n, t); } + + // 873 + private static MethodType MT_bootstrap873 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap873 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap873", MT_bootstrap873 ()); + } + + private static MethodHandle INDY_call873; + private static MethodHandle INDY_call873 () throws Throwable { + if (INDY_call873 != null) return INDY_call873; + CallSite cs = (CallSite) MH_bootstrap873 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap873 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper873 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call873 ().invokeExact(o1, o2, o3); } + + static Object bootstrap873 (Object l, Object n, Object t) throws Throwable { return _mh[ 873 ].invokeExact(l, n, t); } + + // 874 + private static MethodType MT_bootstrap874 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap874 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap874", MT_bootstrap874 ()); + } + + private static MethodHandle INDY_call874; + private static MethodHandle INDY_call874 () throws Throwable { + if (INDY_call874 != null) return INDY_call874; + CallSite cs = (CallSite) MH_bootstrap874 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap874 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper874 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call874 ().invokeExact(o1, o2, o3); } + + static Object bootstrap874 (Object l, Object n, Object t) throws Throwable { return _mh[ 874 ].invokeExact(l, n, t); } + + // 875 + private static MethodType MT_bootstrap875 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap875 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap875", MT_bootstrap875 ()); + } + + private static MethodHandle INDY_call875; + private static MethodHandle INDY_call875 () throws Throwable { + if (INDY_call875 != null) return INDY_call875; + CallSite cs = (CallSite) MH_bootstrap875 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap875 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper875 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call875 ().invokeExact(o1, o2, o3); } + + static Object bootstrap875 (Object l, Object n, Object t) throws Throwable { return _mh[ 875 ].invokeExact(l, n, t); } + + // 876 + private static MethodType MT_bootstrap876 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap876 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap876", MT_bootstrap876 ()); + } + + private static MethodHandle INDY_call876; + private static MethodHandle INDY_call876 () throws Throwable { + if (INDY_call876 != null) return INDY_call876; + CallSite cs = (CallSite) MH_bootstrap876 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap876 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper876 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call876 ().invokeExact(o1, o2, o3); } + + static Object bootstrap876 (Object l, Object n, Object t) throws Throwable { return _mh[ 876 ].invokeExact(l, n, t); } + + // 877 + private static MethodType MT_bootstrap877 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap877 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap877", MT_bootstrap877 ()); + } + + private static MethodHandle INDY_call877; + private static MethodHandle INDY_call877 () throws Throwable { + if (INDY_call877 != null) return INDY_call877; + CallSite cs = (CallSite) MH_bootstrap877 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap877 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper877 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call877 ().invokeExact(o1, o2, o3); } + + static Object bootstrap877 (Object l, Object n, Object t) throws Throwable { return _mh[ 877 ].invokeExact(l, n, t); } + + // 878 + private static MethodType MT_bootstrap878 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap878 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap878", MT_bootstrap878 ()); + } + + private static MethodHandle INDY_call878; + private static MethodHandle INDY_call878 () throws Throwable { + if (INDY_call878 != null) return INDY_call878; + CallSite cs = (CallSite) MH_bootstrap878 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap878 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper878 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call878 ().invokeExact(o1, o2, o3); } + + static Object bootstrap878 (Object l, Object n, Object t) throws Throwable { return _mh[ 878 ].invokeExact(l, n, t); } + + // 879 + private static MethodType MT_bootstrap879 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap879 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap879", MT_bootstrap879 ()); + } + + private static MethodHandle INDY_call879; + private static MethodHandle INDY_call879 () throws Throwable { + if (INDY_call879 != null) return INDY_call879; + CallSite cs = (CallSite) MH_bootstrap879 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap879 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper879 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call879 ().invokeExact(o1, o2, o3); } + + static Object bootstrap879 (Object l, Object n, Object t) throws Throwable { return _mh[ 879 ].invokeExact(l, n, t); } + + // 880 + private static MethodType MT_bootstrap880 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap880 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap880", MT_bootstrap880 ()); + } + + private static MethodHandle INDY_call880; + private static MethodHandle INDY_call880 () throws Throwable { + if (INDY_call880 != null) return INDY_call880; + CallSite cs = (CallSite) MH_bootstrap880 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap880 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper880 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call880 ().invokeExact(o1, o2, o3); } + + static Object bootstrap880 (Object l, Object n, Object t) throws Throwable { return _mh[ 880 ].invokeExact(l, n, t); } + + // 881 + private static MethodType MT_bootstrap881 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap881 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap881", MT_bootstrap881 ()); + } + + private static MethodHandle INDY_call881; + private static MethodHandle INDY_call881 () throws Throwable { + if (INDY_call881 != null) return INDY_call881; + CallSite cs = (CallSite) MH_bootstrap881 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap881 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper881 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call881 ().invokeExact(o1, o2, o3); } + + static Object bootstrap881 (Object l, Object n, Object t) throws Throwable { return _mh[ 881 ].invokeExact(l, n, t); } + + // 882 + private static MethodType MT_bootstrap882 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap882 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap882", MT_bootstrap882 ()); + } + + private static MethodHandle INDY_call882; + private static MethodHandle INDY_call882 () throws Throwable { + if (INDY_call882 != null) return INDY_call882; + CallSite cs = (CallSite) MH_bootstrap882 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap882 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper882 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call882 ().invokeExact(o1, o2, o3); } + + static Object bootstrap882 (Object l, Object n, Object t) throws Throwable { return _mh[ 882 ].invokeExact(l, n, t); } + + // 883 + private static MethodType MT_bootstrap883 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap883 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap883", MT_bootstrap883 ()); + } + + private static MethodHandle INDY_call883; + private static MethodHandle INDY_call883 () throws Throwable { + if (INDY_call883 != null) return INDY_call883; + CallSite cs = (CallSite) MH_bootstrap883 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap883 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper883 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call883 ().invokeExact(o1, o2, o3); } + + static Object bootstrap883 (Object l, Object n, Object t) throws Throwable { return _mh[ 883 ].invokeExact(l, n, t); } + + // 884 + private static MethodType MT_bootstrap884 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap884 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap884", MT_bootstrap884 ()); + } + + private static MethodHandle INDY_call884; + private static MethodHandle INDY_call884 () throws Throwable { + if (INDY_call884 != null) return INDY_call884; + CallSite cs = (CallSite) MH_bootstrap884 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap884 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper884 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call884 ().invokeExact(o1, o2, o3); } + + static Object bootstrap884 (Object l, Object n, Object t) throws Throwable { return _mh[ 884 ].invokeExact(l, n, t); } + + // 885 + private static MethodType MT_bootstrap885 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap885 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap885", MT_bootstrap885 ()); + } + + private static MethodHandle INDY_call885; + private static MethodHandle INDY_call885 () throws Throwable { + if (INDY_call885 != null) return INDY_call885; + CallSite cs = (CallSite) MH_bootstrap885 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap885 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper885 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call885 ().invokeExact(o1, o2, o3); } + + static Object bootstrap885 (Object l, Object n, Object t) throws Throwable { return _mh[ 885 ].invokeExact(l, n, t); } + + // 886 + private static MethodType MT_bootstrap886 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap886 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap886", MT_bootstrap886 ()); + } + + private static MethodHandle INDY_call886; + private static MethodHandle INDY_call886 () throws Throwable { + if (INDY_call886 != null) return INDY_call886; + CallSite cs = (CallSite) MH_bootstrap886 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap886 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper886 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call886 ().invokeExact(o1, o2, o3); } + + static Object bootstrap886 (Object l, Object n, Object t) throws Throwable { return _mh[ 886 ].invokeExact(l, n, t); } + + // 887 + private static MethodType MT_bootstrap887 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap887 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap887", MT_bootstrap887 ()); + } + + private static MethodHandle INDY_call887; + private static MethodHandle INDY_call887 () throws Throwable { + if (INDY_call887 != null) return INDY_call887; + CallSite cs = (CallSite) MH_bootstrap887 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap887 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper887 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call887 ().invokeExact(o1, o2, o3); } + + static Object bootstrap887 (Object l, Object n, Object t) throws Throwable { return _mh[ 887 ].invokeExact(l, n, t); } + + // 888 + private static MethodType MT_bootstrap888 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap888 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap888", MT_bootstrap888 ()); + } + + private static MethodHandle INDY_call888; + private static MethodHandle INDY_call888 () throws Throwable { + if (INDY_call888 != null) return INDY_call888; + CallSite cs = (CallSite) MH_bootstrap888 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap888 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper888 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call888 ().invokeExact(o1, o2, o3); } + + static Object bootstrap888 (Object l, Object n, Object t) throws Throwable { return _mh[ 888 ].invokeExact(l, n, t); } + + // 889 + private static MethodType MT_bootstrap889 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap889 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap889", MT_bootstrap889 ()); + } + + private static MethodHandle INDY_call889; + private static MethodHandle INDY_call889 () throws Throwable { + if (INDY_call889 != null) return INDY_call889; + CallSite cs = (CallSite) MH_bootstrap889 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap889 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper889 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call889 ().invokeExact(o1, o2, o3); } + + static Object bootstrap889 (Object l, Object n, Object t) throws Throwable { return _mh[ 889 ].invokeExact(l, n, t); } + + // 890 + private static MethodType MT_bootstrap890 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap890 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap890", MT_bootstrap890 ()); + } + + private static MethodHandle INDY_call890; + private static MethodHandle INDY_call890 () throws Throwable { + if (INDY_call890 != null) return INDY_call890; + CallSite cs = (CallSite) MH_bootstrap890 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap890 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper890 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call890 ().invokeExact(o1, o2, o3); } + + static Object bootstrap890 (Object l, Object n, Object t) throws Throwable { return _mh[ 890 ].invokeExact(l, n, t); } + + // 891 + private static MethodType MT_bootstrap891 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap891 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap891", MT_bootstrap891 ()); + } + + private static MethodHandle INDY_call891; + private static MethodHandle INDY_call891 () throws Throwable { + if (INDY_call891 != null) return INDY_call891; + CallSite cs = (CallSite) MH_bootstrap891 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap891 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper891 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call891 ().invokeExact(o1, o2, o3); } + + static Object bootstrap891 (Object l, Object n, Object t) throws Throwable { return _mh[ 891 ].invokeExact(l, n, t); } + + // 892 + private static MethodType MT_bootstrap892 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap892 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap892", MT_bootstrap892 ()); + } + + private static MethodHandle INDY_call892; + private static MethodHandle INDY_call892 () throws Throwable { + if (INDY_call892 != null) return INDY_call892; + CallSite cs = (CallSite) MH_bootstrap892 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap892 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper892 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call892 ().invokeExact(o1, o2, o3); } + + static Object bootstrap892 (Object l, Object n, Object t) throws Throwable { return _mh[ 892 ].invokeExact(l, n, t); } + + // 893 + private static MethodType MT_bootstrap893 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap893 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap893", MT_bootstrap893 ()); + } + + private static MethodHandle INDY_call893; + private static MethodHandle INDY_call893 () throws Throwable { + if (INDY_call893 != null) return INDY_call893; + CallSite cs = (CallSite) MH_bootstrap893 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap893 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper893 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call893 ().invokeExact(o1, o2, o3); } + + static Object bootstrap893 (Object l, Object n, Object t) throws Throwable { return _mh[ 893 ].invokeExact(l, n, t); } + + // 894 + private static MethodType MT_bootstrap894 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap894 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap894", MT_bootstrap894 ()); + } + + private static MethodHandle INDY_call894; + private static MethodHandle INDY_call894 () throws Throwable { + if (INDY_call894 != null) return INDY_call894; + CallSite cs = (CallSite) MH_bootstrap894 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap894 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper894 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call894 ().invokeExact(o1, o2, o3); } + + static Object bootstrap894 (Object l, Object n, Object t) throws Throwable { return _mh[ 894 ].invokeExact(l, n, t); } + + // 895 + private static MethodType MT_bootstrap895 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap895 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap895", MT_bootstrap895 ()); + } + + private static MethodHandle INDY_call895; + private static MethodHandle INDY_call895 () throws Throwable { + if (INDY_call895 != null) return INDY_call895; + CallSite cs = (CallSite) MH_bootstrap895 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap895 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper895 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call895 ().invokeExact(o1, o2, o3); } + + static Object bootstrap895 (Object l, Object n, Object t) throws Throwable { return _mh[ 895 ].invokeExact(l, n, t); } + + // 896 + private static MethodType MT_bootstrap896 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap896 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap896", MT_bootstrap896 ()); + } + + private static MethodHandle INDY_call896; + private static MethodHandle INDY_call896 () throws Throwable { + if (INDY_call896 != null) return INDY_call896; + CallSite cs = (CallSite) MH_bootstrap896 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap896 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper896 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call896 ().invokeExact(o1, o2, o3); } + + static Object bootstrap896 (Object l, Object n, Object t) throws Throwable { return _mh[ 896 ].invokeExact(l, n, t); } + + // 897 + private static MethodType MT_bootstrap897 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap897 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap897", MT_bootstrap897 ()); + } + + private static MethodHandle INDY_call897; + private static MethodHandle INDY_call897 () throws Throwable { + if (INDY_call897 != null) return INDY_call897; + CallSite cs = (CallSite) MH_bootstrap897 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap897 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper897 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call897 ().invokeExact(o1, o2, o3); } + + static Object bootstrap897 (Object l, Object n, Object t) throws Throwable { return _mh[ 897 ].invokeExact(l, n, t); } + + // 898 + private static MethodType MT_bootstrap898 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap898 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap898", MT_bootstrap898 ()); + } + + private static MethodHandle INDY_call898; + private static MethodHandle INDY_call898 () throws Throwable { + if (INDY_call898 != null) return INDY_call898; + CallSite cs = (CallSite) MH_bootstrap898 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap898 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper898 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call898 ().invokeExact(o1, o2, o3); } + + static Object bootstrap898 (Object l, Object n, Object t) throws Throwable { return _mh[ 898 ].invokeExact(l, n, t); } + + // 899 + private static MethodType MT_bootstrap899 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap899 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap899", MT_bootstrap899 ()); + } + + private static MethodHandle INDY_call899; + private static MethodHandle INDY_call899 () throws Throwable { + if (INDY_call899 != null) return INDY_call899; + CallSite cs = (CallSite) MH_bootstrap899 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap899 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper899 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call899 ().invokeExact(o1, o2, o3); } + + static Object bootstrap899 (Object l, Object n, Object t) throws Throwable { return _mh[ 899 ].invokeExact(l, n, t); } + + // 900 + private static MethodType MT_bootstrap900 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap900 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap900", MT_bootstrap900 ()); + } + + private static MethodHandle INDY_call900; + private static MethodHandle INDY_call900 () throws Throwable { + if (INDY_call900 != null) return INDY_call900; + CallSite cs = (CallSite) MH_bootstrap900 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap900 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper900 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call900 ().invokeExact(o1, o2, o3); } + + static Object bootstrap900 (Object l, Object n, Object t) throws Throwable { return _mh[ 900 ].invokeExact(l, n, t); } + + // 901 + private static MethodType MT_bootstrap901 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap901 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap901", MT_bootstrap901 ()); + } + + private static MethodHandle INDY_call901; + private static MethodHandle INDY_call901 () throws Throwable { + if (INDY_call901 != null) return INDY_call901; + CallSite cs = (CallSite) MH_bootstrap901 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap901 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper901 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call901 ().invokeExact(o1, o2, o3); } + + static Object bootstrap901 (Object l, Object n, Object t) throws Throwable { return _mh[ 901 ].invokeExact(l, n, t); } + + // 902 + private static MethodType MT_bootstrap902 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap902 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap902", MT_bootstrap902 ()); + } + + private static MethodHandle INDY_call902; + private static MethodHandle INDY_call902 () throws Throwable { + if (INDY_call902 != null) return INDY_call902; + CallSite cs = (CallSite) MH_bootstrap902 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap902 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper902 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call902 ().invokeExact(o1, o2, o3); } + + static Object bootstrap902 (Object l, Object n, Object t) throws Throwable { return _mh[ 902 ].invokeExact(l, n, t); } + + // 903 + private static MethodType MT_bootstrap903 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap903 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap903", MT_bootstrap903 ()); + } + + private static MethodHandle INDY_call903; + private static MethodHandle INDY_call903 () throws Throwable { + if (INDY_call903 != null) return INDY_call903; + CallSite cs = (CallSite) MH_bootstrap903 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap903 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper903 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call903 ().invokeExact(o1, o2, o3); } + + static Object bootstrap903 (Object l, Object n, Object t) throws Throwable { return _mh[ 903 ].invokeExact(l, n, t); } + + // 904 + private static MethodType MT_bootstrap904 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap904 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap904", MT_bootstrap904 ()); + } + + private static MethodHandle INDY_call904; + private static MethodHandle INDY_call904 () throws Throwable { + if (INDY_call904 != null) return INDY_call904; + CallSite cs = (CallSite) MH_bootstrap904 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap904 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper904 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call904 ().invokeExact(o1, o2, o3); } + + static Object bootstrap904 (Object l, Object n, Object t) throws Throwable { return _mh[ 904 ].invokeExact(l, n, t); } + + // 905 + private static MethodType MT_bootstrap905 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap905 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap905", MT_bootstrap905 ()); + } + + private static MethodHandle INDY_call905; + private static MethodHandle INDY_call905 () throws Throwable { + if (INDY_call905 != null) return INDY_call905; + CallSite cs = (CallSite) MH_bootstrap905 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap905 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper905 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call905 ().invokeExact(o1, o2, o3); } + + static Object bootstrap905 (Object l, Object n, Object t) throws Throwable { return _mh[ 905 ].invokeExact(l, n, t); } + + // 906 + private static MethodType MT_bootstrap906 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap906 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap906", MT_bootstrap906 ()); + } + + private static MethodHandle INDY_call906; + private static MethodHandle INDY_call906 () throws Throwable { + if (INDY_call906 != null) return INDY_call906; + CallSite cs = (CallSite) MH_bootstrap906 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap906 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper906 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call906 ().invokeExact(o1, o2, o3); } + + static Object bootstrap906 (Object l, Object n, Object t) throws Throwable { return _mh[ 906 ].invokeExact(l, n, t); } + + // 907 + private static MethodType MT_bootstrap907 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap907 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap907", MT_bootstrap907 ()); + } + + private static MethodHandle INDY_call907; + private static MethodHandle INDY_call907 () throws Throwable { + if (INDY_call907 != null) return INDY_call907; + CallSite cs = (CallSite) MH_bootstrap907 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap907 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper907 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call907 ().invokeExact(o1, o2, o3); } + + static Object bootstrap907 (Object l, Object n, Object t) throws Throwable { return _mh[ 907 ].invokeExact(l, n, t); } + + // 908 + private static MethodType MT_bootstrap908 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap908 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap908", MT_bootstrap908 ()); + } + + private static MethodHandle INDY_call908; + private static MethodHandle INDY_call908 () throws Throwable { + if (INDY_call908 != null) return INDY_call908; + CallSite cs = (CallSite) MH_bootstrap908 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap908 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper908 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call908 ().invokeExact(o1, o2, o3); } + + static Object bootstrap908 (Object l, Object n, Object t) throws Throwable { return _mh[ 908 ].invokeExact(l, n, t); } + + // 909 + private static MethodType MT_bootstrap909 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap909 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap909", MT_bootstrap909 ()); + } + + private static MethodHandle INDY_call909; + private static MethodHandle INDY_call909 () throws Throwable { + if (INDY_call909 != null) return INDY_call909; + CallSite cs = (CallSite) MH_bootstrap909 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap909 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper909 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call909 ().invokeExact(o1, o2, o3); } + + static Object bootstrap909 (Object l, Object n, Object t) throws Throwable { return _mh[ 909 ].invokeExact(l, n, t); } + + // 910 + private static MethodType MT_bootstrap910 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap910 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap910", MT_bootstrap910 ()); + } + + private static MethodHandle INDY_call910; + private static MethodHandle INDY_call910 () throws Throwable { + if (INDY_call910 != null) return INDY_call910; + CallSite cs = (CallSite) MH_bootstrap910 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap910 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper910 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call910 ().invokeExact(o1, o2, o3); } + + static Object bootstrap910 (Object l, Object n, Object t) throws Throwable { return _mh[ 910 ].invokeExact(l, n, t); } + + // 911 + private static MethodType MT_bootstrap911 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap911 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap911", MT_bootstrap911 ()); + } + + private static MethodHandle INDY_call911; + private static MethodHandle INDY_call911 () throws Throwable { + if (INDY_call911 != null) return INDY_call911; + CallSite cs = (CallSite) MH_bootstrap911 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap911 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper911 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call911 ().invokeExact(o1, o2, o3); } + + static Object bootstrap911 (Object l, Object n, Object t) throws Throwable { return _mh[ 911 ].invokeExact(l, n, t); } + + // 912 + private static MethodType MT_bootstrap912 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap912 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap912", MT_bootstrap912 ()); + } + + private static MethodHandle INDY_call912; + private static MethodHandle INDY_call912 () throws Throwable { + if (INDY_call912 != null) return INDY_call912; + CallSite cs = (CallSite) MH_bootstrap912 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap912 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper912 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call912 ().invokeExact(o1, o2, o3); } + + static Object bootstrap912 (Object l, Object n, Object t) throws Throwable { return _mh[ 912 ].invokeExact(l, n, t); } + + // 913 + private static MethodType MT_bootstrap913 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap913 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap913", MT_bootstrap913 ()); + } + + private static MethodHandle INDY_call913; + private static MethodHandle INDY_call913 () throws Throwable { + if (INDY_call913 != null) return INDY_call913; + CallSite cs = (CallSite) MH_bootstrap913 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap913 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper913 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call913 ().invokeExact(o1, o2, o3); } + + static Object bootstrap913 (Object l, Object n, Object t) throws Throwable { return _mh[ 913 ].invokeExact(l, n, t); } + + // 914 + private static MethodType MT_bootstrap914 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap914 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap914", MT_bootstrap914 ()); + } + + private static MethodHandle INDY_call914; + private static MethodHandle INDY_call914 () throws Throwable { + if (INDY_call914 != null) return INDY_call914; + CallSite cs = (CallSite) MH_bootstrap914 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap914 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper914 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call914 ().invokeExact(o1, o2, o3); } + + static Object bootstrap914 (Object l, Object n, Object t) throws Throwable { return _mh[ 914 ].invokeExact(l, n, t); } + + // 915 + private static MethodType MT_bootstrap915 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap915 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap915", MT_bootstrap915 ()); + } + + private static MethodHandle INDY_call915; + private static MethodHandle INDY_call915 () throws Throwable { + if (INDY_call915 != null) return INDY_call915; + CallSite cs = (CallSite) MH_bootstrap915 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap915 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper915 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call915 ().invokeExact(o1, o2, o3); } + + static Object bootstrap915 (Object l, Object n, Object t) throws Throwable { return _mh[ 915 ].invokeExact(l, n, t); } + + // 916 + private static MethodType MT_bootstrap916 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap916 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap916", MT_bootstrap916 ()); + } + + private static MethodHandle INDY_call916; + private static MethodHandle INDY_call916 () throws Throwable { + if (INDY_call916 != null) return INDY_call916; + CallSite cs = (CallSite) MH_bootstrap916 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap916 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper916 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call916 ().invokeExact(o1, o2, o3); } + + static Object bootstrap916 (Object l, Object n, Object t) throws Throwable { return _mh[ 916 ].invokeExact(l, n, t); } + + // 917 + private static MethodType MT_bootstrap917 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap917 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap917", MT_bootstrap917 ()); + } + + private static MethodHandle INDY_call917; + private static MethodHandle INDY_call917 () throws Throwable { + if (INDY_call917 != null) return INDY_call917; + CallSite cs = (CallSite) MH_bootstrap917 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap917 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper917 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call917 ().invokeExact(o1, o2, o3); } + + static Object bootstrap917 (Object l, Object n, Object t) throws Throwable { return _mh[ 917 ].invokeExact(l, n, t); } + + // 918 + private static MethodType MT_bootstrap918 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap918 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap918", MT_bootstrap918 ()); + } + + private static MethodHandle INDY_call918; + private static MethodHandle INDY_call918 () throws Throwable { + if (INDY_call918 != null) return INDY_call918; + CallSite cs = (CallSite) MH_bootstrap918 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap918 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper918 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call918 ().invokeExact(o1, o2, o3); } + + static Object bootstrap918 (Object l, Object n, Object t) throws Throwable { return _mh[ 918 ].invokeExact(l, n, t); } + + // 919 + private static MethodType MT_bootstrap919 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap919 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap919", MT_bootstrap919 ()); + } + + private static MethodHandle INDY_call919; + private static MethodHandle INDY_call919 () throws Throwable { + if (INDY_call919 != null) return INDY_call919; + CallSite cs = (CallSite) MH_bootstrap919 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap919 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper919 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call919 ().invokeExact(o1, o2, o3); } + + static Object bootstrap919 (Object l, Object n, Object t) throws Throwable { return _mh[ 919 ].invokeExact(l, n, t); } + + // 920 + private static MethodType MT_bootstrap920 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap920 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap920", MT_bootstrap920 ()); + } + + private static MethodHandle INDY_call920; + private static MethodHandle INDY_call920 () throws Throwable { + if (INDY_call920 != null) return INDY_call920; + CallSite cs = (CallSite) MH_bootstrap920 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap920 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper920 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call920 ().invokeExact(o1, o2, o3); } + + static Object bootstrap920 (Object l, Object n, Object t) throws Throwable { return _mh[ 920 ].invokeExact(l, n, t); } + + // 921 + private static MethodType MT_bootstrap921 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap921 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap921", MT_bootstrap921 ()); + } + + private static MethodHandle INDY_call921; + private static MethodHandle INDY_call921 () throws Throwable { + if (INDY_call921 != null) return INDY_call921; + CallSite cs = (CallSite) MH_bootstrap921 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap921 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper921 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call921 ().invokeExact(o1, o2, o3); } + + static Object bootstrap921 (Object l, Object n, Object t) throws Throwable { return _mh[ 921 ].invokeExact(l, n, t); } + + // 922 + private static MethodType MT_bootstrap922 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap922 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap922", MT_bootstrap922 ()); + } + + private static MethodHandle INDY_call922; + private static MethodHandle INDY_call922 () throws Throwable { + if (INDY_call922 != null) return INDY_call922; + CallSite cs = (CallSite) MH_bootstrap922 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap922 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper922 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call922 ().invokeExact(o1, o2, o3); } + + static Object bootstrap922 (Object l, Object n, Object t) throws Throwable { return _mh[ 922 ].invokeExact(l, n, t); } + + // 923 + private static MethodType MT_bootstrap923 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap923 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap923", MT_bootstrap923 ()); + } + + private static MethodHandle INDY_call923; + private static MethodHandle INDY_call923 () throws Throwable { + if (INDY_call923 != null) return INDY_call923; + CallSite cs = (CallSite) MH_bootstrap923 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap923 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper923 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call923 ().invokeExact(o1, o2, o3); } + + static Object bootstrap923 (Object l, Object n, Object t) throws Throwable { return _mh[ 923 ].invokeExact(l, n, t); } + + // 924 + private static MethodType MT_bootstrap924 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap924 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap924", MT_bootstrap924 ()); + } + + private static MethodHandle INDY_call924; + private static MethodHandle INDY_call924 () throws Throwable { + if (INDY_call924 != null) return INDY_call924; + CallSite cs = (CallSite) MH_bootstrap924 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap924 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper924 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call924 ().invokeExact(o1, o2, o3); } + + static Object bootstrap924 (Object l, Object n, Object t) throws Throwable { return _mh[ 924 ].invokeExact(l, n, t); } + + // 925 + private static MethodType MT_bootstrap925 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap925 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap925", MT_bootstrap925 ()); + } + + private static MethodHandle INDY_call925; + private static MethodHandle INDY_call925 () throws Throwable { + if (INDY_call925 != null) return INDY_call925; + CallSite cs = (CallSite) MH_bootstrap925 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap925 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper925 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call925 ().invokeExact(o1, o2, o3); } + + static Object bootstrap925 (Object l, Object n, Object t) throws Throwable { return _mh[ 925 ].invokeExact(l, n, t); } + + // 926 + private static MethodType MT_bootstrap926 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap926 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap926", MT_bootstrap926 ()); + } + + private static MethodHandle INDY_call926; + private static MethodHandle INDY_call926 () throws Throwable { + if (INDY_call926 != null) return INDY_call926; + CallSite cs = (CallSite) MH_bootstrap926 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap926 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper926 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call926 ().invokeExact(o1, o2, o3); } + + static Object bootstrap926 (Object l, Object n, Object t) throws Throwable { return _mh[ 926 ].invokeExact(l, n, t); } + + // 927 + private static MethodType MT_bootstrap927 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap927 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap927", MT_bootstrap927 ()); + } + + private static MethodHandle INDY_call927; + private static MethodHandle INDY_call927 () throws Throwable { + if (INDY_call927 != null) return INDY_call927; + CallSite cs = (CallSite) MH_bootstrap927 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap927 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper927 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call927 ().invokeExact(o1, o2, o3); } + + static Object bootstrap927 (Object l, Object n, Object t) throws Throwable { return _mh[ 927 ].invokeExact(l, n, t); } + + // 928 + private static MethodType MT_bootstrap928 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap928 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap928", MT_bootstrap928 ()); + } + + private static MethodHandle INDY_call928; + private static MethodHandle INDY_call928 () throws Throwable { + if (INDY_call928 != null) return INDY_call928; + CallSite cs = (CallSite) MH_bootstrap928 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap928 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper928 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call928 ().invokeExact(o1, o2, o3); } + + static Object bootstrap928 (Object l, Object n, Object t) throws Throwable { return _mh[ 928 ].invokeExact(l, n, t); } + + // 929 + private static MethodType MT_bootstrap929 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap929 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap929", MT_bootstrap929 ()); + } + + private static MethodHandle INDY_call929; + private static MethodHandle INDY_call929 () throws Throwable { + if (INDY_call929 != null) return INDY_call929; + CallSite cs = (CallSite) MH_bootstrap929 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap929 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper929 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call929 ().invokeExact(o1, o2, o3); } + + static Object bootstrap929 (Object l, Object n, Object t) throws Throwable { return _mh[ 929 ].invokeExact(l, n, t); } + + // 930 + private static MethodType MT_bootstrap930 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap930 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap930", MT_bootstrap930 ()); + } + + private static MethodHandle INDY_call930; + private static MethodHandle INDY_call930 () throws Throwable { + if (INDY_call930 != null) return INDY_call930; + CallSite cs = (CallSite) MH_bootstrap930 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap930 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper930 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call930 ().invokeExact(o1, o2, o3); } + + static Object bootstrap930 (Object l, Object n, Object t) throws Throwable { return _mh[ 930 ].invokeExact(l, n, t); } + + // 931 + private static MethodType MT_bootstrap931 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap931 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap931", MT_bootstrap931 ()); + } + + private static MethodHandle INDY_call931; + private static MethodHandle INDY_call931 () throws Throwable { + if (INDY_call931 != null) return INDY_call931; + CallSite cs = (CallSite) MH_bootstrap931 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap931 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper931 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call931 ().invokeExact(o1, o2, o3); } + + static Object bootstrap931 (Object l, Object n, Object t) throws Throwable { return _mh[ 931 ].invokeExact(l, n, t); } + + // 932 + private static MethodType MT_bootstrap932 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap932 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap932", MT_bootstrap932 ()); + } + + private static MethodHandle INDY_call932; + private static MethodHandle INDY_call932 () throws Throwable { + if (INDY_call932 != null) return INDY_call932; + CallSite cs = (CallSite) MH_bootstrap932 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap932 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper932 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call932 ().invokeExact(o1, o2, o3); } + + static Object bootstrap932 (Object l, Object n, Object t) throws Throwable { return _mh[ 932 ].invokeExact(l, n, t); } + + // 933 + private static MethodType MT_bootstrap933 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap933 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap933", MT_bootstrap933 ()); + } + + private static MethodHandle INDY_call933; + private static MethodHandle INDY_call933 () throws Throwable { + if (INDY_call933 != null) return INDY_call933; + CallSite cs = (CallSite) MH_bootstrap933 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap933 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper933 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call933 ().invokeExact(o1, o2, o3); } + + static Object bootstrap933 (Object l, Object n, Object t) throws Throwable { return _mh[ 933 ].invokeExact(l, n, t); } + + // 934 + private static MethodType MT_bootstrap934 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap934 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap934", MT_bootstrap934 ()); + } + + private static MethodHandle INDY_call934; + private static MethodHandle INDY_call934 () throws Throwable { + if (INDY_call934 != null) return INDY_call934; + CallSite cs = (CallSite) MH_bootstrap934 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap934 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper934 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call934 ().invokeExact(o1, o2, o3); } + + static Object bootstrap934 (Object l, Object n, Object t) throws Throwable { return _mh[ 934 ].invokeExact(l, n, t); } + + // 935 + private static MethodType MT_bootstrap935 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap935 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap935", MT_bootstrap935 ()); + } + + private static MethodHandle INDY_call935; + private static MethodHandle INDY_call935 () throws Throwable { + if (INDY_call935 != null) return INDY_call935; + CallSite cs = (CallSite) MH_bootstrap935 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap935 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper935 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call935 ().invokeExact(o1, o2, o3); } + + static Object bootstrap935 (Object l, Object n, Object t) throws Throwable { return _mh[ 935 ].invokeExact(l, n, t); } + + // 936 + private static MethodType MT_bootstrap936 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap936 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap936", MT_bootstrap936 ()); + } + + private static MethodHandle INDY_call936; + private static MethodHandle INDY_call936 () throws Throwable { + if (INDY_call936 != null) return INDY_call936; + CallSite cs = (CallSite) MH_bootstrap936 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap936 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper936 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call936 ().invokeExact(o1, o2, o3); } + + static Object bootstrap936 (Object l, Object n, Object t) throws Throwable { return _mh[ 936 ].invokeExact(l, n, t); } + + // 937 + private static MethodType MT_bootstrap937 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap937 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap937", MT_bootstrap937 ()); + } + + private static MethodHandle INDY_call937; + private static MethodHandle INDY_call937 () throws Throwable { + if (INDY_call937 != null) return INDY_call937; + CallSite cs = (CallSite) MH_bootstrap937 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap937 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper937 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call937 ().invokeExact(o1, o2, o3); } + + static Object bootstrap937 (Object l, Object n, Object t) throws Throwable { return _mh[ 937 ].invokeExact(l, n, t); } + + // 938 + private static MethodType MT_bootstrap938 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap938 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap938", MT_bootstrap938 ()); + } + + private static MethodHandle INDY_call938; + private static MethodHandle INDY_call938 () throws Throwable { + if (INDY_call938 != null) return INDY_call938; + CallSite cs = (CallSite) MH_bootstrap938 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap938 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper938 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call938 ().invokeExact(o1, o2, o3); } + + static Object bootstrap938 (Object l, Object n, Object t) throws Throwable { return _mh[ 938 ].invokeExact(l, n, t); } + + // 939 + private static MethodType MT_bootstrap939 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap939 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap939", MT_bootstrap939 ()); + } + + private static MethodHandle INDY_call939; + private static MethodHandle INDY_call939 () throws Throwable { + if (INDY_call939 != null) return INDY_call939; + CallSite cs = (CallSite) MH_bootstrap939 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap939 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper939 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call939 ().invokeExact(o1, o2, o3); } + + static Object bootstrap939 (Object l, Object n, Object t) throws Throwable { return _mh[ 939 ].invokeExact(l, n, t); } + + // 940 + private static MethodType MT_bootstrap940 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap940 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap940", MT_bootstrap940 ()); + } + + private static MethodHandle INDY_call940; + private static MethodHandle INDY_call940 () throws Throwable { + if (INDY_call940 != null) return INDY_call940; + CallSite cs = (CallSite) MH_bootstrap940 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap940 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper940 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call940 ().invokeExact(o1, o2, o3); } + + static Object bootstrap940 (Object l, Object n, Object t) throws Throwable { return _mh[ 940 ].invokeExact(l, n, t); } + + // 941 + private static MethodType MT_bootstrap941 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap941 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap941", MT_bootstrap941 ()); + } + + private static MethodHandle INDY_call941; + private static MethodHandle INDY_call941 () throws Throwable { + if (INDY_call941 != null) return INDY_call941; + CallSite cs = (CallSite) MH_bootstrap941 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap941 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper941 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call941 ().invokeExact(o1, o2, o3); } + + static Object bootstrap941 (Object l, Object n, Object t) throws Throwable { return _mh[ 941 ].invokeExact(l, n, t); } + + // 942 + private static MethodType MT_bootstrap942 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap942 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap942", MT_bootstrap942 ()); + } + + private static MethodHandle INDY_call942; + private static MethodHandle INDY_call942 () throws Throwable { + if (INDY_call942 != null) return INDY_call942; + CallSite cs = (CallSite) MH_bootstrap942 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap942 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper942 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call942 ().invokeExact(o1, o2, o3); } + + static Object bootstrap942 (Object l, Object n, Object t) throws Throwable { return _mh[ 942 ].invokeExact(l, n, t); } + + // 943 + private static MethodType MT_bootstrap943 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap943 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap943", MT_bootstrap943 ()); + } + + private static MethodHandle INDY_call943; + private static MethodHandle INDY_call943 () throws Throwable { + if (INDY_call943 != null) return INDY_call943; + CallSite cs = (CallSite) MH_bootstrap943 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap943 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper943 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call943 ().invokeExact(o1, o2, o3); } + + static Object bootstrap943 (Object l, Object n, Object t) throws Throwable { return _mh[ 943 ].invokeExact(l, n, t); } + + // 944 + private static MethodType MT_bootstrap944 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap944 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap944", MT_bootstrap944 ()); + } + + private static MethodHandle INDY_call944; + private static MethodHandle INDY_call944 () throws Throwable { + if (INDY_call944 != null) return INDY_call944; + CallSite cs = (CallSite) MH_bootstrap944 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap944 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper944 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call944 ().invokeExact(o1, o2, o3); } + + static Object bootstrap944 (Object l, Object n, Object t) throws Throwable { return _mh[ 944 ].invokeExact(l, n, t); } + + // 945 + private static MethodType MT_bootstrap945 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap945 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap945", MT_bootstrap945 ()); + } + + private static MethodHandle INDY_call945; + private static MethodHandle INDY_call945 () throws Throwable { + if (INDY_call945 != null) return INDY_call945; + CallSite cs = (CallSite) MH_bootstrap945 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap945 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper945 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call945 ().invokeExact(o1, o2, o3); } + + static Object bootstrap945 (Object l, Object n, Object t) throws Throwable { return _mh[ 945 ].invokeExact(l, n, t); } + + // 946 + private static MethodType MT_bootstrap946 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap946 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap946", MT_bootstrap946 ()); + } + + private static MethodHandle INDY_call946; + private static MethodHandle INDY_call946 () throws Throwable { + if (INDY_call946 != null) return INDY_call946; + CallSite cs = (CallSite) MH_bootstrap946 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap946 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper946 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call946 ().invokeExact(o1, o2, o3); } + + static Object bootstrap946 (Object l, Object n, Object t) throws Throwable { return _mh[ 946 ].invokeExact(l, n, t); } + + // 947 + private static MethodType MT_bootstrap947 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap947 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap947", MT_bootstrap947 ()); + } + + private static MethodHandle INDY_call947; + private static MethodHandle INDY_call947 () throws Throwable { + if (INDY_call947 != null) return INDY_call947; + CallSite cs = (CallSite) MH_bootstrap947 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap947 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper947 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call947 ().invokeExact(o1, o2, o3); } + + static Object bootstrap947 (Object l, Object n, Object t) throws Throwable { return _mh[ 947 ].invokeExact(l, n, t); } + + // 948 + private static MethodType MT_bootstrap948 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap948 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap948", MT_bootstrap948 ()); + } + + private static MethodHandle INDY_call948; + private static MethodHandle INDY_call948 () throws Throwable { + if (INDY_call948 != null) return INDY_call948; + CallSite cs = (CallSite) MH_bootstrap948 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap948 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper948 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call948 ().invokeExact(o1, o2, o3); } + + static Object bootstrap948 (Object l, Object n, Object t) throws Throwable { return _mh[ 948 ].invokeExact(l, n, t); } + + // 949 + private static MethodType MT_bootstrap949 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap949 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap949", MT_bootstrap949 ()); + } + + private static MethodHandle INDY_call949; + private static MethodHandle INDY_call949 () throws Throwable { + if (INDY_call949 != null) return INDY_call949; + CallSite cs = (CallSite) MH_bootstrap949 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap949 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper949 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call949 ().invokeExact(o1, o2, o3); } + + static Object bootstrap949 (Object l, Object n, Object t) throws Throwable { return _mh[ 949 ].invokeExact(l, n, t); } + + // 950 + private static MethodType MT_bootstrap950 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap950 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap950", MT_bootstrap950 ()); + } + + private static MethodHandle INDY_call950; + private static MethodHandle INDY_call950 () throws Throwable { + if (INDY_call950 != null) return INDY_call950; + CallSite cs = (CallSite) MH_bootstrap950 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap950 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper950 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call950 ().invokeExact(o1, o2, o3); } + + static Object bootstrap950 (Object l, Object n, Object t) throws Throwable { return _mh[ 950 ].invokeExact(l, n, t); } + + // 951 + private static MethodType MT_bootstrap951 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap951 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap951", MT_bootstrap951 ()); + } + + private static MethodHandle INDY_call951; + private static MethodHandle INDY_call951 () throws Throwable { + if (INDY_call951 != null) return INDY_call951; + CallSite cs = (CallSite) MH_bootstrap951 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap951 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper951 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call951 ().invokeExact(o1, o2, o3); } + + static Object bootstrap951 (Object l, Object n, Object t) throws Throwable { return _mh[ 951 ].invokeExact(l, n, t); } + + // 952 + private static MethodType MT_bootstrap952 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap952 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap952", MT_bootstrap952 ()); + } + + private static MethodHandle INDY_call952; + private static MethodHandle INDY_call952 () throws Throwable { + if (INDY_call952 != null) return INDY_call952; + CallSite cs = (CallSite) MH_bootstrap952 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap952 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper952 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call952 ().invokeExact(o1, o2, o3); } + + static Object bootstrap952 (Object l, Object n, Object t) throws Throwable { return _mh[ 952 ].invokeExact(l, n, t); } + + // 953 + private static MethodType MT_bootstrap953 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap953 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap953", MT_bootstrap953 ()); + } + + private static MethodHandle INDY_call953; + private static MethodHandle INDY_call953 () throws Throwable { + if (INDY_call953 != null) return INDY_call953; + CallSite cs = (CallSite) MH_bootstrap953 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap953 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper953 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call953 ().invokeExact(o1, o2, o3); } + + static Object bootstrap953 (Object l, Object n, Object t) throws Throwable { return _mh[ 953 ].invokeExact(l, n, t); } + + // 954 + private static MethodType MT_bootstrap954 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap954 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap954", MT_bootstrap954 ()); + } + + private static MethodHandle INDY_call954; + private static MethodHandle INDY_call954 () throws Throwable { + if (INDY_call954 != null) return INDY_call954; + CallSite cs = (CallSite) MH_bootstrap954 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap954 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper954 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call954 ().invokeExact(o1, o2, o3); } + + static Object bootstrap954 (Object l, Object n, Object t) throws Throwable { return _mh[ 954 ].invokeExact(l, n, t); } + + // 955 + private static MethodType MT_bootstrap955 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap955 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap955", MT_bootstrap955 ()); + } + + private static MethodHandle INDY_call955; + private static MethodHandle INDY_call955 () throws Throwable { + if (INDY_call955 != null) return INDY_call955; + CallSite cs = (CallSite) MH_bootstrap955 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap955 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper955 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call955 ().invokeExact(o1, o2, o3); } + + static Object bootstrap955 (Object l, Object n, Object t) throws Throwable { return _mh[ 955 ].invokeExact(l, n, t); } + + // 956 + private static MethodType MT_bootstrap956 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap956 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap956", MT_bootstrap956 ()); + } + + private static MethodHandle INDY_call956; + private static MethodHandle INDY_call956 () throws Throwable { + if (INDY_call956 != null) return INDY_call956; + CallSite cs = (CallSite) MH_bootstrap956 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap956 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper956 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call956 ().invokeExact(o1, o2, o3); } + + static Object bootstrap956 (Object l, Object n, Object t) throws Throwable { return _mh[ 956 ].invokeExact(l, n, t); } + + // 957 + private static MethodType MT_bootstrap957 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap957 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap957", MT_bootstrap957 ()); + } + + private static MethodHandle INDY_call957; + private static MethodHandle INDY_call957 () throws Throwable { + if (INDY_call957 != null) return INDY_call957; + CallSite cs = (CallSite) MH_bootstrap957 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap957 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper957 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call957 ().invokeExact(o1, o2, o3); } + + static Object bootstrap957 (Object l, Object n, Object t) throws Throwable { return _mh[ 957 ].invokeExact(l, n, t); } + + // 958 + private static MethodType MT_bootstrap958 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap958 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap958", MT_bootstrap958 ()); + } + + private static MethodHandle INDY_call958; + private static MethodHandle INDY_call958 () throws Throwable { + if (INDY_call958 != null) return INDY_call958; + CallSite cs = (CallSite) MH_bootstrap958 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap958 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper958 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call958 ().invokeExact(o1, o2, o3); } + + static Object bootstrap958 (Object l, Object n, Object t) throws Throwable { return _mh[ 958 ].invokeExact(l, n, t); } + + // 959 + private static MethodType MT_bootstrap959 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap959 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap959", MT_bootstrap959 ()); + } + + private static MethodHandle INDY_call959; + private static MethodHandle INDY_call959 () throws Throwable { + if (INDY_call959 != null) return INDY_call959; + CallSite cs = (CallSite) MH_bootstrap959 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap959 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper959 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call959 ().invokeExact(o1, o2, o3); } + + static Object bootstrap959 (Object l, Object n, Object t) throws Throwable { return _mh[ 959 ].invokeExact(l, n, t); } + + // 960 + private static MethodType MT_bootstrap960 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap960 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap960", MT_bootstrap960 ()); + } + + private static MethodHandle INDY_call960; + private static MethodHandle INDY_call960 () throws Throwable { + if (INDY_call960 != null) return INDY_call960; + CallSite cs = (CallSite) MH_bootstrap960 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap960 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper960 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call960 ().invokeExact(o1, o2, o3); } + + static Object bootstrap960 (Object l, Object n, Object t) throws Throwable { return _mh[ 960 ].invokeExact(l, n, t); } + + // 961 + private static MethodType MT_bootstrap961 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap961 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap961", MT_bootstrap961 ()); + } + + private static MethodHandle INDY_call961; + private static MethodHandle INDY_call961 () throws Throwable { + if (INDY_call961 != null) return INDY_call961; + CallSite cs = (CallSite) MH_bootstrap961 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap961 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper961 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call961 ().invokeExact(o1, o2, o3); } + + static Object bootstrap961 (Object l, Object n, Object t) throws Throwable { return _mh[ 961 ].invokeExact(l, n, t); } + + // 962 + private static MethodType MT_bootstrap962 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap962 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap962", MT_bootstrap962 ()); + } + + private static MethodHandle INDY_call962; + private static MethodHandle INDY_call962 () throws Throwable { + if (INDY_call962 != null) return INDY_call962; + CallSite cs = (CallSite) MH_bootstrap962 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap962 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper962 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call962 ().invokeExact(o1, o2, o3); } + + static Object bootstrap962 (Object l, Object n, Object t) throws Throwable { return _mh[ 962 ].invokeExact(l, n, t); } + + // 963 + private static MethodType MT_bootstrap963 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap963 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap963", MT_bootstrap963 ()); + } + + private static MethodHandle INDY_call963; + private static MethodHandle INDY_call963 () throws Throwable { + if (INDY_call963 != null) return INDY_call963; + CallSite cs = (CallSite) MH_bootstrap963 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap963 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper963 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call963 ().invokeExact(o1, o2, o3); } + + static Object bootstrap963 (Object l, Object n, Object t) throws Throwable { return _mh[ 963 ].invokeExact(l, n, t); } + + // 964 + private static MethodType MT_bootstrap964 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap964 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap964", MT_bootstrap964 ()); + } + + private static MethodHandle INDY_call964; + private static MethodHandle INDY_call964 () throws Throwable { + if (INDY_call964 != null) return INDY_call964; + CallSite cs = (CallSite) MH_bootstrap964 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap964 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper964 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call964 ().invokeExact(o1, o2, o3); } + + static Object bootstrap964 (Object l, Object n, Object t) throws Throwable { return _mh[ 964 ].invokeExact(l, n, t); } + + // 965 + private static MethodType MT_bootstrap965 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap965 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap965", MT_bootstrap965 ()); + } + + private static MethodHandle INDY_call965; + private static MethodHandle INDY_call965 () throws Throwable { + if (INDY_call965 != null) return INDY_call965; + CallSite cs = (CallSite) MH_bootstrap965 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap965 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper965 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call965 ().invokeExact(o1, o2, o3); } + + static Object bootstrap965 (Object l, Object n, Object t) throws Throwable { return _mh[ 965 ].invokeExact(l, n, t); } + + // 966 + private static MethodType MT_bootstrap966 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap966 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap966", MT_bootstrap966 ()); + } + + private static MethodHandle INDY_call966; + private static MethodHandle INDY_call966 () throws Throwable { + if (INDY_call966 != null) return INDY_call966; + CallSite cs = (CallSite) MH_bootstrap966 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap966 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper966 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call966 ().invokeExact(o1, o2, o3); } + + static Object bootstrap966 (Object l, Object n, Object t) throws Throwable { return _mh[ 966 ].invokeExact(l, n, t); } + + // 967 + private static MethodType MT_bootstrap967 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap967 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap967", MT_bootstrap967 ()); + } + + private static MethodHandle INDY_call967; + private static MethodHandle INDY_call967 () throws Throwable { + if (INDY_call967 != null) return INDY_call967; + CallSite cs = (CallSite) MH_bootstrap967 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap967 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper967 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call967 ().invokeExact(o1, o2, o3); } + + static Object bootstrap967 (Object l, Object n, Object t) throws Throwable { return _mh[ 967 ].invokeExact(l, n, t); } + + // 968 + private static MethodType MT_bootstrap968 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap968 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap968", MT_bootstrap968 ()); + } + + private static MethodHandle INDY_call968; + private static MethodHandle INDY_call968 () throws Throwable { + if (INDY_call968 != null) return INDY_call968; + CallSite cs = (CallSite) MH_bootstrap968 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap968 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper968 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call968 ().invokeExact(o1, o2, o3); } + + static Object bootstrap968 (Object l, Object n, Object t) throws Throwable { return _mh[ 968 ].invokeExact(l, n, t); } + + // 969 + private static MethodType MT_bootstrap969 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap969 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap969", MT_bootstrap969 ()); + } + + private static MethodHandle INDY_call969; + private static MethodHandle INDY_call969 () throws Throwable { + if (INDY_call969 != null) return INDY_call969; + CallSite cs = (CallSite) MH_bootstrap969 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap969 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper969 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call969 ().invokeExact(o1, o2, o3); } + + static Object bootstrap969 (Object l, Object n, Object t) throws Throwable { return _mh[ 969 ].invokeExact(l, n, t); } + + // 970 + private static MethodType MT_bootstrap970 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap970 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap970", MT_bootstrap970 ()); + } + + private static MethodHandle INDY_call970; + private static MethodHandle INDY_call970 () throws Throwable { + if (INDY_call970 != null) return INDY_call970; + CallSite cs = (CallSite) MH_bootstrap970 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap970 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper970 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call970 ().invokeExact(o1, o2, o3); } + + static Object bootstrap970 (Object l, Object n, Object t) throws Throwable { return _mh[ 970 ].invokeExact(l, n, t); } + + // 971 + private static MethodType MT_bootstrap971 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap971 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap971", MT_bootstrap971 ()); + } + + private static MethodHandle INDY_call971; + private static MethodHandle INDY_call971 () throws Throwable { + if (INDY_call971 != null) return INDY_call971; + CallSite cs = (CallSite) MH_bootstrap971 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap971 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper971 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call971 ().invokeExact(o1, o2, o3); } + + static Object bootstrap971 (Object l, Object n, Object t) throws Throwable { return _mh[ 971 ].invokeExact(l, n, t); } + + // 972 + private static MethodType MT_bootstrap972 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap972 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap972", MT_bootstrap972 ()); + } + + private static MethodHandle INDY_call972; + private static MethodHandle INDY_call972 () throws Throwable { + if (INDY_call972 != null) return INDY_call972; + CallSite cs = (CallSite) MH_bootstrap972 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap972 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper972 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call972 ().invokeExact(o1, o2, o3); } + + static Object bootstrap972 (Object l, Object n, Object t) throws Throwable { return _mh[ 972 ].invokeExact(l, n, t); } + + // 973 + private static MethodType MT_bootstrap973 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap973 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap973", MT_bootstrap973 ()); + } + + private static MethodHandle INDY_call973; + private static MethodHandle INDY_call973 () throws Throwable { + if (INDY_call973 != null) return INDY_call973; + CallSite cs = (CallSite) MH_bootstrap973 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap973 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper973 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call973 ().invokeExact(o1, o2, o3); } + + static Object bootstrap973 (Object l, Object n, Object t) throws Throwable { return _mh[ 973 ].invokeExact(l, n, t); } + + // 974 + private static MethodType MT_bootstrap974 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap974 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap974", MT_bootstrap974 ()); + } + + private static MethodHandle INDY_call974; + private static MethodHandle INDY_call974 () throws Throwable { + if (INDY_call974 != null) return INDY_call974; + CallSite cs = (CallSite) MH_bootstrap974 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap974 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper974 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call974 ().invokeExact(o1, o2, o3); } + + static Object bootstrap974 (Object l, Object n, Object t) throws Throwable { return _mh[ 974 ].invokeExact(l, n, t); } + + // 975 + private static MethodType MT_bootstrap975 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap975 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap975", MT_bootstrap975 ()); + } + + private static MethodHandle INDY_call975; + private static MethodHandle INDY_call975 () throws Throwable { + if (INDY_call975 != null) return INDY_call975; + CallSite cs = (CallSite) MH_bootstrap975 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap975 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper975 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call975 ().invokeExact(o1, o2, o3); } + + static Object bootstrap975 (Object l, Object n, Object t) throws Throwable { return _mh[ 975 ].invokeExact(l, n, t); } + + // 976 + private static MethodType MT_bootstrap976 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap976 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap976", MT_bootstrap976 ()); + } + + private static MethodHandle INDY_call976; + private static MethodHandle INDY_call976 () throws Throwable { + if (INDY_call976 != null) return INDY_call976; + CallSite cs = (CallSite) MH_bootstrap976 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap976 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper976 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call976 ().invokeExact(o1, o2, o3); } + + static Object bootstrap976 (Object l, Object n, Object t) throws Throwable { return _mh[ 976 ].invokeExact(l, n, t); } + + // 977 + private static MethodType MT_bootstrap977 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap977 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap977", MT_bootstrap977 ()); + } + + private static MethodHandle INDY_call977; + private static MethodHandle INDY_call977 () throws Throwable { + if (INDY_call977 != null) return INDY_call977; + CallSite cs = (CallSite) MH_bootstrap977 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap977 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper977 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call977 ().invokeExact(o1, o2, o3); } + + static Object bootstrap977 (Object l, Object n, Object t) throws Throwable { return _mh[ 977 ].invokeExact(l, n, t); } + + // 978 + private static MethodType MT_bootstrap978 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap978 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap978", MT_bootstrap978 ()); + } + + private static MethodHandle INDY_call978; + private static MethodHandle INDY_call978 () throws Throwable { + if (INDY_call978 != null) return INDY_call978; + CallSite cs = (CallSite) MH_bootstrap978 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap978 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper978 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call978 ().invokeExact(o1, o2, o3); } + + static Object bootstrap978 (Object l, Object n, Object t) throws Throwable { return _mh[ 978 ].invokeExact(l, n, t); } + + // 979 + private static MethodType MT_bootstrap979 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap979 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap979", MT_bootstrap979 ()); + } + + private static MethodHandle INDY_call979; + private static MethodHandle INDY_call979 () throws Throwable { + if (INDY_call979 != null) return INDY_call979; + CallSite cs = (CallSite) MH_bootstrap979 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap979 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper979 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call979 ().invokeExact(o1, o2, o3); } + + static Object bootstrap979 (Object l, Object n, Object t) throws Throwable { return _mh[ 979 ].invokeExact(l, n, t); } + + // 980 + private static MethodType MT_bootstrap980 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap980 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap980", MT_bootstrap980 ()); + } + + private static MethodHandle INDY_call980; + private static MethodHandle INDY_call980 () throws Throwable { + if (INDY_call980 != null) return INDY_call980; + CallSite cs = (CallSite) MH_bootstrap980 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap980 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper980 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call980 ().invokeExact(o1, o2, o3); } + + static Object bootstrap980 (Object l, Object n, Object t) throws Throwable { return _mh[ 980 ].invokeExact(l, n, t); } + + // 981 + private static MethodType MT_bootstrap981 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap981 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap981", MT_bootstrap981 ()); + } + + private static MethodHandle INDY_call981; + private static MethodHandle INDY_call981 () throws Throwable { + if (INDY_call981 != null) return INDY_call981; + CallSite cs = (CallSite) MH_bootstrap981 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap981 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper981 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call981 ().invokeExact(o1, o2, o3); } + + static Object bootstrap981 (Object l, Object n, Object t) throws Throwable { return _mh[ 981 ].invokeExact(l, n, t); } + + // 982 + private static MethodType MT_bootstrap982 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap982 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap982", MT_bootstrap982 ()); + } + + private static MethodHandle INDY_call982; + private static MethodHandle INDY_call982 () throws Throwable { + if (INDY_call982 != null) return INDY_call982; + CallSite cs = (CallSite) MH_bootstrap982 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap982 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper982 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call982 ().invokeExact(o1, o2, o3); } + + static Object bootstrap982 (Object l, Object n, Object t) throws Throwable { return _mh[ 982 ].invokeExact(l, n, t); } + + // 983 + private static MethodType MT_bootstrap983 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap983 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap983", MT_bootstrap983 ()); + } + + private static MethodHandle INDY_call983; + private static MethodHandle INDY_call983 () throws Throwable { + if (INDY_call983 != null) return INDY_call983; + CallSite cs = (CallSite) MH_bootstrap983 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap983 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper983 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call983 ().invokeExact(o1, o2, o3); } + + static Object bootstrap983 (Object l, Object n, Object t) throws Throwable { return _mh[ 983 ].invokeExact(l, n, t); } + + // 984 + private static MethodType MT_bootstrap984 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap984 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap984", MT_bootstrap984 ()); + } + + private static MethodHandle INDY_call984; + private static MethodHandle INDY_call984 () throws Throwable { + if (INDY_call984 != null) return INDY_call984; + CallSite cs = (CallSite) MH_bootstrap984 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap984 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper984 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call984 ().invokeExact(o1, o2, o3); } + + static Object bootstrap984 (Object l, Object n, Object t) throws Throwable { return _mh[ 984 ].invokeExact(l, n, t); } + + // 985 + private static MethodType MT_bootstrap985 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap985 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap985", MT_bootstrap985 ()); + } + + private static MethodHandle INDY_call985; + private static MethodHandle INDY_call985 () throws Throwable { + if (INDY_call985 != null) return INDY_call985; + CallSite cs = (CallSite) MH_bootstrap985 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap985 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper985 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call985 ().invokeExact(o1, o2, o3); } + + static Object bootstrap985 (Object l, Object n, Object t) throws Throwable { return _mh[ 985 ].invokeExact(l, n, t); } + + // 986 + private static MethodType MT_bootstrap986 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap986 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap986", MT_bootstrap986 ()); + } + + private static MethodHandle INDY_call986; + private static MethodHandle INDY_call986 () throws Throwable { + if (INDY_call986 != null) return INDY_call986; + CallSite cs = (CallSite) MH_bootstrap986 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap986 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper986 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call986 ().invokeExact(o1, o2, o3); } + + static Object bootstrap986 (Object l, Object n, Object t) throws Throwable { return _mh[ 986 ].invokeExact(l, n, t); } + + // 987 + private static MethodType MT_bootstrap987 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap987 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap987", MT_bootstrap987 ()); + } + + private static MethodHandle INDY_call987; + private static MethodHandle INDY_call987 () throws Throwable { + if (INDY_call987 != null) return INDY_call987; + CallSite cs = (CallSite) MH_bootstrap987 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap987 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper987 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call987 ().invokeExact(o1, o2, o3); } + + static Object bootstrap987 (Object l, Object n, Object t) throws Throwable { return _mh[ 987 ].invokeExact(l, n, t); } + + // 988 + private static MethodType MT_bootstrap988 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap988 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap988", MT_bootstrap988 ()); + } + + private static MethodHandle INDY_call988; + private static MethodHandle INDY_call988 () throws Throwable { + if (INDY_call988 != null) return INDY_call988; + CallSite cs = (CallSite) MH_bootstrap988 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap988 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper988 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call988 ().invokeExact(o1, o2, o3); } + + static Object bootstrap988 (Object l, Object n, Object t) throws Throwable { return _mh[ 988 ].invokeExact(l, n, t); } + + // 989 + private static MethodType MT_bootstrap989 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap989 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap989", MT_bootstrap989 ()); + } + + private static MethodHandle INDY_call989; + private static MethodHandle INDY_call989 () throws Throwable { + if (INDY_call989 != null) return INDY_call989; + CallSite cs = (CallSite) MH_bootstrap989 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap989 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper989 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call989 ().invokeExact(o1, o2, o3); } + + static Object bootstrap989 (Object l, Object n, Object t) throws Throwable { return _mh[ 989 ].invokeExact(l, n, t); } + + // 990 + private static MethodType MT_bootstrap990 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap990 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap990", MT_bootstrap990 ()); + } + + private static MethodHandle INDY_call990; + private static MethodHandle INDY_call990 () throws Throwable { + if (INDY_call990 != null) return INDY_call990; + CallSite cs = (CallSite) MH_bootstrap990 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap990 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper990 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call990 ().invokeExact(o1, o2, o3); } + + static Object bootstrap990 (Object l, Object n, Object t) throws Throwable { return _mh[ 990 ].invokeExact(l, n, t); } + + // 991 + private static MethodType MT_bootstrap991 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap991 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap991", MT_bootstrap991 ()); + } + + private static MethodHandle INDY_call991; + private static MethodHandle INDY_call991 () throws Throwable { + if (INDY_call991 != null) return INDY_call991; + CallSite cs = (CallSite) MH_bootstrap991 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap991 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper991 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call991 ().invokeExact(o1, o2, o3); } + + static Object bootstrap991 (Object l, Object n, Object t) throws Throwable { return _mh[ 991 ].invokeExact(l, n, t); } + + // 992 + private static MethodType MT_bootstrap992 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap992 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap992", MT_bootstrap992 ()); + } + + private static MethodHandle INDY_call992; + private static MethodHandle INDY_call992 () throws Throwable { + if (INDY_call992 != null) return INDY_call992; + CallSite cs = (CallSite) MH_bootstrap992 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap992 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper992 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call992 ().invokeExact(o1, o2, o3); } + + static Object bootstrap992 (Object l, Object n, Object t) throws Throwable { return _mh[ 992 ].invokeExact(l, n, t); } + + // 993 + private static MethodType MT_bootstrap993 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap993 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap993", MT_bootstrap993 ()); + } + + private static MethodHandle INDY_call993; + private static MethodHandle INDY_call993 () throws Throwable { + if (INDY_call993 != null) return INDY_call993; + CallSite cs = (CallSite) MH_bootstrap993 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap993 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper993 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call993 ().invokeExact(o1, o2, o3); } + + static Object bootstrap993 (Object l, Object n, Object t) throws Throwable { return _mh[ 993 ].invokeExact(l, n, t); } + + // 994 + private static MethodType MT_bootstrap994 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap994 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap994", MT_bootstrap994 ()); + } + + private static MethodHandle INDY_call994; + private static MethodHandle INDY_call994 () throws Throwable { + if (INDY_call994 != null) return INDY_call994; + CallSite cs = (CallSite) MH_bootstrap994 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap994 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper994 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call994 ().invokeExact(o1, o2, o3); } + + static Object bootstrap994 (Object l, Object n, Object t) throws Throwable { return _mh[ 994 ].invokeExact(l, n, t); } + + // 995 + private static MethodType MT_bootstrap995 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap995 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap995", MT_bootstrap995 ()); + } + + private static MethodHandle INDY_call995; + private static MethodHandle INDY_call995 () throws Throwable { + if (INDY_call995 != null) return INDY_call995; + CallSite cs = (CallSite) MH_bootstrap995 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap995 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper995 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call995 ().invokeExact(o1, o2, o3); } + + static Object bootstrap995 (Object l, Object n, Object t) throws Throwable { return _mh[ 995 ].invokeExact(l, n, t); } + + // 996 + private static MethodType MT_bootstrap996 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap996 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap996", MT_bootstrap996 ()); + } + + private static MethodHandle INDY_call996; + private static MethodHandle INDY_call996 () throws Throwable { + if (INDY_call996 != null) return INDY_call996; + CallSite cs = (CallSite) MH_bootstrap996 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap996 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper996 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call996 ().invokeExact(o1, o2, o3); } + + static Object bootstrap996 (Object l, Object n, Object t) throws Throwable { return _mh[ 996 ].invokeExact(l, n, t); } + + // 997 + private static MethodType MT_bootstrap997 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap997 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap997", MT_bootstrap997 ()); + } + + private static MethodHandle INDY_call997; + private static MethodHandle INDY_call997 () throws Throwable { + if (INDY_call997 != null) return INDY_call997; + CallSite cs = (CallSite) MH_bootstrap997 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap997 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper997 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call997 ().invokeExact(o1, o2, o3); } + + static Object bootstrap997 (Object l, Object n, Object t) throws Throwable { return _mh[ 997 ].invokeExact(l, n, t); } + + // 998 + private static MethodType MT_bootstrap998 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle MH_bootstrap998 () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap998", MT_bootstrap998 ()); + } + + private static MethodHandle INDY_call998; + private static MethodHandle INDY_call998 () throws Throwable { + if (INDY_call998 != null) return INDY_call998; + CallSite cs = (CallSite) MH_bootstrap998 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap998 ()); + return cs.dynamicInvoker(); + } + + static Object indyWrapper998 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call998 ().invokeExact(o1, o2, o3); } + + static Object bootstrap998 (Object l, Object n, Object t) throws Throwable { return _mh[ 998 ].invokeExact(l, n, t); } + + + // End of BSM+indy pairs + + public boolean run() throws Throwable { + + if ( ! _threadMXBean.isSynchronizerUsageSupported() ) { + Env.getLog().complain("Platform does not detect deadlocks in synchronizers. Please exclude this test on this platform."); + return false; + } + + MethodHandle bsmt = MethodHandles.lookup().findStatic( + getClass(), "bsmt", MethodType.methodType(Object.class, int.class, Object.class, Object.class, Object.class)); + + for ( int i = 0; i < THREAD_NUM; i++ ) + _mh[i] = MethodHandles.insertArguments(bsmt, 0, i); + + for ( int i = 0; i < THREAD_NUM; i++ ) + _locks[i] = new ReentrantLock(); + + Stresser stresser = new Stresser(Env.getArgParser().getArguments()); + stresser.start(ITERATIONS); + try { + _iteration = 0; + while ( stresser.iteration() ) { + if ( ! test() ) { + return false; + } + _iteration++; + } + } finally { + stresser.finish(); + } + + return true; + } + + boolean test() throws Throwable { + Env.traceNormal("Starting test..."); + + for ( int i = 0; i < THREAD_NUM; i++ ) { + if ( _locks[i].isLocked() ) { + Env.getLog().complain("Lock " + i + " is still locked!"); + _testFailed = true; + } + } + + if ( _testFailed ) + throw new Exception("Some locks are still locked"); + + _threadRaceStartBarrier = new CyclicBarrier(THREAD_NUM + 1); + _testDone = false; + _testFailed = false; + + for ( int i = 0; i < THREAD_NUM; i++ ) + (_threads[i] = new DeadlockedThread(i)).start(); + + try { + _threadRaceStartBarrier.await(); + Env.traceVerbose("Start race..."); + + // + // Wait for the deadlock and detect it using ThreadMXBean + // + + boolean resultsReady = false; + for ( int i = 0; i < 10 && ! resultsReady && ! _testFailed; i++ ) { + Env.traceNormal("Waiting for threads to lock up..."); + Thread.sleep(100); + + resultsReady = true; + for ( int t = 0; t < THREAD_NUM; t++ ) { + if ( _iteration == 0 && t % 3 != 2 && ! _locks[t].hasQueuedThreads() ) { + Env.traceVerbose("Lock " + t + ": no waiters"); + resultsReady = false; + } else { + Env.traceVerbose("Lock " + t + ": has waiters"); + } + } + } + + if ( ! resultsReady ) + Env.traceImportant("Warning: threads are still not deadlocked?"); + + long[] deadlockedThreads = _threadMXBean.findDeadlockedThreads(); + if ( deadlockedThreads == null ) { + Env.complain("Found no deadlocked threads. Expected to find " + THREAD_NUM); + return false; + } else if ( deadlockedThreads.length != THREAD_NUM ) { + Env.complain("Found " + deadlockedThreads.length + " deadlocked threads. Expected to find " + THREAD_NUM); + return false; + } else { + Env.traceNormal("Found " + deadlockedThreads.length + " deadlocked threads as expected"); + return ! _testFailed; + } + } finally { + _testDone = true; + + _threads[0].interrupt(); + + for ( int i = 0; i < THREAD_NUM; i++ ) { + _threads[i].join(1000); + if ( _threads[i].isAlive() ) + Env.getLog().complain("Thread " + _threads[i].getName() + " is still alive"); + } + + MutableCallSite.syncAll(_cs); + } + } + + static class DeadlockedThread extends Thread { + int _n; + boolean _lockedCurrent = false; + boolean _lockedNext = false; + + public DeadlockedThread(int n) { + super(); + setDaemon(true); + _n = n; + } + + public void run() { + try { + Method m = INDIFY_Test.class.getDeclaredMethod("indyWrapper" + _n, Object.class, Object.class, Object.class); + m.invoke(null, new Object(), new Object(), _n); + } catch ( Throwable t ) { + Env.getLog().complain("Exception in thread " + getName()); + t.printStackTrace(Env.getLog().getOutStream()); + _testFailed = true; + } + } + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/INDIFY_Test.jmpp b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/INDIFY_Test.jmpp new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/INDIFY_Test.jmpp @@ -0,0 +1,354 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +# +# int THREADS = 999; +# if ( THREADS % 3 != 0 ) throw new RuntimeException("THREADS should be a multiple of 3!"); +# +package vm.mlvm.mixed.stress.java.findDeadlock; + +import java.lang.invoke.CallSite; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.invoke.MutableCallSite; +import java.lang.management.ManagementFactory; +import java.lang.management.ThreadMXBean; +import java.lang.reflect.Method; +import java.util.concurrent.CyclicBarrier; +import java.util.concurrent.locks.ReentrantLock; + +import nsk.share.test.Stresser; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; + +public class INDIFY_Test extends MlvmTest { + + public static final int THREAD_NUM = @THREADS; + public static final int ITERATIONS = 1000; + + static ThreadMXBean _threadMXBean = ManagementFactory.getThreadMXBean(); + + static Thread[] _threads = new Thread[THREAD_NUM]; + static ReentrantLock[] _locks = new ReentrantLock[THREAD_NUM]; + static MethodHandle[] _mh = new MethodHandle[THREAD_NUM]; + static MutableCallSite[] _cs = new MutableCallSite[THREAD_NUM]; + + static CyclicBarrier _threadRaceStartBarrier; + static volatile boolean _testFailed; + static volatile boolean _testDone; + static volatile int _iteration; + + private static int nextLock(int n) { return (n + 1) % THREAD_NUM; } + + private static boolean lock(String place, int n, boolean lockInterruptible) throws Throwable { + boolean locked = false; + place = Thread.currentThread().getName() + ": " + place; + if ( ! lockInterruptible ) { + Env.traceVerbose(place + ": Locking " + n); + _locks[n].lock(); + locked = true; + } else { + try { + Env.traceVerbose(place + ": Locking interruptibly " + n); + _locks[n].lockInterruptibly(); + locked = true; + + if ( ! _testDone ) + throw new Exception(place + ": LOCKED " + n); + else + Env.traceVerbose(place + ": LOCKED " + n); + + } catch ( InterruptedException swallow ) { + Env.traceVerbose(place + ": interrupted while locking " + n); + } + } + + return locked; + } + + private static boolean unlock(String place, int n) throws Throwable { + place = Thread.currentThread().getName() + ": " + place; + Env.traceVerbose(place + ": Unlocking " + n); + _locks[n].unlock(); + Env.traceVerbose(place + ": UNLOCKED " + n); + return false; + } + + static Object bsmt(int lockNum, Object l, Object n, Object m) throws Throwable { + DeadlockedThread thread = (DeadlockedThread) Thread.currentThread(); + + if ( l instanceof MethodHandles.Lookup ) { + // Method is used as BSM + Env.traceVerbose(thread.getName() + ": Entered BSM. Lock=" + lockNum); + + if ( _iteration > 0 ) + throw new Exception("BSM called twice!"); + + switch ( lockNum % 3 ) { + case 0: + thread._lockedCurrent = lock("BSM", lockNum, false); + _threadRaceStartBarrier.await(); + thread._lockedNext = lock("BSM", nextLock(lockNum), true); + break; + + case 1: + thread._lockedCurrent = lock("BSM", lockNum, false); + break; + + case 2: + // Do everything in target method + break; + } + + return (_cs[lockNum] = new MutableCallSite(_mh[lockNum])); + + } else { + // Method is used as target + Env.traceVerbose(thread.getName() + ": Entered target method. Lock=" + lockNum); + + try { + if ( _iteration > 0 ) { + + switch ( lockNum % 3 ) { + case 0: + thread._lockedCurrent = lock("Target", lockNum, false); + _threadRaceStartBarrier.await(); + thread._lockedNext = lock("Target", nextLock(lockNum), true); + break; + + case 1: + thread._lockedCurrent = lock("Target", lockNum, false); + _threadRaceStartBarrier.await(); + Env.traceVerbose(thread.getName() + ": Entering synchronize ( " + lockNum + " )"); + synchronized ( _locks[nextLock(lockNum)] ) { + } + Env.traceVerbose(thread.getName() + ": Exited synchronize ( " + lockNum + " )"); + break; + + case 2: + Env.traceVerbose(thread.getName() + ": Entering synchronize ( " + lockNum + " )"); + synchronized ( _locks[lockNum] ) { + _threadRaceStartBarrier.await(); + thread._lockedNext = lock("Target", nextLock(lockNum), true); + thread._lockedNext = unlock("Target", nextLock(lockNum)); + } + Env.traceVerbose(thread.getName() + ": Exited synchronize ( " + lockNum + " )"); + break; + } + + } else { + switch ( lockNum % 3 ) { + case 0: + // Everything is done in BSM + break; + + case 1: + _threadRaceStartBarrier.await(); + thread._lockedNext = lock("Target", nextLock(lockNum), true); + break; + + case 2: + thread._lockedCurrent = lock("Target", lockNum, false); + _threadRaceStartBarrier.await(); + thread._lockedNext = lock("Target", nextLock(lockNum), true); + break; + } + + } + + return null; + } finally { + if ( thread._lockedNext ) + thread._lockedNext = unlock("Target", nextLock(lockNum)); + if ( thread._lockedCurrent ) + thread._lockedCurrent = unlock("Target", lockNum); + } + } + } + + // BSM + Indy pairs +# +# for (int i = 0; i < THREADS; i++ ) { +# String MT_bootstrap = "MT_bootstrap" + i; +# String MH_bootstrap = "MH_bootstrap" + i; +# String INDY_call = "INDY_call" + i; +# String bootstrap = "bootstrap" + i; +# String qBootstrap = "\"bootstrap" + i + "\""; +# String indyWrapper = "indyWrapper" + i; +# + // @i + private static MethodType @MT_bootstrap () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); } + + private static MethodHandle @MH_bootstrap () throws Exception { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, @qBootstrap, @MT_bootstrap ()); + } + + private static MethodHandle @INDY_call; + private static MethodHandle @INDY_call () throws Throwable { + if (@INDY_call != null) return @INDY_call; + CallSite cs = (CallSite) @MH_bootstrap ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", @MT_bootstrap ()); + return cs.dynamicInvoker(); + } + + static Object @indyWrapper (Object o1, Object o2, Object o3) throws Throwable { return @INDY_call ().invokeExact(o1, o2, o3); } + + static Object @bootstrap (Object l, Object n, Object t) throws Throwable { return _mh[ @i ].invokeExact(l, n, t); } + +# +# } +# + + // End of BSM+indy pairs + + public boolean run() throws Throwable { + + if ( ! _threadMXBean.isSynchronizerUsageSupported() ) { + Env.getLog().complain("Platform does not detect deadlocks in synchronizers. Please exclude this test on this platform."); + return false; + } + + MethodHandle bsmt = MethodHandles.lookup().findStatic( + getClass(), "bsmt", MethodType.methodType(Object.class, int.class, Object.class, Object.class, Object.class)); + + for ( int i = 0; i < THREAD_NUM; i++ ) + _mh[i] = MethodHandles.insertArguments(bsmt, 0, i); + + for ( int i = 0; i < THREAD_NUM; i++ ) + _locks[i] = new ReentrantLock(); + + Stresser stresser = new Stresser(Env.getArgParser().getArguments()); + stresser.start(ITERATIONS); + try { + _iteration = 0; + while ( stresser.iteration() ) { + if ( ! test() ) { + return false; + } + _iteration++; + } + } finally { + stresser.finish(); + } + + return true; + } + + boolean test() throws Throwable { + Env.traceNormal("Starting test..."); + + for ( int i = 0; i < THREAD_NUM; i++ ) { + if ( _locks[i].isLocked() ) { + Env.getLog().complain("Lock " + i + " is still locked!"); + _testFailed = true; + } + } + + if ( _testFailed ) + throw new Exception("Some locks are still locked"); + + _threadRaceStartBarrier = new CyclicBarrier(THREAD_NUM + 1); + _testDone = false; + _testFailed = false; + + for ( int i = 0; i < THREAD_NUM; i++ ) + (_threads[i] = new DeadlockedThread(i)).start(); + + try { + _threadRaceStartBarrier.await(); + Env.traceVerbose("Start race..."); + + // + // Wait for the deadlock and detect it using ThreadMXBean + // + + boolean resultsReady = false; + for ( int i = 0; i < 10 && ! resultsReady && ! _testFailed; i++ ) { + Env.traceNormal("Waiting for threads to lock up..."); + Thread.sleep(100); + + resultsReady = true; + for ( int t = 0; t < THREAD_NUM; t++ ) { + if ( _iteration == 0 && t % 3 != 2 && ! _locks[t].hasQueuedThreads() ) { + Env.traceVerbose("Lock " + t + ": no waiters"); + resultsReady = false; + } else { + Env.traceVerbose("Lock " + t + ": has waiters"); + } + } + } + + if ( ! resultsReady ) + Env.traceImportant("Warning: threads are still not deadlocked?"); + + long[] deadlockedThreads = _threadMXBean.findDeadlockedThreads(); + if ( deadlockedThreads == null ) { + Env.complain("Found no deadlocked threads. Expected to find " + THREAD_NUM); + return false; + } else if ( deadlockedThreads.length != THREAD_NUM ) { + Env.complain("Found " + deadlockedThreads.length + " deadlocked threads. Expected to find " + THREAD_NUM); + return false; + } else { + Env.traceNormal("Found " + deadlockedThreads.length + " deadlocked threads as expected"); + return ! _testFailed; + } + } finally { + _testDone = true; + + _threads[0].interrupt(); + + for ( int i = 0; i < THREAD_NUM; i++ ) { + _threads[i].join(1000); + if ( _threads[i].isAlive() ) + Env.getLog().complain("Thread " + _threads[i].getName() + " is still alive"); + } + + MutableCallSite.syncAll(_cs); + } + } + + static class DeadlockedThread extends Thread { + int _n; + boolean _lockedCurrent = false; + boolean _lockedNext = false; + + public DeadlockedThread(int n) { + super(); + setDaemon(true); + _n = n; + } + + public void run() { + try { + Method m = INDIFY_Test.class.getDeclaredMethod("indyWrapper" + _n, Object.class, Object.class, Object.class); + m.invoke(null, new Object(), new Object(), _n); + } catch ( Throwable t ) { + Env.getLog().complain("Exception in thread " + getName()); + t.printStackTrace(Env.getLog().getOutStream()); + _testFailed = true; + } + } + } + + public static void main(String[] args) { MlvmTest.launch(args); } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TestDescription.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TestDescription.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TestDescription.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * + * @summary converted from VM Testbase vm/mlvm/mixed/stress/java/findDeadlock. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine, monitoring] + * VM Testbase comments: 8055376 + * VM Testbase readme: + * DESCRIPTION + * The test does the following in a loop: + * 1. Enters a deadlock involving methodhandles and invokedynamic target and bootstrap methods + * (deadlock is created using both java.util.concurrency.lock.ReentrantLock and + * synchronized() Java syntax) + * 2. Finds that deadlock using ThreadMXBean + * 3. Unlocks one thread to let others go + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.mixed.stress.java.findDeadlock.INDIFY_Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.mixed.stress.java.findDeadlock.INDIFY_Test + */ + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/INDIFY_Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/INDIFY_Test.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/INDIFY_Test.java @@ -0,0 +1,444 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +/* + * @test + * @bug 6969574 + * + * @summary converted from VM Testbase vm/mlvm/mixed/stress/regression/b6969574. + * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine] + * VM Testbase comments: 8079650 + * + * @library /vmTestbase + * /test/lib + * @run driver jdk.test.lib.FileInstaller . . + * + * @comment build test class and indify classes + * @build vm.mlvm.mixed.stress.regression.b6969574.INDIFY_Test + * @run driver vm.mlvm.share.IndifiedClassesBuilder + * + * @run main/othervm vm.mlvm.mixed.stress.regression.b6969574.INDIFY_Test + */ + +package vm.mlvm.mixed.stress.regression.b6969574; + +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; +import java.lang.reflect.Method; +import java.util.LinkedList; + +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; +import vm.share.options.Option; + +/** + * Test for CR 6969574: Verify that MethodHandles is faster than reflection and comparable + * in order of magnitude to direct calls. + * The test is supposed to run in -Xcomp/-Xmixed modes. + * It can fail in -Xint. + + */ + +public class INDIFY_Test extends MlvmTest { + + @Option(name="warmups", default_value="5", description="Number of warm-up cycles") + private int warmups; + + @Option(name="measurements", default_value="10", description="Number of test run cycles") + private int measurements; + + @Option(name="iterations", default_value="1000000", description="Number iterations per test run") + private int iterations; + + @Option(name="micro.iterations", default_value="5", description="Number micro-iterations per iteration") + private int microIterations; + + private static final int MICRO_TO_NANO = 1000000; + + private static final String TESTEE_ARG2 = "abc"; + private static final long TESTEE_ARG3 = 123; + + // + // Test method and its stuff + // + private static int sMicroIterations; + + private static class TestData { + int i; + } + + private static final String TESTEE_METHOD_NAME = "testee"; + + static long testee; + /** + * A testee method. Declared public due to Reflection API requirements. + * Not intended for external use. + */ + public static void testee(TestData d, String y, long x) { + for (int i = 0; i < INDIFY_Test.sMicroIterations; i++) { + testee /= 1 + (d.i | 1); + } + } + + // + // Indify stubs for invokedynamic + // + private static MethodType MT_bootstrap() { + return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap", MT_bootstrap()); + } + + private static MethodType MT_target() { + return MethodType.methodType(void.class, TestData.class, String.class, long.class); + } + + private static MethodHandle INDY_call; + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) { + return INDY_call; + } + + return ((CallSite) MH_bootstrap().invokeWithArguments(MethodHandles.lookup(), "hello", MT_target())).dynamicInvoker(); + } + + private static Object bootstrap(Object l, Object n, Object t) throws Throwable { + trace("BSM called"); + return new ConstantCallSite(MethodHandles.lookup().findStatic(INDIFY_Test.class, TESTEE_METHOD_NAME, MT_target())); + } + + // The function below contains invokedynamic instruction after processing + // with Indify + private static void indyWrapper(TestData d) throws Throwable { + INDY_call().invokeExact(d, TESTEE_ARG2, TESTEE_ARG3); + } + + // + // Benchmarking infrastructure + // + private abstract static class T { + public abstract void run() throws Throwable; + } + + private static class Measurement { + Benchmark benchmark; + long time; + long iterations; + double timePerIteration; + + Measurement(Benchmark b, long t, long iter) { + benchmark = b; + time = t; + iterations = iter; + timePerIteration = (double) time / iterations; + } + + void report(Measurement compareToThis) { + String line = String.format("%40s: %7.1f ns", benchmark.name, timePerIteration * MICRO_TO_NANO); + + if (compareToThis != null && compareToThis != this) { + double ratio = (double) timePerIteration / compareToThis.timePerIteration; + String er = "slower"; + + if (ratio < 1) { + er = "FASTER"; + ratio = 1 / ratio; + } + + line += String.format(" // %.1f times %s than %s", ratio, er, compareToThis.benchmark.name); + } + + print(line); + } + } + + private static class Result { + Benchmark benchmark; + double mean; + double stdDev; + + public Result(Benchmark b, double mean, double stdDev) { + benchmark = b; + this.mean = mean; + this.stdDev = stdDev; + } + + public void report(Result compareToThis) { + String line = String.format( + "%40s: %7.1f ns (stddev: %5.1f = %2d%%)", + benchmark.name, + mean * MICRO_TO_NANO, + stdDev * MICRO_TO_NANO, + (int) (100 * stdDev / mean)); + + if (compareToThis != null && compareToThis != this) { + double ratio = mean / compareToThis.mean; + String er = "slower"; + + if (ratio < 1) { + er = "FASTER"; + ratio = 1 / ratio; + } + + line += String.format(" // %.1f times %s than %s", ratio, er, compareToThis.benchmark.name); + } + + print(line); + } + + public static Result calculate(Measurement[] measurements, Result substractThis) { + if (measurements.length == 0) { + throw new IllegalArgumentException("No measurements!"); + } + + double meanToSubstract = 0; + if (substractThis != null) { + meanToSubstract = substractThis.mean; + } + + long timeSum = 0; + long iterationsSum = 0; + for (Measurement m : measurements) { + timeSum += m.time; + iterationsSum += m.iterations; + } + + double mean = (double) timeSum / iterationsSum - meanToSubstract; + + double stdDev = 0; + for (Measurement m : measurements) { + double result = (double) m.time / m.iterations - meanToSubstract; + stdDev += Math.pow(result - mean, 2); + } + stdDev = Math.sqrt(stdDev / measurements.length); + + return new Result(measurements[0].benchmark, mean, stdDev); + } + + public String getMeanStr() { + return String.format("%.1f ns", mean * MICRO_TO_NANO); + } + + public Benchmark getBenchmark() { + return benchmark; + } + } + + private static class Benchmark { + String name; + T runnable; + LinkedList runResults = new LinkedList(); + + public Benchmark(String name, T runnable) { + this.name = name; + this.runnable = runnable; + } + + public Measurement run(int iterations, boolean warmingUp) throws Throwable { + long start = System.currentTimeMillis(); + + for (int i = iterations; i > 0; --i) { + runnable.run(); + } + + long duration = System.currentTimeMillis() - start; + + Measurement measurement = new Measurement(this, duration, iterations); + + if (!warmingUp) { + runResults.add(measurement); + } + + return measurement; + } + + public void shortWarmup() throws Throwable { + runnable.run(); + } + + public String getName() { + return name; + } + } + + private static double relativeOrder(double value, double base) { + return Math.log10(Math.abs(value - base) / base); + } + + private void verifyTimeOrder(Result value, Result base) { + double timeOrder = relativeOrder(value.mean, base.mean); + + if (timeOrder > 1) { + markTestFailed(value.getBenchmark().getName() + " invocation time order (" + + value.getMeanStr() + + ") is greater than of " + base.getBenchmark().getName() + "(" + + base.getMeanStr() + ")!"); + } + + print(value.getBenchmark().getName() + + " <= " + + base.getBenchmark().getName() + + ": Good."); + } + + // The numbers below are array indexes + size of array (the last constant). + // They should be consecutive, starting with 0 + private final static int DIRECT_CALL = 0; + private final static int REFLECTION_CALL = 1; + private final static int INVOKE_EXACT = 2; + private final static int INVOKE = 3; + private final static int INVOKE_WITHARG = 4; + private final static int INVOKE_WITHARG_TYPECONV = 5; + private final static int INDY = 6; + private final static int BENCHMARK_COUNT = 7; + + // + // Test body + // + @Override + public boolean run() throws Throwable { + sMicroIterations = microIterations; + + final MethodHandle mhTestee = MethodHandles.lookup().findStatic(INDIFY_Test.class, TESTEE_METHOD_NAME, MT_target()); + final Method refTestee = getClass().getMethod(TESTEE_METHOD_NAME, new Class[] { TestData.class, String.class, long.class }); + + final TestData testData = new TestData(); + + final Benchmark[] benchmarks = new Benchmark[BENCHMARK_COUNT]; + + benchmarks[DIRECT_CALL] = new Benchmark("Direct call", new T() { + public void run() throws Throwable { + testee(testData, TESTEE_ARG2, TESTEE_ARG3); + } + }); + + benchmarks[REFLECTION_CALL] = new Benchmark("Reflection API Method.invoke()", new T() { + public void run() throws Throwable { + refTestee.invoke(null, testData, TESTEE_ARG2, TESTEE_ARG3); + } + }); + + benchmarks[INVOKE_EXACT] = new Benchmark("MH.invokeExact()", new T() { + public void run() throws Throwable { + mhTestee.invokeExact(testData, TESTEE_ARG2, TESTEE_ARG3); + } + }); + + benchmarks[INVOKE] = new Benchmark("MH.invoke()", new T() { + public void run() throws Throwable { + mhTestee.invokeExact(testData, TESTEE_ARG2, TESTEE_ARG3); + } + }); + + benchmarks[INVOKE_WITHARG] = new Benchmark("MH.invokeWithArguments(), exact types", new T() { + public void run() throws Throwable { + mhTestee.invokeWithArguments(testData, TESTEE_ARG2, TESTEE_ARG3); + } + }); + + benchmarks[INVOKE_WITHARG_TYPECONV] = new Benchmark("MH.invokeWithArguments() + type conv.", new T() { + public void run() throws Throwable { + mhTestee.invokeWithArguments((Object) testData, null, (Short) Short.MAX_VALUE); + } + }); + + benchmarks[INDY] = new Benchmark("invokedynamic instruction", new T() { + public void run() throws Throwable { + indyWrapper(testData); + } + }); + + for (int w = 0; w < warmups; w++) { + trace("\n======== Warming up, iteration #" + w); + + for (int i = iterations; i > 0; i--) { + for (int r = 0; r < benchmarks.length; r++) + benchmarks[r].shortWarmup(); + } + } + + final int compareToIdx = REFLECTION_CALL; + for (int i = 0; i < measurements; i++) { + trace("\n======== Measuring, iteration #" + i); + + for (int r = 0; r < benchmarks.length; r++) { + benchmarks[r].run(iterations, false).report( + r > compareToIdx ? benchmarks[compareToIdx].runResults.getLast() : null); + } + } + + final Result[] results = new Result[benchmarks.length]; + + print("\n======== Results (absolute)" + "; warmups: " + warmups + + "; measurements: " + measurements + "; iterations/run: " + iterations + + "; micro iterations: " + microIterations); + + for (int r = 0; r < benchmarks.length; r++) { + results[r] = Result.calculate(benchmarks[r].runResults.toArray(new Measurement[0]), null); + } + + for (int r = 0; r < benchmarks.length; r++) { + results[r].report(r != compareToIdx ? results[compareToIdx] : null); + } + + print("\n======== Conclusions"); + + // TODO: exclude GC time, compilation time (optionally) from measurements + + print("Comparing invocation time orders"); + verifyTimeOrder(results[REFLECTION_CALL], results[INVOKE_EXACT]); + verifyTimeOrder(results[INVOKE_EXACT], results[DIRECT_CALL]); + verifyTimeOrder(results[INVOKE], results[DIRECT_CALL]); + verifyTimeOrder(results[INVOKE_WITHARG], results[INVOKE_EXACT]); + verifyTimeOrder(results[INVOKE_WITHARG_TYPECONV], results[INVOKE_EXACT]); + verifyTimeOrder(results[INVOKE_EXACT], results[INDY]); + + return true; + } + + // Below are routines for converting this test to a standalone one + // This is useful if you want to run the test with JDK7 b103 release + // where the regression can be seen + static void print(String s) { + Env.traceImportant(s); + } + + static void trace(String s) { + Env.traceNormal(s); + } + + //boolean testFailed; + //static void markTestFailed(String reason) { + // testFailed = true; + //} + + public static void main(String[] args) { + MlvmTest.launch(args); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/TEST.properties b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/TEST.properties new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/TEST.properties @@ -0,0 +1,24 @@ +# +# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/patches/java.base/java/lang/invoke/NewInvokeSpecialCallSite.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/patches/java.base/java/lang/invoke/NewInvokeSpecialCallSite.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/patches/java.base/java/lang/invoke/NewInvokeSpecialCallSite.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.lang.invoke; + +/** + * This is a CallSite, which constructor can be used as bootstrap method (via REF_newInvokeSpecial reference kind). + * + * This call site always calls MethodHandle set with {@link #setMH(MethodHandle)} method (no lookup by method name/type is performed!) + *

Since we can't extend the java.lang.invoke.CallSite from package other than java.lang.invoke, we use system package name + * for this class. + */ +public final class NewInvokeSpecialCallSite extends CallSite { + + private static MethodHandle mh; + + /** + * Sets method handle, which will be used for CallSite target + */ + public static void setMH(MethodHandle newMH) { + mh = newMH; + } + + /** + * Constructs a CallSite. This constructor has special signature, which can be used for bootstrap method target + * of REF_newInvokeSpecial reference kind. + * @param lookup Ignored. + * @param name Ignored. + * @param type Ignored. + */ + public NewInvokeSpecialCallSite(MethodHandles.Lookup lookup, String name, MethodType type) { + super(mh); + } + + /** + * This method is no-op. Use {@link #setMH(MethodHandle)} for setting the target + */ + public final void setTarget(MethodHandle newMH) { + // No-op + } + + /** + * Always returns method handle set with {@link #setMH(MethodHandle)} method + */ + public final MethodHandle getTarget() { + return mh; + } + + public final MethodHandle dynamicInvoker() { + return makeDynamicInvoker(); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/patches/java.base/jdk/internal/org/objectweb/asm/ClassWriterExt.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/patches/java.base/jdk/internal/org/objectweb/asm/ClassWriterExt.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/patches/java.base/jdk/internal/org/objectweb/asm/ClassWriterExt.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.internal.org.objectweb.asm; + +import java.lang.reflect.InaccessibleObjectException; + +public class ClassWriterExt extends ClassWriter { + private boolean cacheInvokeDynamic = true; + private boolean cacheMTypes = true; + private boolean cacheMHandles = true; + + private final Item key = new Item(); + + public ClassWriterExt(ClassReader cr, int flags) { + super(cr, flags); + } + + public ClassWriterExt(int flags) { + super(flags); + } + + @Override + Item newInvokeDynamicItem(final String name, final String desc, + final Handle bsm, final Object... bsmArgs) { + if (cacheInvokeDynamic) { + return super.newInvokeDynamicItem(name, desc, bsm, bsmArgs); + } + int type = ClassWriter.INDY; + disableItemHashTableFor(type); + Item result; + try { + return super.newInvokeDynamicItem(name, desc, bsm, bsmArgs); + } finally { + restoreItemHashTableFor(type); + } + } + + @Override + Item newStringishItem(final int type, final String value) { + if (type != ClassWriter.MTYPE) { + return super.newStringishItem(type, value); + } + if (cacheMTypes) { + return super.newStringishItem(type, value); + } + disableItemHashTableFor(type); + try { + return super.newStringishItem(type, value); + } finally { + restoreItemHashTableFor(type); + } + } + + @Override + Item newHandleItem(final int tag, final String owner, final String name, + final String desc, final boolean itf) { + if (cacheMHandles) { + return super.newHandleItem(tag, owner, name, desc, itf); + } + int type = ClassWriter.HANDLE_BASE + tag; + disableItemHashTableFor(type); + try { + return super.newHandleItem(tag, owner, name, desc, itf); + } finally { + restoreItemHashTableFor(type); + } + } + + private void disableItemHashTableFor(int type) { + for (Item i : items) { + while (i != null) { + if (i.type == type) { + i.type = -type; + } + i = i.next; + } + } + } + + private void restoreItemHashTableFor(int type) { + for (Item i : items) { + while (i != null) { + if (i.type == -type) { + i.type = type; + } + i = i.next; + } + } + } + + public void setCacheInvokeDynamic(boolean value) { + cacheInvokeDynamic = value; + } + public void setCacheMTypes(boolean value) { + cacheMTypes = value; + } + public void setCacheMHandles(boolean value) { + cacheMHandles = value; + } + + public int getBytecodeLength(MethodVisitor mv) { + ByteVector code; + try { + java.lang.reflect.Field field = mv.getClass().getDeclaredField("code"); + field.setAccessible(true); + code = (ByteVector) field.get(mv); + } catch (InaccessibleObjectException | SecurityException | ReflectiveOperationException e) { + throw new Error("can not read field 'code' from class " + mv.getClass(), e); + } + try { + java.lang.reflect.Field field = code.getClass().getDeclaredField("length"); + field.setAccessible(true); + return field.getInt(code); + } catch (InaccessibleObjectException | SecurityException | ReflectiveOperationException e) { + throw new Error("can not read field 'length' from class " + code.getClass(), e); + } + } +} + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ClassfileGenerator.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ClassfileGenerator.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ClassfileGenerator.java @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +import nsk.share.ArgumentParser; + +public abstract class ClassfileGenerator { + + public static class Klass { + private String pkgName; + private String className; + private byte[] bytes; + private String mainMethodName; + private String mainMethodSignature; + + public Klass(String packageName, String className, String mainMethodName, String mainMethodSignature, byte[] bytes) { + this.pkgName = packageName; + this.className = className; + this.mainMethodName = mainMethodName; + this.mainMethodSignature = mainMethodSignature; + this.bytes = bytes; + } + + public String getClassName() { + return (this.pkgName != null ? (this.pkgName + ".") : "") + this.className; + } + + public String getSimpleClassName() { + return this.className; + } + + public String getPackageName() { + return this.pkgName; + } + + public String getMainMethodName() { + return mainMethodName; + } + + public String getMainMethodSignature() { + return mainMethodSignature; + } + + public byte[] getBytes() { + return this.bytes; + } + + public void writeClass(String destDir) throws IOException { + boolean wroteOk = false; + + File outDir; + if (this.pkgName != null) + outDir = new File(destDir, this.pkgName.replace('.', '/')); + else + outDir = new File("."); + + outDir.mkdirs(); + + File outFile = new File(outDir, this.className.concat(".class")); + FileOutputStream outStream = new FileOutputStream(outFile); + try { + outStream.write(this.bytes); + wroteOk = true; + } finally { + outStream.close(); + + if (!wroteOk) + outFile.delete(); + } + } + } + + protected String fullClassName, pkgName, shortClassName; + + public void setClassName(String pkgName, String shortClassName) { + this.pkgName = pkgName; + this.shortClassName = shortClassName; + fullClassName = (pkgName == null ? "" : (pkgName.replace('.', '/') + '/')) + + shortClassName; + } + + public abstract Klass[] generateBytecodes(); + + public static void main(String[] args) { + try { + Env.init(new ArgumentParser(args) { + @Override + protected boolean checkOption(String option, String value) { + if (option.equals("d")) + return true; + + return super.checkOption(option, value); + } + }); + + Class caller = Class.forName(Thread.currentThread() + .getStackTrace()[2].getClassName()); + ClassfileGenerator gen = (ClassfileGenerator) caller.newInstance(); + gen.setClassName(caller.getPackage().getName(), caller + .getSimpleName().replaceFirst("^GENERATE_", "")); + + String destDir = Env.getArgParser().getOptions().getProperty("d"); + + Klass[] klasses = gen.generateBytecodes(); + + for (Klass k : klasses) + k.writeClass(destDir); + + } catch (Exception e) { + Env.complain(e, "Generator caught an error"); + System.exit(1); + } + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ClassfileGeneratorTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ClassfileGeneratorTest.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ClassfileGeneratorTest.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.util.List; +import java.util.LinkedList; + +import vm.mlvm.share.ClassfileGenerator; +import vm.mlvm.share.CustomClassLoaders; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; +import vm.share.options.Option; + +public class ClassfileGeneratorTest extends MlvmTest { + + public static final String CLASS_NAME = "Dummy"; + + @Option(name = "generator", default_value = "", description = "Class name of the generator. Must inherit from vm.mlvm.share.ClassfileGenerator") + private String generatorClassNameOpt; + + private Class generatorClass; + + public ClassfileGeneratorTest() { + } + + public ClassfileGeneratorTest(Class genClass) { + generatorClass = genClass; + } + + @Override + public boolean run() throws Throwable { + if (generatorClass == null) { + generatorClass = Class.forName(generatorClassNameOpt).asSubclass(ClassfileGenerator.class); + } + + Env.traceVerbose("Generating class"); + ClassfileGenerator gen = generatorClass.newInstance(); + + gen.setClassName(null, CLASS_NAME); + ClassfileGenerator.Klass k = gen.generateBytecodes()[0]; + k.writeClass("."); + ClassLoader cl = CustomClassLoaders.makeClassBytesLoader(k.getBytes(), k.getClassName()); + + Env.traceNormal("Loading class " + k.getClassName()); + Class dummyClass = cl.loadClass(k.getClassName()); + + MethodType mt = MethodType.fromMethodDescriptorString(k.getMainMethodSignature(), getClass().getClassLoader()); + MethodHandle m = MethodHandles.lookup().findStatic(dummyClass, k.getMainMethodName(), mt); + + Env.traceVerbose("Main method: " + m); + + // Generate default parameter values + List arguments = new LinkedList<>(); + for(Class t : mt.wrap().parameterArray()) { + Object arg; + if (t.isArray()) { + arg = java.lang.reflect.Array.newInstance(t.getComponentType(), 0); + } else { + arg = t.newInstance(); + } + arguments.add(arg); + } + + Env.traceNormal("Invoking method " + m); + m.invokeWithArguments(arguments); + + return true; + } + + public static void main(String[] args) { + MlvmTest.launch(args); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/CustomClassLoaders.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/CustomClassLoaders.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/CustomClassLoaders.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import java.io.IOException; + +import vm.share.FileUtils; + +public class CustomClassLoaders { + + public static ClassLoader makeClassBytesLoader(final byte[] classBytes, + final String className) { + return new ClassLoader() { + @Override + protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + Env.traceDebug("Custom loader: requested=" + name + "; can supply=" + className); + + if (!name.equals(className)) + return super.loadClass(name, resolve); + + Env.traceDebug("Custom loader: defining " + className + " (" + classBytes.length + ") bytes"); + + return defineClass(className, classBytes, 0, classBytes.length); + } + }; + } + + public static ClassLoader makeCustomClassLoader(final String forClassName) throws IOException { + return makeClassBytesLoader(FileUtils.readClass(forClassName), forClassName); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/DekkerTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/DekkerTest.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/DekkerTest.java @@ -0,0 +1,331 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.CyclicBarrier; +import nsk.share.Log.TraceLevel; +import vm.share.options.Option; + +/** + * The test looks for late CPU stores, which is not visible for other CPU. + *

+ * In absence of synchronization (such as memory barriers and so on), typical modern CPUs + * (Intel x86 32/64, SPARC in TSO mode) put stores into buffer instead of immediately writing them to memory. + * + * So the following program: + * + * write A + * read B + * + * can actually be transformed to and seen by other processors as: + * + * read B + * write A + * + *

+ * DekkerTest runs two threads, A and B, which perform operations on a shared array of Actors concurrently. + * Reordering mentioned above is detected by the test and reported as failure + * (unless mayFail option is specified in the constructor or command-line option). + * + *

+ * The tests should subclass Actor with test-specific data and code. + * The Actor subclass requirements: + * + *

    + *
  • the class should have two data fields: + * + * A + * B + * + * of the same type, which are able hold one of two values. + * Let's call these values TRUE and FALSE (these can be any two values, say 0 and 1). + * + *
  • * actorA() is called from thread A and should implement the following pseudo-code: + * + * A = TRUE + * optional MEMBAR #StoreLoad + * return (B == TRUE) + * + * + *
  • actorB() is called from thread B and should do the following: + * + * { + * B = TRUE + * optional MEMBAR #StoreLoad + * return (A == TRUE) + * } + * + * + *
  • reset() method should do the following: + * + * { + * A = FALSE + * B = FALSE + * } + * + * + * The use of memory barriers in actorX() methods is up to the implementor -- depending on the goal of testing. + * + */ +public class DekkerTest extends MlvmTest { + + @Option(name = "actorClass", default_value = "", description = "Name of actor class (see test comments)") + private String actorClassNameOpt = ""; + + @Option(name = "mayFail", default_value = "false", description = "Don't report test failure (use it just a stress test)") + private boolean mayFailOpt; + + @Option(name = "iterations", default_value = "1000000", description = "Number of iterations in each Actor thread (i.e., shared array size)") + private int iterationsOpt = 1000000; + + /** + * Actor interface, which should be implemented for using with DekkerTest. + * The requirements for Actor implementation are outlined in {@link DekkerTest} class documentation. + */ + public interface Actor { + /** + * Sets fields A and B to false + */ + void reset(); + + /** + * Sets field A to true, and returns field B contents + * @return field B contents + * @throws Throwable in case of error + */ + boolean actorA() throws Throwable; + + /** + * Sets field B to true, and returns field A contents + * @return field A contents + * @throws Throwable in case of error + */ + boolean actorB() throws Throwable; + } + + private static final class ResultData { + public boolean a; + public boolean b; + + public ResultData() { + } + + public void reset() { + a = false; + b = false; + } + } + + private static class RaceStatistics { + public int syncErrors; + public int runSideBySide; + public int A_outruns_B; + public int B_outruns_A; + + public void reset() { + syncErrors = 0; + runSideBySide = 0; + A_outruns_B = 0; + B_outruns_A = 0; + } + } + + private Class actorClass; + private final CyclicBarrier startBarrier = new CyclicBarrier(2); // We have two actors + private Actor[] testData; + private ResultData[] results; + private final RaceStatistics raceStatistics = new RaceStatistics(); + + public DekkerTest() { + } + + /** + * Sets actor class. + * @param ac Actor class, which implements DekkerTest.Actor interface + */ + public void setActorClass(Class ac) { + actorClass = ac; + } + + /** + * Sets mayFail option. When set to true, synchronization failure is not reported as test failure (DekkerTest is used as a stress test). + * @param mayFail if true, don't report sync failure as test failure, false otherwise + */ + public void setMayFailOpt(boolean mayFail) { + mayFailOpt = mayFail; + } + + /** + * Initializes test data, parses command-line options and checks Actor class + */ + @Override + public void initializeTest() { + // Override values set by setActorClass() by command-line option, if any + try { + if (!actorClassNameOpt.isEmpty()) { + actorClass = Class.forName(actorClassNameOpt).asSubclass(Actor.class); + } else { + if (actorClass == null) { + throw new RuntimeException("Test error: the actor class should be specified via command-line options or in the constructor"); + } + } + + } catch (ClassNotFoundException e) { + throw new RuntimeException("Actor class '" + actorClassNameOpt + "' not found", e); + } catch (ClassCastException e) { + throw new RuntimeException("Test error: the actor class " + actorClass.getName() + " should implement " + Actor.class.getName() + " interface", e); + } + + // Generate data + int iterations = iterationsOpt * getStressOptions().getIterationsFactor(); + if (iterations <= 0) { + throw new RuntimeException("Invalid number of iterations specified in -iterations and -stressIterationsFactor options: " + iterations); + } + + results = new ResultData[iterations]; + for (int i = 0; i < results.length; ++i) { + results[i] = new ResultData(); + } + + testData = new Actor[results.length]; + try { + for (int i = 0; i < testData.length; ++i) { + testData[i] = actorClass.newInstance(); + } + } catch (ReflectiveOperationException e) { + throw new RuntimeException("Test error: can't instantiate class " + actorClass.getName(), e); + } + } + + /** + * Resets the test data between test runs + */ + @Override + public void resetTest() { + for (Actor a : testData) { + a.reset(); + } + for (ResultData d : results) { + d.reset(); + } + } + + private class RunnerA extends Thread { + @Override + public void run() { + try { + startBarrier.await(); + for (int i = 0; i < results.length; ++i) { + results[i].a = testData[i].actorA(); + } + } catch (Throwable t) { + markTestFailed("Exception in RunnerA", t); + } + } + } + + private class RunnerB extends Thread { + @Override + public void run() { + try { + startBarrier.await(); + for (int i = 0; i < results.length; ++i) { + results[i].b = testData[i].actorB(); + } + } catch (Throwable t) { + markTestFailed("Exception in RunnerB", t); + } + } + } + + @Override + public boolean run() throws Throwable { + RunnerA threadA = new RunnerA(); + threadA.start(); + + RunnerB threadB = new RunnerB(); + threadB.start(); + + threadA.join(); + threadB.join(); + + if (isMarkedFailed()) + return false; + + analyzeResults(); + printResults(); + + if (mayFailOpt) { + return true; + } + + return (raceStatistics.syncErrors == 0); + } + + private void analyzeResults() { + raceStatistics.reset(); + + for (int i = 0; i < results.length; ++i) { + boolean resultA = results[i].a; + boolean resultB = results[i].b; + + if (resultA && resultB) { + + ++raceStatistics.runSideBySide; + + } else if (resultA && !resultB) { + + ++raceStatistics.A_outruns_B; + + } else if (!resultA && resultB) { + + ++raceStatistics.B_outruns_A; + + } else if (!resultA && !resultB) { + + ++raceStatistics.syncErrors; + + } else { + + throw new RuntimeException("Should not reach here"); + } + } + } + + private void printResults() { + int logLevel = (raceStatistics.syncErrors != 0) ? TraceLevel.TRACE_IMPORTANT : TraceLevel.TRACE_NORMAL; + + Env.getLog().trace(logLevel, "\n" + + "Late stores (sync. errors): " + raceStatistics.syncErrors + "\n" + + "B outruns A : " + raceStatistics.B_outruns_A + "\n" + + "A outruns B : " + raceStatistics.A_outruns_B + "\n" + + "A and B run side by side : " + raceStatistics.runSideBySide); + } + + public static void main(String[] args) { + MlvmTest.launch(args); + } +} + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/Env.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/Env.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/Env.java @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import java.util.Random; + +import nsk.share.ArgumentParser; +import nsk.share.Log; +import nsk.share.Log.TraceLevel; +import nsk.share.test.LazyFormatString; + +public class Env { + + private static class StaticHolder { + public static ArgumentParser argParser; + public static Log log; + static { + init(new String[0]); + } + + public static void init(String... args) { + init(new IgnoreUnknownArgumentParser(args)); + } + + public static void init(ArgumentParser ap) { + StaticHolder.argParser = ap; + StaticHolder.log = new Log(System.out, StaticHolder.argParser); + } + } + + public static ArgumentParser getArgParser() { + return StaticHolder.argParser; + } + + public static Log getLog() { + return StaticHolder.log; + } + + public static void init(String... args) { + StaticHolder.init(args); + } + + public static void init(ArgumentParser ap) { + StaticHolder.init(ap); + } + + // + // RNG + // + + private static long _seed = new Random().nextLong(); + + public static void setRNGSeed(long seed) { + _seed = seed; + } + + private static volatile boolean _wasSeedPrinted = false; + + // Thread local variable containing each thread's ID + private static final ThreadLocal _threadRNG = + new ThreadLocal() { + @Override protected Random initialValue() { + if ( ! _wasSeedPrinted ) { + _wasSeedPrinted = true; + traceImportant("RNG seed = " + _seed + " (0x" + Long.toHexString(_seed) + ")"); + } + + long seed = _seed; + String name = Thread.currentThread().getName(); + for ( int n = 0; n < name.length(); n++ ) + seed ^= name.charAt(n) << ((n % 7) * 8); + + traceVerbose(Thread.currentThread() + " RNG seed = " + seed + " (0x" + Long.toHexString(seed) + ")"); + + return new Random(seed); + } + }; + + public static Random getRNG() { + return _threadRNG.get(); + } + + // + // Syntactic sugar + // + + public static void traceImportant(String msg) { + getLog().trace(TraceLevel.TRACE_IMPORTANT, msg); + } + + public static void traceImportant(String msg, Object... args) { + getLog().trace(TraceLevel.TRACE_IMPORTANT, new LazyFormatString(msg, args)); + } + + public static void traceImportant(Throwable t, String msg, Object... args) { + getLog().trace(TraceLevel.TRACE_IMPORTANT, new LazyFormatString(msg, args), t); + } + + public static void traceNormal(String msg) { + getLog().trace(TraceLevel.TRACE_NORMAL, msg); + } + + public static void traceNormal(String msg, Object... args) { + getLog().trace(TraceLevel.TRACE_NORMAL, new LazyFormatString(msg, args)); + } + + public static void traceNormal(Throwable t, String msg, Object... args) { + getLog().trace(TraceLevel.TRACE_NORMAL, new LazyFormatString(msg, args), t); + } + + public static void traceVerbose(String msg) { + getLog().trace(TraceLevel.TRACE_VERBOSE, msg); + } + + public static void traceVerbose(String msg, Object... args) { + getLog().trace(TraceLevel.TRACE_VERBOSE, new LazyFormatString(msg, args)); + } + + public static void traceVerbose(Throwable t, String msg, Object... args) { + getLog().trace(TraceLevel.TRACE_VERBOSE, new LazyFormatString(msg, args), t); + } + + public static void traceDebug(String msg) { + getLog().trace(TraceLevel.TRACE_DEBUG, msg); + } + + public static void traceDebug(String msg, Object... args) { + getLog().trace(TraceLevel.TRACE_DEBUG, new LazyFormatString(msg, args)); + } + + public static void traceDebug(Throwable t, String msg, Object... args) { + getLog().trace(TraceLevel.TRACE_DEBUG, new LazyFormatString(msg, args), t); + } + + public static void display(String msg) { + getLog().trace(TraceLevel.TRACE_IMPORTANT, msg); + } + + public static void display(String msg, Object... args) { + getLog().trace(TraceLevel.TRACE_IMPORTANT, new LazyFormatString(msg, args)); + } + + public static void complain(String msg) { + getLog().complain(msg); + } + + public static void complain(String msg, Object... args) { + getLog().complain(new LazyFormatString(msg, args)); + } + + public static void complain(Throwable t, String msg, Object... args) { + getLog().complain(new LazyFormatString(msg, args), t); + } + + /** + * Throws an arbitrary exception as unchecked one. + * The method does not return normally. + * + * If the exception is not a subclass of java.lang.RuntimeException` + * or java.lang.Error, it is wrapped into java.lang.RuntimeException + * + * @param exception Exception to throw (wrapping it when it is checked on) + */ + public static void throwAsUncheckedException(Throwable exception) { + if (exception instanceof RuntimeException) { + throw (RuntimeException) exception; + } + + if (exception instanceof Error) { + throw (Error) exception; + } + + throw new RuntimeException(exception.getMessage(), exception); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ExceptionsOptionObjectFactory.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ExceptionsOptionObjectFactory.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ExceptionsOptionObjectFactory.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import java.util.List; +import java.util.ArrayList; +import vm.share.options.OptionObjectFactory; +import java.util.regex.Pattern; + +/** + * Implementation of vm.share.options.OptionObjectFactory interface. + * Parses the comma-separated list of exception class names. + * + * @see vm.mlvm.share.MlvmTest + * @see vm.mlvm.share.MlvmTestExecutor#launch(Class testClass, Object[] constructorArgs) + * + */ + +public class ExceptionsOptionObjectFactory implements OptionObjectFactory>> { + + private static final String DESCRIPTION = "list of exception class names separated by comma"; + + @Override + public String getPlaceholder() { + return DESCRIPTION; + } + + @Override + public String getDescription() { + return DESCRIPTION; + } + + @Override + public String getParameterDescription(String param) { + return "exception of type " + param; + } + + @Override + public String[] getPossibleValues() { + return new String[] { Throwable.class.getName() }; + } + + @Override + public String getDefaultValue() { + return ""; + } + + @Override + public List> getObject(String classNameList) { + List> result = new ArrayList<>(); + classNameList = classNameList.trim(); + + if (!classNameList.isEmpty()) { + for (String className : classNameList.split(",")) { + result.add(getClassFor(className.trim())); + } + } + + return result; + } + + private static Class getClassFor(String className) { + try { + return Class.forName(className).asSubclass(Throwable.class); + } catch (ClassNotFoundException e) { + throw new RuntimeException("Cannot find class '" + className + "'", e); + } catch (ClassCastException e) { + throw new RuntimeException("Subclass of " + Throwable.class.getName() + " should be specified. Cannot cast '" + className + "' to the Throwable", e); + } + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/IgnoreUnknownArgumentParser.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/IgnoreUnknownArgumentParser.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/IgnoreUnknownArgumentParser.java @@ -0,0 +1,16 @@ +package vm.mlvm.share; + +import nsk.share.ArgumentParser; + +public class IgnoreUnknownArgumentParser extends ArgumentParser { + + IgnoreUnknownArgumentParser(String[] args) { + super(args); + } + + @Override + protected boolean checkOption(String option, String value) { + return true; + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/IndifiedClassesBuilder.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/IndifiedClassesBuilder.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/IndifiedClassesBuilder.java @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import jdk.test.lib.Utils; + +import java.io.File; +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.StandardCopyOption; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.Arrays; +import java.util.stream.Stream; + +public class IndifiedClassesBuilder { + public static void main(String... args) { + Path[] targets; + if (args.length != 0) { + targets = Arrays.stream(args) + .map(Paths::get) + .toArray(Path[]::new); + for (Path path : targets) { + if (Files.notExists(path)) { + throw new Error(path + " doesn't exist"); + } + if (!Files.isDirectory(path)) { + throw new Error(path + " isn't a directory"); + } + } + } else { + targets = Arrays.stream(Utils.TEST_CLASS_PATH.split(File.pathSeparator)) + .map(Paths::get) + .toArray(Path[]::new); + } + for (Path path : targets) { + if (!Files.isDirectory(path)) { + continue; + } + try (Stream files = Files.walk(path)) { + files.filter( + p -> { + String s = p.getFileName().toString(); + return s.startsWith("INDIFY_") && s.endsWith(".class"); + }) + .forEach( p -> IndifiedClassesBuilder.indify(p, path)); + } catch (IOException e) { + throw new Error("can't traverse path " + path); + } + } + } + + private static void indify(Path file, Path path) { + Path tmp = Paths.get("indify.tmp"); + try { + Files.createDirectories(tmp); + } catch (IOException e) { + throw new Error("can't create dir " + tmp, e); + } + try { + vm.mlvm.tools.Indify.main( + "--all", + "--overwrite", + "--transitionalJSR292=no", + "--dest", tmp.toAbsolutePath().toString(), + file.toAbsolutePath().toString()); + + // workaround for "nested" classpaths + if (Files.exists(tmp.resolve(path.relativize(file)))) { + Files.copy(tmp.resolve(path.relativize(file)), file, StandardCopyOption.REPLACE_EXISTING); + } + + delete(tmp); + } catch (IOException e) { + throw new Error("can't indify " + file, e); + } + } + + private static void delete(Path dir) throws IOException { + Files.walkFileTree(dir, new SimpleFileVisitor<>() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + FileVisitResult result = super.visitFile(file, attrs); + Files.delete(file); + return result; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { + FileVisitResult result = super.postVisitDirectory(dir, exc); + Files.delete(dir); + return result; + } + }); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmOOMTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmOOMTest.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmOOMTest.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import java.util.LinkedList; +import java.util.List; + +/** + * The base class for Mlvm tests checking various OOM Errors. + * Subclasses are expected to implement {@link #eatMemory(List)}/ + * {@link checkOOME(OutOfMemoryError)} methods consuming memory in various ways. + */ +public abstract class MlvmOOMTest extends MlvmTest { + private static Object garbage; + + /** + * A template method. + * Implements logic of the tests: + * consumes memory in loop until OOM is thrown, checks the OOM type. + */ + @Override + public final boolean run() { + Env.display("Test started."); + LinkedList objects = new LinkedList(); + // to trick EA + garbage = objects; + try { + eatMemory(objects); + } catch (OutOfMemoryError oome) { + objects.clear(); + Env.display("Caught OOME : " + oome.getMessage()); + checkOOME(oome); + return true; + } + throw new RuntimeException("TEST FAIL : no OOME"); + } + + /** + * Consumes memory. + * Subclasses implement their logic of memory consuming. Created objects are expected + * to be stored in the given parameter. + * The normal termination of the method is throwing OOM exception, which will be checked + * by the {@link #checkOOME(OutOfMemoryError)} + * Not throwing the OOM will be interpreted as test failure. + * @param garbage a list to store generated garbage + */ + protected abstract void eatMemory(List garbage); + + /** + * Checks the OOME type is expected. + * Method just exits if OOME is expected and throws an exeption if not. + * @param oome thrown by {@link #eatMemory(List)} + */ + protected abstract void checkOOME(OutOfMemoryError oome); +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTest.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTest.java @@ -0,0 +1,342 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import java.util.Random; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.List; +import java.util.ArrayList; +import java.util.Arrays; + +import nsk.share.ArgumentParser; +import nsk.share.Log; +import nsk.share.Log.TraceLevel; +import nsk.share.test.StressOptions; +import nsk.share.test.Stresser; +import vm.share.options.Option; +import vm.mlvm.share.ExceptionsOptionObjectFactory; + +/** + * The base class for MLVM tests. + * Subclasses need to override {@link #run()} method to implement test logic. + */ +public abstract class MlvmTest { + + /** + * MLVM tests are expected to implement this method to provide the logic. + * + * @return true if test passed, false if failed + * @throws Throwable any subclass of Throwable to indicate test failure + */ + public abstract boolean run() throws Throwable; + + /** Performs pre-run (prolog) actions in MlvmTest subclasses. + * The default implementation does nothing. + * Sublcasses may override this method to perform custom actions after test is initialized + * (initialization order is described in MlvmTestExecutor class) but before {@link run()} method is invoked. + * @throws Throwable in case of problem, which is interpreted as a test failure + * @see MlvmTestExecutor + */ + protected void initializeTest() throws Throwable { + } + + /** Performs post-run (epilog) actions. + * This method is executed after the {@link #run()} method. + * Does nothing by default. + * Subclasses may override this method when some finalization actions are required. + * Test fails if this method throws exception. + * @param result test execution status: true, if test passed, false otherwise + * @throws Throwable may throw any subclass of Throwable to indicate test failure (regardless of run() method result) + * @see MlvmTestExecutor + */ + protected void finalizeTest(boolean result) throws Throwable { + } + + /** + * Resets the tests between runs. + * You may override this method, especially if your test supports -stressRunsFactor option + * @throws Throwable may throw any subclass of Throwable to indicate test failure (regardless of run() method result) + * @see MlvmTestExecutor + */ + protected void resetTest() throws Throwable { + testMarkedFailed = false; + } + + // Options for all MlvmTests + @Option(name = "requireExceptions", default_value = "", factory = ExceptionsOptionObjectFactory.class, + description = "Specifying this option turns test into negative one: " + + "the specified exception class names separated with commas have to be caught for the test to pass") + private List> requiredExceptionClasses = new ArrayList<>(); + + @Option(name = "seed", default_value = "0", description = "Initial random seed") + private long _seed; + + @Option(name = "runs", default_value = "1", description = "How many times the test should be re-run") + private int runs = 1; + + // Some internal stuff + private static MlvmTest instance; + + /** + * Sets internal static variable to instance of the test. + * Used in debugger/debuggee tests. + * Not intended to work if there are several MlvmTests created. + * @param inst Instance of the test + */ + public static void setInstance(MlvmTest inst) { + instance = inst; + } + + /** + * Returns internal static variable holding instance of the test, which was set using {@link #setInstance()}. + * Used in debugger/debuggee tests. + * Not intended to work if there are several MlvmTests created. + * @return Instance of the test + */ + public static MlvmTest getInstance() { + return instance; + } + + private static String name = "Test"; + + /** + * Sets internal static variable to the name of the test. + * Debugger/debuggee MLVM tests use this feature to differentiate logging from debugger and debuggee + * Not intended to work if there are several MlvmTests created + * @param n Name of the test + */ + public static void setName(String n) { + name = n; + } + + /** + * Returns internal static variable holding the name of the test. + * Debugger/debuggee MLVM tests use this feature to differentiate logging from debugger and debuggee + * Not intended to work if there are several MlvmTests created + * @return Name of the test + */ + public static String getName() { + return name; + } + + void initRNG() { + if (_seed != 0) { + Env.setRNGSeed(_seed); + } + Env.traceVerbose("Initial seed = " + _seed); + } + + /** + * Sets number of test runs + * @param r Number of test runs + */ + public void setRunsNumber(int r) { + runs = r; + } + + /** + * Return number of test runs + * @return Number of test runs + */ + public int getRunsNumber() { + return runs; + } + + // Sugar... + /** + * Provides Random Number Generator for the test. The tests should always use this generator + * to guarantee repeatability (using -seed option), especially in multi-threaded usages + * @return Random number generator for this thread, seeded with command-line option, if provided + */ + public static Random getRNG() { + return Env.getRNG(); + } + + /** + * Returns logger, which is used in all MLVM framework. This guarantees correct ordering of messages + * @return Logger object + */ + public static Log getLog() { + return Env.getLog(); + } + + /** + * ArgumentParser is the old implementation of command-line parser (the new tests should use + * vm.share.options framework). However it is maintained, because nsk JDI/SAJDI framework is built + * on ArgumentParser. + * @return ArgumentParser object created with command-line options (see {@link MlvmTestExecutor} + * for details) + */ + public static ArgumentParser getArgumentParser() { + return Env.getArgParser(); + } + + // ...and spice + + /* Makes the test "negative": one of the specified exception classes has to be thrown by the test to pass. + * Test fails if exception has not been thrown. + * Boolean value returned by {@link run()} method is ignored. + * Calling {@link #markTestFailed()} causes test to fail anyway. + *

    + * Invoke this method BEFORE run() method (e.g., in prolog) to instruct launcher + * to anticipate the exception instead of the positive (normal) mode. + * @param classes The list of exception classes + * Empty list or null indicates that test is positive. + */ + @SafeVarargs + public final void setRequiredExceptions(Class... classes) { + setRequiredExceptions(Arrays.asList(classes)); + } + + /* Makes the test "negative": one of the specified exception classes has to be thrown by the test to pass. + * Test fails if exception has not been thrown. + * Boolean value returned by {@link run()} method is ignored. + * Calling {@link #markTestFailed()} causes test to fail anyway. + *

    + * Invoke this method BEFORE run() method (e.g., in prolog) to instruct launcher + * @param classes The list of exception classes. + * Empty list or null indicates that test is positive (in its standard form) + */ + public final void setRequiredExceptions(List> classes) { + if (requiredExceptionClasses.size() > 0) { + Env.traceNormal("Expected exceptions specified in the test are overridden in command-line"); + return; + } + + requiredExceptionClasses = classes; + } + + /** + * Returns the list of required exceptions + * (please see {@link #setRequiredExceptions(Class... classes)} method for details. + * @return The list of exception classes. Empty list or null indicates that test is positive (in its standard form) + */ + public final List> getRequiredExceptions() { + return requiredExceptionClasses; + } + + private boolean testMarkedFailed = false; + + /** + * Marks the test as failed. + * Regardless of run() method return value, the test is considered failed. Operation is not reversible. + * Can be called from multiple threads + */ + protected final void markTestFailed() { + markTestFailed(null, null); + } + + /** + * Marks the test as failed, indicating falure reason. + * Regardless of run() method return value, the test is considered failed. Operation is not reversible. + * Can be called from multiple threads + * @param msg A message to log (using Log.complain() method) + */ + protected final void markTestFailed(String msg) { + markTestFailedImpl(msg, null); + } + + /** + * Marks the test as failed, indicating falure reason and exception, which caused it. + * Regardless of run() method return value, the test is considered failed. Operation is not reversible. + * Can be called from multiple threads + * @param msg A message to log (using Log.complain() method) + * @param t An exception to log + */ + protected final void markTestFailed(String msg, Throwable t) { + markTestFailedImpl(msg, t); + } + + private synchronized void markTestFailedImpl(String msg, Throwable t) { + testMarkedFailed = true; + + StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); + Env.complain(t, "%s marked failed at %s%s", getName(), stackTrace[3], + msg == null ? "" : ":\n" + msg); + + } + + /** + * Checks if the test has marked failed. + * @return true, if the test marked failed + */ + protected final synchronized boolean isMarkedFailed() { + return testMarkedFailed; + } + + private static boolean dumpHeapAfter = false; + + /** + * Checks if heap dump requestd after running the test. + * @return true, if the test marked failed + * @see MlvmTestExecutor for heap dumping details. + */ + public static synchronized boolean getHeapDumpAfter() { + return dumpHeapAfter; + } + + /** + * Sets or clears heap dumping request. Heap is dumped in MlvmTestExecutor after running the test. + * + * NB. heap dumping uses ProcessUtils libraries, so it should be added to library path in cfg-file: + * {@code export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${COMMON_LIBS_LOCATION}/lib/${ARCH}/vm/share"} + * @param enable true, if heap should be dumped, false if not + * @see MlvmTestExecutor for heap dumping details. + */ + public static synchronized void setHeapDumpAfter(boolean enable) { + dumpHeapAfter = enable; + } + + protected static Stresser createStresser() { + Stresser s = new Stresser(getArgumentParser().getStressOptions()); + if (getLog().getTraceLevel() >= TraceLevel.TRACE_VERBOSE) { + s.printStressInfo(getLog().getOutStream()); + } + return s; + } + + protected static StressOptions getStressOptions() { + return getArgumentParser().getStressOptions(); + } + + // Launchers are left here for compatibility. Launching code has been moved to MlvmTestExecutor + // TODO: A minor bug has to be filed to replace MlvmTest.launch() calls with MlvmTestExecutor.launch() + + protected static void launch(ArgumentParser argumentParser) { + MlvmTestExecutor.launch(argumentParser); + } + + protected static void launch(ArgumentParser argumentParser, Object[] constructorArgs) { + MlvmTestExecutor.launch(argumentParser, constructorArgs); + } + + protected static void launch(String[] args) { + MlvmTestExecutor.launch(args, null); + } + + protected static void launch(String[] args, Object[] constructorArgs) { + MlvmTestExecutor.launch(args, constructorArgs); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTestExecutor.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTestExecutor.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTestExecutor.java @@ -0,0 +1,488 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import java.lang.reflect.Constructor; +import java.util.List; + +import nsk.share.Consts; +import nsk.share.ArgumentParser; +import vm.share.ProcessUtils; +import vm.share.options.IgnoreUnknownArgumentsHandler; +import vm.share.options.OptionSupport; + +/** + * This class executes a test based on (a subclass of) either: + *

      + *
    • {@link vm.mlvm.share.MlvmTest} + *
    • {@link java.lang.Runnable} + *
    + * using a number of launch() methods. + * + * Command-line parameters are parsed and set to the instance fields of the test marked with {@literal@}Option/Options annotations. See {@link vm.share.options} framework for details. + * + * Arguments for test constructor can be passed as well. + * + * Additionally the launch() methods: + *
      + *
    • measures test run time + *
    • handles all test status passing methods (via boolean return value, via MlvmTest.markTestFailed() calls, exception thrown from overriden run() method) + *
    • optionally dumps heap after test execution if MlvmTest.setHeapDumpAfer(true) was called + *
    + * + * @see vm.mlvm.share.MlvmTest + * @see vm.share.options + * + */ +public class MlvmTestExecutor { + + /** + * The heap dump file name. If you call MlvmTest.setHeapDumpAfter(true), the heap is dumped into file + * specified by this constant when test finishes + */ + public static final String HEAP_DUMP_FILENAME = "heap.dump"; + + /** + * Launches MLVM test. + * Please see documentation for {@link #launch(Class testClass, Object[] constructorArgs)} method. + * + * This version of the method is a syntactic shugar to launch test in this way: + * + * + * public class MyTest extends MlvmTest { + * ... + * public static void main(String[] args) { + * MlvmTestExecutor.launch(new YourCustomArgumentParser(args)); + * } + * } + * + * + * @param args Command-line arguments, which are taken from supplied ArgumentParser (ArgumentParser is needed for compatibility with old tests) + and set to appropriate test instance fields using vm.share.options framework + * @see #launch(Class testClass, Object[] constructorArgs) + */ + public static void launch(ArgumentParser argumentParser) { + launch(argumentParser, null); + } + + /** + * Launches MLVM test. + * Please see documentation for {@link #launch(Class testClass, Object[] constructorArgs)} method. + * + * This version of the method is a syntactic shugar to launch test in this way: + * + * + * public class MyTest extends MlvmTest { + * ... + * public static void main(String[] args) { + * MlvmTestExecutor.launch(new YourCustomArgumentParser(args), new Object[] { constructor-arguments... }); + * } + * } + * + * + * @param args Command-line arguments, which are taken from supplied ArgumentParser (ArgumentParser is needed for compatibility with old tests) + and set to appropriate test instance fields using vm.share.options framework + * @param constructorArgs Arguments, which are parsed to test constructor + * @see #launch(Class testClass, Object[] constructorArgs) + */ + public static void launch(ArgumentParser argumentParser, Object[] constructorArgs) { + Env.init(argumentParser); + launch(constructorArgs); + } + + /** + * Launches MLVM test. + * Please see documentation for {@link #launch(Class testClass, Object[] constructorArgs)} method. + * + * This version of the method is a syntactic shugar to launch test in this way: + * + * + * public class MyTest extends MlvmTest { + * ... + * public static void main(String[] args) { + * MlvmTestExecutor.launch(args); + * } + * } + * + * + * @param args Command-line arguments, which are parsed using internal ArgumentParser (for compatibility with old tests) and also set to appropriate test instance fields using vm.share.options framework + * @see #launch(Class testClass, Object[] constructorArgs) + */ + public static void launch(String[] args) { + launch(args, null); + } + + /** + * Launches MLVM test. + * Please see documentation for {@link #launch(Class testClass, Object[] constructorArgs)} method. + * + * This version of the method is a syntactic shugar to launch test in this way: + * + * + * public class MyTest extends MlvmTest { + * ... + * public static void main(String[] args) { + * MlvmTestExecutor.launch(args, new Object[] { constructor-arguments... }); + * } + * } + * + * + * @param args Command-line arguments, which are parsed using internal ArgumentParser (for compatibility with old tests) and also set to appropriate test instance fields using vm.share.options framework + * @param constructorArgs Arguments, which are parsed to test constructor + * @see #launch(Class testClass, Object[] constructorArgs) + */ + public static void launch(String[] args, Object[] constructorArgs) { + Env.init(args); + launch(constructorArgs); + } + + /** + * Launches MLVM test. + * Please see documentation for {@link #launch(Class testClass, Object[] constructorArgs)} method. + * + * This version of the method is a syntactic shugar to launch test in this way: + * + * + * public class MyTest extends MlvmTest { + * ... + * void aMethod() { + * ... + * MlvmTestExecutor.launch(new Object[] { constructor-arguments... }); + * } + * } + * + * + * @param constructorArgs Arguments, which are parsed to test constructor + * @see #launch(Class testClass, Object[] constructorArgs) + */ + public static void launch(Object[] constructorArgs) { + Class testClass = getTestClassFromCallerStack(); + + if (testClass == null) { + throw new RuntimeException("TEST BUG: Can't find an instance of MlvmTest or Runnable in the stacktrace"); + } + + launch(testClass, constructorArgs); + } + + private static Class getTestClassFromCallerStack() { + try { + StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); + + // Elements of the stack trace: 0=Thread.getStackTrace(), 1rd=this method, 2nd=launch() method + // So we start searching from the most outer frame and finish searching at element 3 + for (int i = stackTrace.length - 1; i >= 3; --i) { + StackTraceElement e = stackTrace[i]; + Class klass = Class.forName(e.getClassName()); + if (MlvmTest.class.isAssignableFrom(klass)) { + return klass; + } + } + + return null; + } catch (ClassNotFoundException e) { + throw new RuntimeException("Unable to get Class object by its name either due to a different ClassLoader (a test bug) or JVM error", e); + } + } + + /** + * Launches MLVM test. The method is the principal MLVM test launcher. This method in conjunction with {@link #runMlvmTest} method: + *
      + *
    1. instantiates test class (optionally passing arguments to constructor) + *
    2. parses command-line arguments using vm.share.options framework and updates the appropriate test fields + *
    3. launches the tests + *
    4. handles all test status passing methods (see below) + *
    5. performs System.exit() with VM-testbase standard exit code 95 (success) or 97 (failure). + *
    + * + *

    The following tests status passing mechanism are available to test writer: + *

      + *
    1. Return a boolean value (true if test passed, false otherwise. Good for simple tests) + *
    2. Assume that test has failed by calling {@link MlvmTest#markTestFailed()} method (suitable for complex logic and multithreaded tests) + *
    3. by throwing exception from test {@link MlvmTest#run()} method + *
    + + *

    Additionally the launcher: + *

      + *
    • measures test run time and logs it + *
    • optionally dumps heap after test execution if {@link MlvmTest#setHeapDumpAfer(true)} was called + *
    • enables verbose logging on error + *
    + * + * @param testClass a class to instantiate. Has to be subclass of vm.mlvm.share.MlvmTest or java.lang.Runnable + * @param constructorArgs Arguments to pass to test constructor. Can be null. + * @see #runMlvmTest(Class testClass, Object[] constructorArgs) + */ + public static void launch(Class testClass, Object[] constructorArgs) { + Env.getLog().enableVerboseOnError(true); + + long startTime = System.currentTimeMillis(); + boolean passed; + try { + Env.traceDebug(MlvmTest.getName() + " class: " + testClass); + passed = runMlvmTest(testClass, constructorArgs); + } catch (Throwable e) { + Env.complain(e, MlvmTest.getName() + " caught an exception: "); + passed = false; + } + + long finishTime = System.currentTimeMillis(); + Env.traceNormal("The test took " + (finishTime - startTime) + " ms"); + + optionallyDumpHeap(); + + final String testNameUC = MlvmTest.getName().toUpperCase(); + if (passed) { + Env.display(testNameUC + " PASSED"); + System.exit(Consts.JCK_STATUS_BASE + Consts.TEST_PASSED); + } else { + Env.display(testNameUC + " FAILED"); + System.exit(Consts.JCK_STATUS_BASE + Consts.TEST_FAILED); + } + } + + private static void optionallyDumpHeap() { + try { + if (MlvmTest.getHeapDumpAfter()) { + ProcessUtils.dumpHeapWithHotspotDiagnosticMXBean(HEAP_DUMP_FILENAME); + } + } catch (Exception e) { + Env.traceNormal(e, "Error dumping heap: "); + } + } + + /** + * Launches MLVM test (syntatic shugar method). + * Calls {@link #runMlvmTest(Class testClass, Object[] constructorArgs)} method providing no arguments to pass to the test constructor. + * + * The method throws unchecked exception when there is an error in test logic or handling. + * Exceptions thrown from MlvmTest.run() method or test constructor are wrapped into java.lang.RuntimeException or java.lang.Error + * + * @param testClass a class to instantiate. Has to be subclass of vm.mlvm.share.MlvmTest or java.lang.Runnable + * @return true if test passed, false otherwise + * @see #runMlvmTest(Class testClass, Object[] constructorArgs) + */ + public static boolean runMlvmTest(Class testClass) { + return runMlvmTest(testClass, null); + } + + /** + * Launches MLVM test. In details, it: + *
      + *
    1. instantiates test class (optionally passing arguments to constructor) + *
    2. parses command-line arguments using vm.share.options framework and updates the appropriate test fields + *
    3. launches the tests + *
    4. handles all test status passing methods (see below) + *
    + * + *

    Unlike {@link #launch()} methods, it does NOT: + *

      + *
    • performs System.exit() with VM-testbase standard exit code 95 (success) or 97 (failure). + *
    • measures test run time and logs it + *
    • optionally dumps heap after test execution if {@link MlvmTest#setHeapDumpAfer(true)} was called + *
    • enables verbose logging on error + *
    + * Please see {@link #launch(Class testClass, Object[] constructorArgs)} for additional details. + * + * The method throws unchecked exception when there is an error in test logic or handling. + * Exceptions thrown from MlvmTest.run() method or test constructor are wrapped into java.lang.RuntimeException or java.lang.Error + * + * @param testClass a class to instantiate. Has to be subclass of vm.mlvm.share.MlvmTest or java.lang.Runnable + * @param constructorArgs Arguments to pass to test constructor. Can be null. + * @return true if test passed, false otherwise + * @see #launch(Class testClass, Object[] constructorArgs) + */ + public static boolean runMlvmTest(Class testClass, Object[] constructorArgs) { + boolean passed; + Throwable exception = null; + + try { + MlvmTest instance = constructMlvmTest(testClass, constructorArgs); + setupMlvmTest(instance); + + instance.initializeTest(); + + try { + passed = runMlvmTestInstance(instance); + } catch(Throwable e) { + exception = e; + passed = false; + } + + try { + instance.finalizeTest(passed); + } catch (Throwable e) { + Env.complain(e, "TEST BUG: exception thrown in finalizeTest"); + if (exception == null) { + exception = e; + } + passed = false; + } + + } catch (Throwable e) { + Env.complain(e, "TEST BUG: exception thrown when instantiating/preparing test for run"); + exception = e; + passed = false; // never really needed, but let's keep it + } + + if (exception != null) { + Env.throwAsUncheckedException(exception); // always throws + } + + return passed; + } + + private static void setupMlvmTest(MlvmTest instance) { + MlvmTest.setInstance(instance); + OptionSupport.setup(instance, Env.getArgParser().getRawArguments(), new IgnoreUnknownArgumentsHandler()); + instance.initRNG(); + } + + private static boolean runMlvmTestInstance(MlvmTest instance) throws Throwable { + List> expectedExceptions = instance.getRequiredExceptions(); + int runsCount = instance.getRunsNumber() * instance.getStressOptions().getRunsFactor(); + if (runsCount < 1) { + throw new RuntimeException("Runs number obtained via command-line options is less than 1"); + } + + int failedRuns = 0; + + try { + for (int run = 1; run <= runsCount; ++run) { + if (runsCount > 1) { + Env.traceNormal("TEST RUN " + run + "/" + runsCount + "; Failed " + failedRuns + " runs"); + } + + if (run > 1) { + instance.resetTest(); + } + + boolean instancePassed; + if (expectedExceptions.size() == 0) { + instancePassed = instance.run(); + } else { + try { + instance.run(); + Env.complain("Expected exceptions: " + expectedExceptions + ", but caught none"); + instancePassed = false; + } catch (Throwable e) { + if (checkExpectedException(expectedExceptions, e)) { + instancePassed = true; + } else { + Env.complain(e, "Expected exceptions: " + expectedExceptions + ", but caught: "); + instancePassed = false; + } + } + } + + if (instance.isMarkedFailed()) { + instancePassed = false; + } + + if (!instancePassed) { + ++failedRuns; + } + } + } finally { + if (failedRuns > 0) { + Env.complain("Failed runs: " + failedRuns + " of " + runsCount); + } + } + + return failedRuns == 0; + } + + private static Object constructTest(Class testClass, Object[] constructorArgs) throws Throwable { + if (constructorArgs == null || constructorArgs.length == 0) { + return testClass.newInstance(); + } + + for (Constructor c : testClass.getConstructors()) { + Class paramClasses[] = c.getParameterTypes(); + if (!parametersAreAssignableFrom(paramClasses, constructorArgs)) { + continue; + } + + return c.newInstance(constructorArgs); + } + + throw new RuntimeException("Test bug: in class " + testClass.getName() + " no appropriate constructor found for arguments " + constructorArgs); + } + + private static MlvmTest constructMlvmTest(Class testClass, Object[] constructorArgs) throws Throwable { + Object testObj = constructTest(testClass, constructorArgs); + + MlvmTest instance; + if (testObj instanceof MlvmTest) { + instance = (MlvmTest) testObj; + } else if (testObj instanceof Runnable) { + instance = new RunnableWrapper((Runnable) testObj); + } else { + // You can add wrapping of other types of tests here into MlvmTest if you need + throw new RuntimeException("TEST BUG: Test class should be subclass of MlvmTest or Runnable. Its type is " + + testObj.getClass().getName()); + } + + return instance; + } + + private static boolean parametersAreAssignableFrom(Class[] paramClasses, Object[] constructorArgs) { + if (paramClasses.length != constructorArgs.length) { + return false; + } + + for (int i = 0; i < paramClasses.length; ++i) { + if (!paramClasses[i].isAssignableFrom(constructorArgs[i].getClass())) { + return false; + } + } + + return true; + } + + private static boolean checkExpectedException(List> expectedExceptions, Throwable caught) throws Throwable { + for (Class expected : expectedExceptions) { + if (expected.isAssignableFrom(caught.getClass())) { + Env.traceNormal("Caught anticipated exception " + caught.getClass().getName() + ". Cause: " + caught.getCause()); + return true; + } + } + + return false; + } + + private static class RunnableWrapper extends MlvmTest { + private Runnable runnable; + + public RunnableWrapper(Runnable r) { + runnable = r; + } + + @Override + public boolean run() throws Throwable { + runnable.run(); + return true; + } + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MultiThreadedTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MultiThreadedTest.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MultiThreadedTest.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import vm.share.options.Option; + +import java.util.concurrent.CyclicBarrier; + + +public abstract class MultiThreadedTest extends MlvmTest { + + @Option(name = "threadsExtra", default_value = "1", + description = "Summand of absolute thread count that does not" + + " depend on CPU count") + private int threadsExtra; + + @Option(name = "threadsPerCpu", default_value = "0", + description = "Summand of absolute thread count that is multiplied" + + " by CPU count") + private int threadsPerCpu; + + protected MultiThreadedTest() { + // fields will be initialized later by the Option framework + } + + protected abstract boolean runThread(int threadNum) throws Throwable; + + protected int calcThreadNum() { + // TODO: multiply by StressThreadFactor: JDK-8142970 + return threadsPerCpu * Runtime.getRuntime().availableProcessors() + + threadsExtra; + } + + @Override + public boolean run() throws Throwable { + Thread.UncaughtExceptionHandler exHandler = (Thread t, Throwable e) -> { + markTestFailed("Exception in thread %s" + t.getName(), e); + }; + int threadNum = calcThreadNum(); + Env.traceNormal("Threads to start in this test: " + threadNum); + final CyclicBarrier startBarrier = new CyclicBarrier(threadNum + 1); + + Thread[] threads = new Thread[threadNum]; + for (int i = 0; i < threadNum; i++) { + final int ii = i; + threads[i] = new Thread(() -> { + boolean passed = false; + try { + startBarrier.await(); + if (runThread(ii)) { + passed = true; + } else { + Env.complain("Failed test in %s", + Thread.currentThread()); + } + } catch (Throwable e) { + Env.complain(e, "Caught exception in %s", + Thread.currentThread()); + } + if (!passed) { + markTestFailed("Thread " + Thread.currentThread() + + " failed"); + } + }); + threads[i].setUncaughtExceptionHandler(exHandler); + threads[i].start(); + } + + startBarrier.await(); + Env.traceNormal(threadNum + " threads have started"); + + for (int i = 0; i < threadNum; i++) { + threads[i].join(); + } + + Env.traceNormal("All threads have finished"); + return true; + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/Stratum.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/Stratum.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/Stratum.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface Stratum { + String stratumName() default ""; + String stratumSourceFileName() default ""; +} + diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/StratumClassesBuilder.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/StratumClassesBuilder.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/StratumClassesBuilder.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import jdk.test.lib.JDKToolLauncher; +import jdk.test.lib.Utils; +import jdk.test.lib.process.ProcessTools; +import nsk.share.jdi.sde.InstallSDE; +import vm.mlvm.tools.StratumAP; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.stream.Stream; + +public class StratumClassesBuilder { + public static void main(String[] args) { + Path root = testRoot(); + Arrays.stream(args) + .map(root::resolve) + .forEach(StratumClassesBuilder::build); + } + + private static void build(Path file) { + if (Files.notExists(file)) { + throw new Error("can't find " + file); + } + Path dst = Paths.get("bin") + .resolve("classes"); + mkdir(dst); + compile(file, dst); + if (file.getFileName().toString().contains("SDE_")) { + IndifiedClassesBuilder.main(dst.toAbsolutePath().toString()); + } + addStratum(dst); + } + + private static void mkdir(Path dst) { + try { + Files.createDirectories(dst); + } catch (IOException e) { + throw new Error("can't create dir " + dst, e); + } + } + + private static void compile(Path file, Path dst) { + JDKToolLauncher javac = JDKToolLauncher.create("javac") + .addToolArg("-d") + .addToolArg(dst.toString()) + .addToolArg("-cp") + .addToolArg(Utils.TEST_CLASS_PATH) + .addToolArg("-processor") + .addToolArg(StratumAP.class.getName()) + .addToolArg(file.toAbsolutePath().toString()); + + String[] command = javac.getCommand(); + try { + ProcessTools.executeCommand(command) + .shouldHaveExitValue(0); + } catch (Error | RuntimeException e) { + throw e; + } catch (Throwable e) { + throw new Error("execution of javac(" + Arrays.toString(command) + ") failed", e); + } + } + + private static void addStratum(Path dst) { + try (Stream files = Files.walk(dst)) { + files.map(Path::toAbsolutePath) + .filter(p -> p.getFileName().toString().contains("SDE_")) + .filter(p -> p.toString().endsWith(".class")) + .forEach(p -> { + try { + InstallSDE.install( + p.toFile(), + classToSmap(p).toFile(), + p.toFile(), + true); + } catch (IOException e) { + throw new Error("can't install sde for " + p); + } + }); + } catch (IOException e) { + throw new Error("can't traverse " + dst, e); + } + } + + private static Path classToSmap(Path file) { + String filename = file.getFileName().toString(); + return file.getParent() + .resolve(filename.replaceFirst("\\.class$", ".smap")); + } + + private static Path testRoot() { + Path p = Paths.get(Utils.TEST_SRC); + while (!Files.exists(p.resolve("TEST.ROOT"))) { + p = p.getParent(); + } + return p; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/TestSequence.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/TestSequence.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/TestSequence.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import java.util.Collection; + +public class TestSequence extends MlvmTest { + + private Collection> testClasses; + private boolean abortOnFirstFailure; + + TestSequence(Collection> testClasses, boolean abortOnFirstFailure) { + this.testClasses = testClasses; + this.abortOnFirstFailure = abortOnFirstFailure; + } + + @Override + public boolean run() throws Exception { + boolean areSomeTestsFailed = false; + Throwable exception = null; + for (Class c : this.testClasses) { + boolean hasTestPassed; + try { + hasTestPassed = MlvmTestExecutor.runMlvmTest(c); + } catch (Throwable e) { + hasTestPassed = false; + if (exception == null) { + exception = e; + } + } + if (!hasTestPassed) { + if (this.abortOnFirstFailure) { + if (exception != null) { + Env.throwAsUncheckedException(exception); + } + return false; + } else { + areSomeTestsFailed = true; + } + } + } + if (exception != null) { + Env.throwAsUncheckedException(exception); + } + return !areSomeTestsFailed; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/WhiteBoxHelper.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/WhiteBoxHelper.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/WhiteBoxHelper.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.InvocationTargetException; + +/** + * WhiteBoxHelper class obtains a MethodHandle to a method defined in sun.hotspot.WhiteBox class. + * If WhiteBox is not available or cannot be initialized, or the method is not available, + * it throws an appropriate exception. + * + * This class was introduced to avoid "hard link" to WhiteBox. + * + */ +public class WhiteBoxHelper { + + /** + * Obtains {@link java.lang.invoke.MethodHandle} to a method in sun.hotspot.WhiteBox class. + * If there is an error obtaining method handle, an exception is thrown. + * + * @param name Method name + * @type Method type + * @return {@link java.lang.invoke.MethodHandle} to the method. You can call it directly, WhiteBox instance is already bound to the handle. + * @throws IllegalAccessException if method cannot be accessed (see {@link java.lang.invoke.MethodHandles.Lookup#findStatic()} for details) + * @throws NoSuchMethodException if method cannot be found (see {@link java.lang.invoke.MethodHandles.Lookup#findStatic()} for details) + * @throws ClassNotFoundException if WhiteBox class cannot be loaded + * @throws InvocationTargetException if WhiteBox.getWhiteBox() method throws exception for some reason + */ + public static MethodHandle getMethod(String name, MethodType type) + throws IllegalAccessException, NoSuchMethodException, ClassNotFoundException, InvocationTargetException { + + Class wbClass = Class.forName("sun.hotspot.WhiteBox"); + MethodHandles.Lookup lu = MethodHandles.lookup(); + MethodHandle getWB = lu.findStatic(wbClass, "getWhiteBox", MethodType.methodType(wbClass)); + Object wb; + try { + wb = getWB.invoke(); + } catch (Throwable e) { + throw new InvocationTargetException(e, "Can't obtain WhiteBox instance"); + } + return lu.findVirtual(wbClass, name, type).bindTo(wb); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/ArgumentHandler.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/ArgumentHandler.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/ArgumentHandler.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share.jdi; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import vm.mlvm.share.jpda.Debuggee; +import vm.share.options.OptionDefinition; +import vm.share.options.OptionSupport; + +public class ArgumentHandler extends nsk.share.jdi.ArgumentHandler { + + public ArgumentHandler(String[] args) { + super(args); + } + + @Override + protected boolean checkOption(String option, String value) { + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/BreakpointInfo.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/BreakpointInfo.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/BreakpointInfo.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share.jdi; + +import java.util.List; + +import vm.mlvm.share.jpda.StratumInfo; + +import com.sun.jdi.request.BreakpointRequest; + +public class BreakpointInfo { + public static enum Type { + /** set breakpoint via BreakpointRequest */ + EXPLICIT, + /** + * don't set JDI breakpoint, verify that we can reach the location + * via stepping + */ + IMPLICIT + }; + + // Initial information + public Type type = Type.EXPLICIT; + public String className = ""; + public final String methodName; + public int methodLine = 0; + + /** Breakpoint stratum (JSR-045). null == default stratum */ + public StratumInfo stratumInfo = null; + + /** + * How many times this breakpoint should be hit. null == any number of + * hits + */ + public Integer requiredHits = null; + + /** How many steps do via StepRequest after reaching the breakpoint */ + public int stepsToTrace = 0; + + /** Conditional breakpoints should not be enabled by default */ + public final boolean isConditional; + + /** Sub-breakpoints */ + public List subBreakpoints = null; + + // Fields below are filled in by debugger + public long bci = -1; + public BreakpointRequest bpReq = null; + public int hits = 0; + + public BreakpointInfo(String methodName) { + this(methodName, false); + } + + public BreakpointInfo(String methodName, boolean isConditional) { + this.methodName = methodName; + this.isConditional = isConditional; + } + + public boolean isHit() { + if (requiredHits == null) { + return hits > 0; + } else { + return hits == requiredHits; + } + } + + @Override + public String toString() { + return className + "." + methodName + ":" + methodLine + "[bci=" + bci + ",bp=" + bpReq + "]"; + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/IndyDebuggee.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/IndyDebuggee.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/IndyDebuggee.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share.jdi; + +import vm.mlvm.share.jpda.INDIFY_SDE_DebuggeeBase; + +public class IndyDebuggee extends INDIFY_SDE_DebuggeeBase { + + public static void main(String... args) throws Throwable { launch(new ArgumentHandler(args)); } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/JDIBreakpointTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/JDIBreakpointTest.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/JDIBreakpointTest.java @@ -0,0 +1,512 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share.jdi; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import nsk.share.jdi.Binder; +import nsk.share.jdi.Debugee; +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; +import vm.mlvm.share.jpda.StratumUtils; +import vm.share.options.Option; + +import com.sun.jdi.AbsentInformationException; +import com.sun.jdi.IncompatibleThreadStateException; +import com.sun.jdi.LocalVariable; +import com.sun.jdi.Location; +import com.sun.jdi.Method; +import com.sun.jdi.ReferenceType; +import com.sun.jdi.StackFrame; +import com.sun.jdi.ThreadReference; +import com.sun.jdi.Value; +import com.sun.jdi.VirtualMachine; +import com.sun.jdi.event.BreakpointEvent; +import com.sun.jdi.event.ClassPrepareEvent; +import com.sun.jdi.event.Event; +import com.sun.jdi.event.EventIterator; +import com.sun.jdi.event.EventQueue; +import com.sun.jdi.event.EventSet; +import com.sun.jdi.event.StepEvent; +import com.sun.jdi.event.VMDisconnectEvent; +import com.sun.jdi.request.BreakpointRequest; +import com.sun.jdi.request.ClassPrepareRequest; +import com.sun.jdi.request.EventRequest; +import com.sun.jdi.request.EventRequestManager; +import com.sun.jdi.request.StepRequest; + +/** + * Option value syntax: + * + *
    + * breakpoints        := breakpoint breakpoints?
    + * breakpoint         := implicitOpt? methodName options? stratum? subBreakpoints?
    + *
    + * implicitOpt        := "~"
    + *
    + * methodName         := STRING
    + * methodName         := className "." STRING
    + * className          := STRING
    + *
    + * options            :=
    + * options            := ":" option options
    + * option             := lineOption | requiredHitsOption | stepsToTraceOption
    + * lineOption         := "L" INTEGER                                                     // Line number
    + * requiredHitsOption := "H" INTEGER | "H*"                                              // Required number of hits
    + * stepsToTraceOption  := "S" INTEGER                                                    // Steps to trace when this breakpoint is hit
    + *
    + * stratum            := "/" stratumName "=" stratumSourceName ":" stratumSourceLine     // Also check stratum information when this breakpoint is hit
    + * stratumName        := STRING
    + * stratumSourceName  := STRING
    + * stratumSourceLine  := INTEGER
    + *
    + * subBreakpoints := "=>(" breakpoints ")"                                               // subBreakpoints are only set when its main breakpoint is hit.
    + * 
    + */ + +public abstract class JDIBreakpointTest extends MlvmTest { + + @Option(name="debugger.debuggeeClass", default_value="", description="Debuggee class name") + public String _debuggeeClass = "DEBUGGEE-CLASS-NOT-DEFINED"; + + @Option(name="debugger.terminateWhenAllBPHit", default_value="", description="Hang up in specified point") + public boolean _terminateWhenAllBreakpointsHit; + + protected static int _jdiEventWaitTimeout = 3000; + + private static final int MAX_EVENT_COUNT = 50000; + + private static final int SHORT_STACK_TRACE_FRAMES_NUM = 2; + + protected VirtualMachine _vm; + protected EventQueue _eventQueue; + + private abstract static class BreakpointListIterator { + List _biList; + + public BreakpointListIterator(List biList) { + _biList = biList; + } + + public Object go() throws Throwable { + return iterate(_biList); + } + + public Object iterate(List biList) throws Throwable { + for ( BreakpointInfo bi : biList ) { + Object result = apply(bi); + if ( result != null ) + return result; + + if ( bi.subBreakpoints != null ) { + result = iterate(bi.subBreakpoints); + if ( result != null ) + return result; + } + } + + return null; + } + + protected abstract Object apply(BreakpointInfo bi) throws Throwable; + } + + protected String getDebuggeeClassName() throws Throwable { + String debuggeeClass = _debuggeeClass.trim(); + if ( debuggeeClass == null || debuggeeClass.isEmpty() ) + throw new Exception("Please specify debuggee class name"); + + return debuggeeClass; + } + + protected abstract List getBreakpoints(String debuggeeClassName); + + protected boolean getTerminateWhenAllBPHit() { + return _terminateWhenAllBreakpointsHit; + } + + protected void breakpointEventHook(BreakpointEvent bpe) {} + protected void stepEventHook(StepEvent se) {} + protected void classPrepareEventHook(ClassPrepareEvent cpe) {} + protected void eventHook(Event e) {} + + @Override + public boolean run() throws Throwable { + JDIBreakpointTest._jdiEventWaitTimeout = getArgumentParser().getWaitTime() * 60000; + + boolean terminateWhenAllBPHit = getTerminateWhenAllBPHit(); + + final String debuggeeClass = getDebuggeeClassName(); + + Binder binder = new Binder((ArgumentHandler) getArgumentParser(), getLog()); + + Debugee debuggee = binder.bindToDebugee(debuggeeClass); + if (debuggee == null) + throw new Exception("Can't launch debuggee"); + + debuggee.redirectOutput(getLog()); + + _vm = debuggee.VM(); + _eventQueue = _vm.eventQueue(); + EventRequestManager erm = _vm.eventRequestManager(); + + // Breakpoints + + final List breakpoints = getBreakpoints(debuggeeClass); + + final HashMap bpClassNames = new HashMap(); + + new BreakpointListIterator(breakpoints) { + @Override protected Object apply(BreakpointInfo bi) { + if ( bi.className.isEmpty() ) + bi.className = debuggeeClass; + bpClassNames.put(bi.className, null); + return null; + } + }.go(); + + for (String className : bpClassNames.keySet()) { + Env.traceNormal("Requesting ClassPrepareEvent for [" + className + "]"); + + ClassPrepareRequest cpReq = erm.createClassPrepareRequest(); + cpReq.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD); + cpReq.addClassFilter(className); + cpReq.enable(); + + bpClassNames.put(className, cpReq); + } + + _vm.resume(); + + StepRequest currentStepReq = null; + int stepsToTrace = 0; + int stepCount = 0; + boolean stop = false; + + EVENT_LOOP: while (!stop) { + EventIterator ei = getNextEvent(); + + Map currentLocations = new HashMap(); + + while (ei.hasNext()) { + Event e = ei.next(); + Env.traceVerbose("Got JDI event: " + e); + eventHook(e); + if (e instanceof VMDisconnectEvent) + break EVENT_LOOP; + + ThreadReference thread = null; + Location location = null; + boolean fullStackTrace = false; + + if (e instanceof ClassPrepareEvent) { + ClassPrepareEvent cpe = (ClassPrepareEvent) e; + classPrepareEventHook(cpe); + + ReferenceType classRef = cpe.referenceType(); + + setBreakpoints(erm, breakpoints, classRef); + + } else if (e instanceof BreakpointEvent) { + + BreakpointEvent bpe = (BreakpointEvent) e; + breakpointEventHook(bpe); + thread = bpe.thread(); + location = bpe.location(); + fullStackTrace = true; + + } else if (e instanceof StepEvent) { + + StepEvent se = (StepEvent) e; + stepEventHook(se); + thread = se.thread(); + location = se.location(); + } + + if (thread != null) { + try { + Env.traceDebug("Event thread suspends: " + thread.suspendCount()); + if (thread.suspendCount() > 0) + Env.traceDebug("Stack trace:" + getStackTraceStr(thread.frames(), fullStackTrace)); + + currentLocations.put(location, thread); + + } catch (IncompatibleThreadStateException ex) { + Env.traceNormal("Exception: ", ex); + } + } + + if (++stepCount > MAX_EVENT_COUNT) { + Env.display("Maximum number of events reached (" + + MAX_EVENT_COUNT + ") for this test. Exiting."); + stop = true; + } + } + + for (Map.Entry e : currentLocations.entrySet()) { + final Location location = e.getKey(); + final ThreadReference thread = e.getValue(); + + BreakpointInfo bpInfo = (BreakpointInfo) new BreakpointListIterator(breakpoints) { + @Override protected Object apply(BreakpointInfo bi) throws Throwable { + if ( location.method().name().equals(bi.methodName) && location.codeIndex() == bi.bci ) + return bi; + else + return null; + } + }.go(); + + int s = 0; + + if (bpInfo != null) { + Env.traceNormal("Execution hit our breakpoint: [" + bpInfo.methodName + ":" + bpInfo.methodLine + "] on step " + stepCount); + + bpInfo.hits++; + s = bpInfo.stepsToTrace; + + if (bpInfo.stratumInfo != null) { + if ( ! StratumUtils.checkStratum(location, bpInfo.stratumInfo) ) + markTestFailed("Stratum " + bpInfo.stratumInfo + " mismatch"); + } + + if ( bpInfo.subBreakpoints != null ) { + Env.traceNormal("Enabling sub-breakpoints"); + for ( BreakpointInfo subBP : bpInfo.subBreakpoints ) { + if ( subBP.type == BreakpointInfo.Type.IMPLICIT ) + continue; + + if ( subBP.bpReq == null ) { + Env.complain("Breakpoint " + subBP + " was not set. Skipping."); + continue; + } + + if ( subBP.bpReq.isEnabled() ) { + Env.traceVerbose("Breakpoint " + subBP + " is already enabled. Skipping."); + continue; + } + + subBP.bpReq.enable(); + } + } + + if ( terminateWhenAllBPHit && areAllBreakpointsHit(breakpoints) ) { + Env.traceNormal("All breakpoints are hit. Terminating."); + stop = true; + s = 0; + } + } + + if (s > 0) { + Env.traceVerbose("Stepping " + s + " step or breakpoint events from here"); + stepsToTrace = s; + + if (currentStepReq == null) { + currentStepReq = erm.createStepRequest(thread, StepRequest.STEP_LINE, StepRequest.STEP_INTO); + currentStepReq.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD); + currentStepReq.enable(); + } + } else { + if (currentStepReq != null && --stepsToTrace <= 0) { + Env.traceVerbose("Continue without stepping"); + erm.deleteEventRequest(currentStepReq); + currentStepReq = null; + } + } + } + + Env.traceDebug("Resuming execution"); + _vm.resume(); + } + + new BreakpointListIterator(breakpoints) { + @Override protected Object apply(BreakpointInfo bi) { + if (!bi.isHit()) { + markTestFailed("Breakpoint for method " + + bi.methodName + + ": required hits " + + (bi.requiredHits == null ? "> 0" : (" = " + bi.requiredHits)) + + "; actual hits = " + bi.hits); + } else { + Env.display("Breakpoint for method " + bi.methodName + " was hit " + bi.hits + " times. OK."); + } + + return null; + } + }.go(); + + if (!debuggee.terminated()) + debuggee.endDebugee(); + + debuggee.waitFor(); + return true; + } + + private void setBreakpoints( + final EventRequestManager erm, + final List breakpoints, + final ReferenceType classRef) + throws Throwable { + + Env.traceNormal("Setting breakpoints for class [" + classRef + "]"); + + new BreakpointListIterator(breakpoints) { + @Override + protected Object apply(BreakpointInfo bpInfo) throws Throwable { + if ( bpInfo.className.equals(classRef.name()) ) { + + List methods = classRef.methodsByName(bpInfo.methodName); + if (methods.size() == 0) + throw new Exception("No method named [" + bpInfo.methodName + "]"); + + Method method = (Method) methods.get(0); + List allLineLocations = method.allLineLocations(); + + Env.traceVerbose("Method [" + method.name() + "] locations: " + Arrays.toString(allLineLocations.toArray())); + + if (bpInfo.methodLine > allLineLocations.size()) + throw new Exception("TEST BUG: no breakpoint line " + bpInfo.methodLine); + + Location lineLocation = (Location) allLineLocations.get(bpInfo.methodLine); + bpInfo.bci = lineLocation.codeIndex(); + bpInfo.hits = 0; + + if ( bpInfo.type == BreakpointInfo.Type.EXPLICIT ) { + BreakpointRequest bpReq = erm.createBreakpointRequest(lineLocation); + // bpReq.addThreadFilter(mainThread); + bpReq.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD); + + if ( ! bpInfo.isConditional ) + bpReq.enable(); + + bpInfo.bpReq = bpReq; + Env.traceNormal("Breakpoint request for [" + method.name() + "]: " + bpReq); + } else { + Env.traceNormal("Implicit breakpoint " + "[" + bpInfo.methodName + ":" + bpInfo.methodLine + "]"); + } + + } + + return null; + } + }.go(); + } + + private static boolean areAllBreakpointsHit(List breakpoints) throws Throwable { + return null == new BreakpointListIterator(breakpoints) { + @Override + protected Object apply(BreakpointInfo bi) throws Throwable { + return bi.isHit() ? null : bi; + } + }.go(); + } + + public static String getStackTraceStr(List frames, boolean full) + throws AbsentInformationException { + StringBuffer buf = new StringBuffer(); + + int frameNum = 0; + for (StackFrame f : frames) { + Location l = f.location(); + + buf.append(String.format("#%-4d", frameNum)) + .append(l.method()) + .append("\n source: ") + .append(l.sourcePath()) + .append(":") + .append(l.lineNumber()) + .append("; bci=") + .append(l.codeIndex()) + .append("\n class: ") + .append(l.declaringType()) + .append("\n strata: ") + .append(StratumUtils.getStrataStr(f)) + .append("\n locals: "); + + try { + for (Map.Entry m : f.getValues(f.visibleVariables()).entrySet()) { + LocalVariable lv = m.getKey(); + buf.append("\n "); + + if (lv.isArgument()) { + buf.append("[arg] "); + } + buf.append(lv.name()) + .append(" (") + .append(lv.typeName()) + .append(") = [") + .append(m.getValue()) + .append("]; "); + } + } catch (AbsentInformationException e) { + buf.append("NO INFORMATION") + .append("\n arguments: "); + + List argumentValues = f.getArgumentValues(); + + if (argumentValues == null || argumentValues.size() == 0) { + buf.append("none"); + } else { + int n = 0; + for (Value v : argumentValues) { + buf.append("\n arg"); + + if (v == null) { + buf.append(n) + .append(" [null]"); + } else { + buf.append(n) + .append(" (") + .append(v.type()) + .append(") = [") + .append(v) + .append("]; "); + } + n++; + } + } + } + + buf.append("\n\n"); + + ++frameNum; + if (!full && frameNum >= SHORT_STACK_TRACE_FRAMES_NUM) { + buf.append("...\n"); + break; + } + } + return buf.toString(); + } + + protected EventIterator getNextEvent() throws Throwable { + EventSet eventSet = _eventQueue.remove(_jdiEventWaitTimeout); + if (eventSet == null) + throw new Exception("Timed out while waiting for an event"); + + return eventSet.eventIterator(); + } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/MHDebuggee.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/MHDebuggee.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/MHDebuggee.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share.jdi; + +import vm.mlvm.share.jpda.SDE_MHDebuggeeBase; + +public class MHDebuggee extends SDE_MHDebuggeeBase { + + public static void main(String... args) { launch(new ArgumentHandler(args)); } + +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/Debuggee.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/Debuggee.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/Debuggee.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share.jpda; + +import vm.mlvm.share.Env; +import vm.mlvm.share.MlvmTest; +import vm.share.options.Option; + +public abstract class Debuggee extends MlvmTest { + + @Option(name="debuggee.iterations", default_value="1", description="Iterations to run on debuggee") + public long _iterations = 1; + + @Option(name="debuggee.hangAt", default_value="", description="Hang up in specified point") + public String _hangAt = ""; + + static { + setName("Debuggee"); + } + + private boolean _isWarmingUp; + + public final boolean isWarmingUp() { + return _isWarmingUp; + } + + public final long getWarmupsCount() { + return _iterations; + } + + /** + * Used in static methods for getting access to Debuggee instance + * + * @return The current debuggee instance (there should be only one) + */ + public static Debuggee getDebuggeeInstance() { + return (Debuggee) MlvmTest.getInstance(); + } + + @Override + public boolean run() throws Throwable { + startUp(); + boolean result = false; + try { + + _isWarmingUp = true; + Env.traceNormal("Warming up (" + _iterations + " iterations)"); + for (long w = _iterations - 1; w > 0; w--) + warmUp(); + _isWarmingUp = false; + + Env.traceNormal("Starting main test"); + result = runDebuggee(); + + } finally { + tearDown(); + } + + return result; + } + + protected void startUp() throws Throwable { + } + + protected void warmUp() throws Throwable { + } + + protected abstract boolean runDebuggee() throws Throwable; + + protected void tearDown() throws Throwable { + } + + public final void hangUpIfNeeded(String at) throws InterruptedException { + if (!_isWarmingUp && at.equals(_hangAt)) { + Env.traceNormal("Hanging at " + at); + hangupImpl(); + } else { + if ( isWarmingUp() ) + Env.traceDebug("Passing " + at); + else + Env.traceNormal("Passing " + at); + } + } + + protected void hangupImpl() throws InterruptedException { + for (;;) + Thread.sleep(60000); + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/INDIFY_SDE_DebuggeeBase.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/INDIFY_SDE_DebuggeeBase.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/INDIFY_SDE_DebuggeeBase.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share.jpda; + +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; +import java.util.Arrays; + +import vm.mlvm.share.Env; +import vm.mlvm.share.Stratum; + +@Stratum(stratumName="Logo", stratumSourceFileName="INDIFY_SDE_DebuggeeBase.logo") +public class INDIFY_SDE_DebuggeeBase extends Debuggee { + + private static MethodType MT_bootstrap() { + return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); + } + + private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException { + return MethodHandles.lookup().findStatic( + INDIFY_SDE_DebuggeeBase.class, "bootstrap", MT_bootstrap()); + } + + private static MethodType MT_target() { + return MethodType.methodType(void.class, String.class); + } + + private static MethodHandle INDY_call; + + private static MethodHandle INDY_call() throws Throwable { + if (INDY_call != null) + return INDY_call; + + return ((CallSite) MH_bootstrap().invokeWithArguments( + MethodHandles.lookup(), "hello", MT_target())).dynamicInvoker(); + } + + private static Object bootstrap(Object l, Object n, Object t) throws Throwable { +Stratum_Logo_30_BOOTSTRAP: + Env.traceNormal("BSM called: " + Arrays.asList(new Object[] { l, n, t })); + getDebuggeeInstance().hangUpIfNeeded("bootstrap"); + return new ConstantCallSite(MethodHandles.lookup().findStatic( + INDIFY_SDE_DebuggeeBase.class, "target", MT_target())); + } + + public static void indyWrapper(String s) throws Throwable { +Stratum_Logo_20_INDY: + INDY_call().invokeExact(s); + } + + public static void target(String s) throws Throwable { + Debuggee d; +Stratum_Logo_40_TARGET: + d = getDebuggeeInstance(); + if ( d.isWarmingUp() ) + Env.traceDebug("Target called. Argument: [" + s + "]"); + else + Env.traceNormal("Target called. Argument: [" + s + "]"); + d.hangUpIfNeeded("target"); + } + + public static void stop() throws Throwable { +Stratum_Logo_50_END: + getDebuggeeInstance().hangUpIfNeeded("stop"); + } + + @Override + protected void warmUp() throws Throwable { + indyWrapper("warming up"); + } + + @Override + public boolean runDebuggee() throws Throwable { +Stratum_Logo_10_BEGIN: + indyWrapper("hello from main!"); + stop(); + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/SDE_MHDebuggeeBase.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/SDE_MHDebuggeeBase.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/SDE_MHDebuggeeBase.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share.jpda; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import vm.mlvm.meth.share.Argument; +import vm.mlvm.meth.share.MHTransformationGen; +import vm.mlvm.meth.share.RandomArgumentsGen; +import vm.mlvm.meth.share.transform.v2.MHMacroTF; +import vm.mlvm.share.Env; +import vm.mlvm.share.Stratum; + +@Stratum(stratumName="Logo", stratumSourceFileName="SDE_MHDebuggeeBase.logo") +public class SDE_MHDebuggeeBase extends Debuggee { + + private static final int ARG_NUM = 0; + + private MethodHandle _mh; + public int _mhInvoked; + public int _mhTargetInvoked; + public int _plainInvoked; + public int _plainTargetInvoked; + + public Object plainTarget(int i, String s, Float f) throws Throwable { +Stratum_Logo_50_PLAIN: + _plainTargetInvoked++; + hangUpIfNeeded("plainTarget"); + return null; + } + + private static Float f = 1.0F; + + public Object warmupPlain() throws Throwable { + return plainTarget(1, "abc", f); + } + + public Object invokePlain() throws Throwable { + Object o; +Stratum_Logo_40_INVOKE_PLAIN: + o = plainTarget(1, "abc", f); + _plainInvoked++; + return o; + } + + public Object mhTarget(int i, String s, Float f) throws Throwable { +Stratum_Logo_30_MH: + hangUpIfNeeded("mhTarget"); + _mhTargetInvoked++; + return null; + } + + public Object warmupMH() throws Throwable { + return _mh.invokeExact(); + } + + public Object invokeMH() throws Throwable { + Object o; +Stratum_Logo_20_INVOKE_MH: + o = _mh.invokeExact(); + _mhInvoked++; + return o; + } + + public void stop() throws InterruptedException { +Stratum_Logo_60_END: + hangUpIfNeeded("stop"); + } + + @Override + public void startUp() throws Throwable { + final MethodHandle mh = MethodHandles.lookup().findVirtual( + SDE_MHDebuggeeBase.class, + "mhTarget", + MethodType.methodType(Object.class, int.class, String.class, + Float.class)); + + MHMacroTF sequence = MHTransformationGen.createSequence( + new Argument(Object.class, null), this, mh, + RandomArgumentsGen.createRandomArgs(true, mh.type())); + + MHTransformationGen.transformToMatchArgsNum(sequence, ARG_NUM, ARG_NUM); + + _mh = sequence.computeInboundCall().getTargetMH(); + } + + @Override + public void warmUp() throws Throwable { + warmupMH(); + warmupPlain(); + } + + @Override + public boolean runDebuggee() throws Throwable { +Stratum_Logo_10_BEGIN: + invokeMH(); + invokePlain(); + stop(); + + Env.traceNormal("MH target invoked = " + _mhTargetInvoked + "\n" + + "MH invoked = " + _mhInvoked + "\n" + + "Plain target invoked = " + _plainTargetInvoked + "\n" + + "Plain invoked = " + _plainInvoked); + + long targetInvocationCount = getWarmupsCount(); + return _mhInvoked == 1 && _plainInvoked == 1 + && _mhTargetInvoked == targetInvocationCount + && _plainTargetInvoked == targetInvocationCount; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/StratumInfo.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/StratumInfo.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/StratumInfo.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share.jpda; + +public class StratumInfo { + public final String stratum; + public final String stratumSourceName; + public final int stratumSourceLine; + + public StratumInfo(String stratum, String stratumSourceName, int stratumSourceLine) { + this.stratum = stratum; + this.stratumSourceName = stratumSourceName; + this.stratumSourceLine = stratumSourceLine; + } + + @Override + public String toString() { + return this.stratum + "=[" + this.stratumSourceName + ":" + this.stratumSourceLine + "]"; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/StratumUtils.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/StratumUtils.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/StratumUtils.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.share.jpda; + +import nsk.share.ArgumentParser; +import vm.mlvm.share.Env; + +import com.sun.jdi.AbsentInformationException; +import com.sun.jdi.Location; +import com.sun.jdi.ObjectReference; +import com.sun.jdi.ReferenceType; +import com.sun.jdi.StackFrame; + +public class StratumUtils { + + public static boolean checkStratum(Location location, StratumInfo si) throws AbsentInformationException { + // Check stratum information + try { + Env.traceVerbose(String.format("Stratum [%s]: required=[%s:%d]", si.stratum, si.stratumSourceName, si.stratumSourceLine)); + Env.traceVerbose(String.format("Default stratum: location=[%s:%d]", location.sourceName(), location.lineNumber())); + + String stratumSourceName = location.sourceName(si.stratum); + int stratumSourceLine = location.lineNumber(si.stratum); + String stratumInfo = String.format("actual=[%s:%d]", stratumSourceName, stratumSourceLine); + + if (stratumSourceName.equals(si.stratumSourceName) && stratumSourceLine == si.stratumSourceLine) { + Env.traceVerbose("Stratum matches: " + stratumInfo); + return true; + } else { + Env.complain("Stratum mismatch: " + stratumInfo); + return false; + } + } catch (AbsentInformationException e) { + Env.complain(e, "Strata information is absent. Available strata: " + getStrataStr(location.declaringType())); + + return false; + } + } + + public static StratumInfo parseStratumInfo(String stratumInfo) throws Exception { + int sourceNamePos = stratumInfo.indexOf('='); + int sourceLinePos = stratumInfo.indexOf(':'); + + if (sourceNamePos == -1 || sourceLinePos == -1 || sourceNamePos >= sourceLinePos) { + throw new ArgumentParser.BadOption("Wrong syntax of stratum information: [" + stratumInfo + "]"); + } + + return new StratumInfo( + stratumInfo.substring(0, sourceNamePos), + stratumInfo.substring(sourceNamePos + 1, sourceLinePos), + Integer.parseInt(stratumInfo.substring(sourceLinePos + 1))); + } + + public static String getStrataStr(StackFrame sf) { + ObjectReference thisObject = sf.thisObject(); + if (thisObject == null) + return "(no strata)"; + return StratumUtils.getStrataStr(thisObject.referenceType()); + } + + public static String getStrataStr(ReferenceType ref) { + return ref.availableStrata() + " (" + ref + ")"; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/mlvmJvmtiUtils.c b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/mlvmJvmtiUtils.c new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/mlvmJvmtiUtils.c @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include +#include "jvmti.h" +#include "agent_common.h" +#include "JVMTITools.h" +#include "jvmti_tools.h" +#include "mlvmJvmtiUtils.h" + +void copyFromJString(JNIEnv * pEnv, jstring src, char ** dst) { + const char * pStr; + jsize len; + + if ( ! NSK_VERIFY((pStr = NSK_CPP_STUB3(GetStringUTFChars, pEnv, src, NULL)) != NULL) ) { + return; + } + + len = NSK_CPP_STUB2(GetStringUTFLength, pEnv, src) + 1; + *dst = malloc(len); + strncpy(*dst, pStr, len); + + NSK_CPP_STUB3(ReleaseStringUTFChars, pEnv, src, pStr); +} + +struct MethodName * getMethodName(jvmtiEnv * pJvmtiEnv, jmethodID method) { + char * szName; + char * szSignature; + jclass clazz; + struct MethodName * mn; + + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB5(GetMethodName, pJvmtiEnv, method, &szName, NULL, NULL)) ) { + return NULL; + } + + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(GetMethodDeclaringClass, pJvmtiEnv, method, &clazz)) ) { + NSK_JVMTI_VERIFY(NSK_CPP_STUB2(Deallocate, pJvmtiEnv, (void *) szName)); + return NULL; + } + + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB4(GetClassSignature, pJvmtiEnv, clazz, &szSignature, NULL)) ) { + NSK_JVMTI_VERIFY(NSK_CPP_STUB2(Deallocate, pJvmtiEnv, (void *) szName)); + return NULL; + } + + mn = malloc(sizeof(MethodNameStruct)); + strncpy(mn->methodName, szName, sizeof(mn->methodName)); + strncpy(mn->classSig, szSignature, sizeof(mn->classSig)); + + NSK_JVMTI_VERIFY(NSK_CPP_STUB2(Deallocate, pJvmtiEnv, (void *) szName)); + NSK_JVMTI_VERIFY(NSK_CPP_STUB2(Deallocate, pJvmtiEnv, (void *) szSignature)); + return mn; +} + +char * locationToString(jvmtiEnv * pJvmtiEnv, jmethodID method, jlocation location) { + struct MethodName * pMN; + // gcc 7.3 claims that snprintf below can output between 6 and 531 bytes. Setting buffer size to 600. + char r[600]; + + pMN = getMethodName(pJvmtiEnv, method); + if ( ! pMN ) + return strdup("NONE"); + + snprintf(r, sizeof(r), "%s .%s :%lx", pMN->classSig, pMN->methodName, (long) location); + + free(pMN); + + return strdup(r); +} + +void * getTLS(jvmtiEnv * pJvmtiEnv, jthread thread, jsize sizeToAllocate) { + void * tls; + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(GetThreadLocalStorage, pJvmtiEnv, thread, &tls)) ) + return NULL; + + if ( ! tls) { + if ( ! NSK_VERIFY((tls = malloc(sizeToAllocate)) != NULL) ) + return NULL; + + memset(tls, 0, sizeToAllocate); + + if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetThreadLocalStorage, pJvmtiEnv, thread, tls)) ) + return NULL; + } + + return tls; +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/mlvmJvmtiUtils.h b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/mlvmJvmtiUtils.h new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/mlvmJvmtiUtils.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef MLVMJVMTIUTILS_H_ +#define MLVMJVMTIUTILS_H_ + +#include "jvmti.h" + +void copyFromJString(JNIEnv * pEnv, jstring src, char ** dst); + +struct MethodName { + char methodName[256]; + char classSig[256]; +} MethodNameStruct; + +struct MethodName * getMethodName(jvmtiEnv * pJvmtiEnv, jmethodID method); + +char * locationToString(jvmtiEnv * pJvmtiEnv, jmethodID method, jlocation location); + +void * getTLS(jvmtiEnv * pJvmtiEnv, jthread thread, jsize sizeToAllocate); + +#endif /* MLVMJVMTIUTILS_H_ */ diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/Indify.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/Indify.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/Indify.java @@ -0,0 +1,1858 @@ +/* + * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.tools; + +import java.util.*; +import java.io.*; +import java.lang.reflect.Modifier; +import java.util.regex.*; + +/** + * Transform one or more class files to incorporate JSR 292 features, + * such as {@code invokedynamic}. + *

    + * This is a standalone program in a single source file. + * In this form, it may be useful for test harnesses, small experiments, and javadoc examples. + * Copies of this file may show up in multiple locations for standalone usage. + *

    + * Static private methods named MH_x and MT_x (where x is arbitrary) + * must be stereotyped generators of MethodHandle and MethodType + * constants. All calls to them are transformed to {@code CONSTANT_MethodHandle} + * and {@code CONSTANT_MethodType} "ldc" instructions. + * The stereotyped code must create method types by calls to {@code methodType} or + * {@code fromMethodDescriptorString}. The "lookup" argument must be created + * by calls to {@code java.lang.invoke.MethodHandles#lookup MethodHandles.lookup}. + * The class and string arguments must be constant. + * The following methods of {@code java.lang.invoke.MethodHandle.Lookup Lookup} are + * allowed for method handle creation: {@code findStatic}, {@code findVirtual}, + * {@code findConstructor}, {@code findSpecial}, + * {@code findGetter}, {@code findSetter}, + * {@code findStaticGetter}, or {@code findStaticSetter}. + * The call to one of these methods must be followed immediately + * by an {@code areturn} instruction. + * The net result of the call to the MH_x or MT_x method must be + * the creation of a constant method handle. Thus, replacing calls + * to MH_x or MT_x methods by {@code ldc} instructions should leave + * the meaning of the program unchanged. + *

    + * Static private methods named INDY_x must be stereotyped generators + * of {@code invokedynamic} call sites. + * All calls to them must be immediately followed by + * {@code invokeExact} calls. + * All such pairs of calls are transformed to {@code invokedynamic} + * instructions. Each INDY_x method must begin with a call to a + * MH_x method, which is taken to be its bootstrap method. + * The method must be immediately invoked (via {@code invokeGeneric} + * on constant lookup, name, and type arguments. An object array of + * constants may also be appended to the {@code invokeGeneric call}. + * This call must be cast to {@code CallSite}, and the result must be + * immediately followed by a call to {@code dynamicInvoker}, with the + * resulting method handle returned. + *

    + * The net result of all of these actions is equivalent to the JVM's + * execution of an {@code invokedynamic} instruction in the unlinked state. + * Running this code once should produce the same results as running + * the corresponding {@code invokedynamic} instruction. + * In order to model the caching behavior, the code of an INDY_x + * method is allowed to begin with getstatic, aaload, and if_acmpne + * instructions which load a static method handle value and return it + * if the value is non-null. + *

    + * Example usage: + *

    +$ JAVA_HOME=(some recent OpenJDK 7 build)
    +$ ant
    +$ $JAVA_HOME/bin/java -cp build/classes indify.Indify --overwrite --dest build/testout build/classes/indify/Example.class
    +$ $JAVA_HOME/bin/java -cp build/classes indify.Example
    +MT = (java.lang.Object)java.lang.Object
    +MH = adder(int,int)java.lang.Integer
    +adder(1,2) = 3
    +calling indy:  42
    +$ $JAVA_HOME/bin/java -cp build/testout indify.Example
    +(same output as above)
    + * 
    + *

    + * Until the format of {@code CONSTANT_InvokeDynamic} entries is finalized, + * the {@code --transitionalJSR292} switch is recommended (and turned on by default). + *

    + * A version of this transformation built on top of http://asm.ow2.org/ would be welcome. + */ +@SuppressWarnings("unchecked") +public class Indify { + public static void main(String... av) throws IOException { + new Indify().run(av); + } + + public File dest; + public String[] classpath = {"."}; + public boolean keepgoing = false; + public boolean expandProperties = false; + public boolean overwrite = false; + public boolean quiet = false; + public boolean verbose = false; + public boolean transitionalJSR292 = true; // default to false later + public boolean all = false; + public int verifySpecifierCount = -1; + + public void run(String... av) throws IOException { + List avl = new ArrayList<>(Arrays.asList(av)); + parseOptions(avl); + if (avl.isEmpty()) + throw new IllegalArgumentException("Usage: indify [--dest dir] [option...] file..."); + if ("--java".equals(avl.get(0))) { + avl.remove(0); + try { + runApplication(avl.toArray(new String[0])); + } catch (Exception ex) { + if (ex instanceof RuntimeException) throw (RuntimeException) ex; + throw new RuntimeException(ex); + } + return; + } + Exception err = null; + for (String a : avl) { + try { + indify(a); + } catch (Exception ex) { + if (err == null) err = ex; + System.err.println("failure on "+a); + if (!keepgoing) break; + } + } + if (err != null) { + if (err instanceof IOException) throw (IOException) err; + throw (RuntimeException) err; + } + } + + /** Execute the given application under a class loader which indifies all application classes. */ + public void runApplication(String... av) throws Exception { + List avl = new ArrayList<>(Arrays.asList(av)); + String mainClassName = avl.remove(0); + av = avl.toArray(new String[0]); + Class mainClass = Class.forName(mainClassName, true, makeClassLoader()); + java.lang.reflect.Method main = mainClass.getMethod("main", String[].class); + main.invoke(null, (Object) av); + } + + public void parseOptions(List av) throws IOException { + for (; !av.isEmpty(); av.remove(0)) { + String a = av.get(0); + if (a.startsWith("-")) { + String a2 = null; + int eq = a.indexOf('='); + if (eq > 0) { + a2 = maybeExpandProperties(a.substring(eq+1)); + a = a.substring(0, eq+1); + } + switch (a) { + case "--java": + return; // keep this argument + case "-d": case "--dest": case "-d=": case "--dest=": + dest = new File(a2 != null ? a2 : maybeExpandProperties(av.remove(1))); + break; + case "-cp": case "--classpath": + classpath = maybeExpandProperties(av.remove(1)).split("["+File.pathSeparatorChar+"]"); + break; + case "-k": case "--keepgoing": case "--keepgoing=": + keepgoing = booleanOption(a2); // print errors but keep going + break; + case "--expand-properties": case "--expand-properties=": + expandProperties = booleanOption(a2); // expand property references in subsequent arguments + break; + case "--verify-specifier-count": case "--verify-specifier-count=": + verifySpecifierCount = Integer.valueOf(a2); + break; + case "--overwrite": case "--overwrite=": + overwrite = booleanOption(a2); // overwrite output files + break; + case "--all": case "--all=": + all = booleanOption(a2); // copy all classes, even if no patterns + break; + case "-q": case "--quiet": case "--quiet=": + quiet = booleanOption(a2); // less output + break; + case "-v": case "--verbose": case "--verbose=": + verbose = booleanOption(a2); // more output + break; + case "--transitionalJSR292": case "--transitionalJSR292=": + transitionalJSR292 = booleanOption(a2); // use older invokedynamic format + break; + default: + throw new IllegalArgumentException("unrecognized flag: "+a); + } + continue; + } else { + break; + } + } + if (dest == null && !overwrite) + throw new RuntimeException("no output specified; need --dest d or --overwrite"); + if (expandProperties) { + for (int i = 0; i < av.size(); i++) + av.set(i, maybeExpandProperties(av.get(i))); + } + } + + private boolean booleanOption(String s) { + if (s == null) return true; + switch (s) { + case "true": case "yes": case "1": return true; + case "false": case "no": case "0": return false; + } + throw new IllegalArgumentException("unrecognized boolean flag="+s); + } + + private String maybeExpandProperties(String s) { + if (!expandProperties) return s; + Set propsDone = new HashSet<>(); + while (s.contains("${")) { + int lbrk = s.indexOf("${"); + int rbrk = s.indexOf('}', lbrk); + if (rbrk < 0) break; + String prop = s.substring(lbrk+2, rbrk); + if (!propsDone.add(prop)) break; + String value = System.getProperty(prop); + if (verbose) System.err.println("expanding ${"+prop+"} => "+value); + if (value == null) break; + s = s.substring(0, lbrk) + value + s.substring(rbrk+1); + } + return s; + } + + public void indify(String a) throws IOException { + File f = new File(a); + String fn = f.getName(); + if (fn.endsWith(".class") && f.isFile()) + indifyFile(f, dest); + else if (fn.endsWith(".jar") && f.isFile()) + indifyJar(f, dest); + else if (f.isDirectory()) + indifyTree(f, dest); + else if (!keepgoing) + throw new RuntimeException("unrecognized file: "+a); + } + + private void ensureDirectory(File dir) { + if (dir.mkdirs() && !quiet) + System.err.println("created "+dir); + } + + public void indifyFile(File f, File dest) throws IOException { + if (verbose) System.err.println("reading "+f); + ClassFile cf = new ClassFile(f); + Logic logic = new Logic(cf); + boolean changed = logic.transform(); + logic.reportPatternMethods(quiet, keepgoing); + if (changed || all) { + File outfile; + if (dest != null) { + ensureDirectory(dest); + outfile = classPathFile(dest, cf.nameString()); + } else { + outfile = f; // overwrite input file, no matter where it is + } + cf.writeTo(outfile); + if (!quiet) System.err.println("wrote "+outfile); + } + } + + File classPathFile(File pathDir, String className) { + String qualname = className+".class"; + qualname = qualname.replace('/', File.separatorChar); + return new File(pathDir, qualname); + } + + public void indifyJar(File f, Object dest) throws IOException { + throw new UnsupportedOperationException("Not yet implemented"); + } + + public void indifyTree(File f, File dest) throws IOException { + if (verbose) System.err.println("reading directory: "+f); + for (File f2 : f.listFiles(new FilenameFilter() { + public boolean accept(File dir, String name) { + if (name.endsWith(".class")) return true; + if (name.contains(".")) return false; + // return true if it might be a package name: + return Character.isJavaIdentifierStart(name.charAt(0)); + }})) { + if (f2.getName().endsWith(".class")) + indifyFile(f2, dest); + else if (f2.isDirectory()) + indifyTree(f2, dest); + } + } + + public ClassLoader makeClassLoader() { + return new Loader(); + } + private class Loader extends ClassLoader { + Loader() { + this(Indify.class.getClassLoader()); + } + Loader(ClassLoader parent) { + super(parent); + } + public Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + File f = findClassInPath(name); + if (f != null) { + try { + Class c = transformAndLoadClass(f); + if (c != null) { + if (resolve) resolveClass(c); + return c; + } + } catch (Exception ex) { + if (ex instanceof IllegalArgumentException) + // pass error from reportPatternMethods + throw (IllegalArgumentException) ex; + } + } + return super.loadClass(name, resolve); + } + private File findClassInPath(String name) { + for (String s : classpath) { + File f = classPathFile(new File(s), name); + if (f.exists() && f.canRead()) { + return f; + } + } + return null; + } + protected Class findClass(String name) throws ClassNotFoundException { + try { + return transformAndLoadClass(findClassInPath(name)); + } catch (IOException ex) { + throw new ClassNotFoundException("IO error", ex); + } + } + private Class transformAndLoadClass(File f) throws ClassNotFoundException, IOException { + if (verbose) System.out.println("Loading class from "+f); + ClassFile cf = new ClassFile(f); + Logic logic = new Logic(cf); + boolean changed = logic.transform(); + if (verbose && !changed) System.out.println("(no change)"); + logic.reportPatternMethods(!verbose, keepgoing); + byte[] bytes = cf.toByteArray(); + return defineClass(null, bytes, 0, bytes.length); + } + } + + private class Logic { + // Indify logic, per se. + ClassFile cf; + final char[] poolMarks; + final Map constants = new HashMap<>(); + final Map indySignatures = new HashMap<>(); + Logic(ClassFile cf) { + this.cf = cf; + poolMarks = new char[cf.pool.size()]; + } + boolean transform() { + if (!initializeMarks()) return false; + if (!findPatternMethods()) return false; + Pool pool = cf.pool; + //for (Constant c : cp) System.out.println(" # "+c); + for (Method m : cf.methods) { + if (constants.containsKey(m)) continue; // don't bother + // Transform references. + int blab = 0; + for (Instruction i = m.instructions(); i != null; i = i.next()) { + if (i.bc != opc_invokestatic) continue; + int methi = i.u2At(1); + if (poolMarks[methi] == 0) continue; + Short[] ref = pool.getMemberRef((short)methi); + Method conm = findMember(cf.methods, ref[1], ref[2]); + if (conm == null) continue; + Constant con = constants.get(conm); + if (con == null) continue; + if (blab++ == 0 && !quiet) + System.err.println("patching "+cf.nameString()+"."+m); + //if (blab == 1) { for (Instruction j = m.instructions(); j != null; j = j.next()) System.out.println(" |"+j); } + if (con.tag == CONSTANT_InvokeDynamic || + con.tag == CONSTANT_InvokeDynamic_17) { + // need to patch the following instruction too, + // but there are usually intervening argument pushes too + Instruction i2 = findPop(i); + Short[] ref2 = null; + short ref2i = 0; + if (i2 != null && i2.bc == opc_invokevirtual && + poolMarks[(char)(ref2i = (short) i2.u2At(1))] == 'D') + ref2 = pool.getMemberRef(ref2i); + if (ref2 == null || !"invokeExact".equals(pool.getString(ref2[1]))) { + System.err.println(m+": failed to create invokedynamic at "+i.pc); + continue; + } + String invType = pool.getString(ref2[2]); + String bsmType = indySignatures.get(conm); + if (!invType.equals(bsmType)) { + System.err.println(m+": warning: "+conm+" call type and local invoke type differ: " + +bsmType+", "+invType); + } + assert(i.len == 3 || i2.len == 3); + if (!quiet) System.err.println(i+" "+conm+";...; "+i2+" => invokedynamic "+con); + int start = i.pc + 3, end = i2.pc; + System.arraycopy(i.codeBase, start, i.codeBase, i.pc, end-start); + i.forceNext(0); // force revisit of new instruction + i2.u1AtPut(-3, opc_invokedynamic); + i2.u2AtPut(-2, con.index); + i2.u2AtPut(0, (short)0); + i2.u1AtPut(2, opc_nop); + //System.out.println(new Instruction(i.codeBase, i2.pc-3)); + } else { + if (!quiet) System.err.println(i+" "+conm+" => ldc "+con); + assert(i.len == 3); + i.u1AtPut(0, opc_ldc_w); + i.u2AtPut(1, con.index); + } + } + //if (blab >= 1) { for (Instruction j = m.instructions(); j != null; j = j.next()) System.out.println(" |"+j); } + } + cf.methods.removeAll(constants.keySet()); + return true; + } + + // Scan forward from the instruction to find where the stack p + // below the current sp at the instruction. + Instruction findPop(Instruction i) { + //System.out.println("findPop from "+i); + Pool pool = cf.pool; + JVMState jvm = new JVMState(); + decode: + for (i = i.clone().next(); i != null; i = i.next()) { + String pops = INSTRUCTION_POPS[i.bc]; + //System.out.println(" "+i+" "+jvm.stack+" : "+pops.replace("$", " => ")); + if (pops == null) break; + if (jvm.stackMotion(i.bc)) continue decode; + if (pops.indexOf('Q') >= 0) { + Short[] ref = pool.getMemberRef((short) i.u2At(1)); + String type = simplifyType(pool.getString(CONSTANT_Utf8, ref[2])); + switch (i.bc) { + case opc_getstatic: + case opc_getfield: + case opc_putstatic: + case opc_putfield: + pops = pops.replace("Q", type); + break; + default: + if (!type.startsWith("(")) + throw new InternalError(i.toString()); + pops = pops.replace("Q$Q", type.substring(1).replace(")","$")); + break; + } + //System.out.println("special type: "+type+" => "+pops); + } + int npops = pops.indexOf('$'); + if (npops < 0) throw new InternalError(); + if (npops > jvm.sp()) return i; + List args = jvm.args(npops); + int k = 0; + for (Object x : args) { + char have = (Character) x; + char want = pops.charAt(k++); + if (have == 'X' || want == 'X') continue; + if (have != want) break decode; + } + if (pops.charAt(k++) != '$') break decode; + args.clear(); + while (k < pops.length()) + args.add(pops.charAt(k++)); + } + System.err.println("*** bailout on jvm: "+jvm.stack+" "+i); + return null; + } + + boolean findPatternMethods() { + boolean found = false; + for (char mark : "THI".toCharArray()) { + for (Method m : cf.methods) { + if (!Modifier.isPrivate(m.access)) continue; + if (!Modifier.isStatic(m.access)) continue; + if (nameAndTypeMark(m.name, m.type) == mark) { + Constant con = scanPattern(m, mark); + if (con == null) continue; + constants.put(m, con); + found = true; + } + } + } + return found; + } + + void reportPatternMethods(boolean quietly, boolean allowMatchFailure) { + if (!quietly && !constants.keySet().isEmpty()) + System.err.println("pattern methods removed: "+constants.keySet()); + for (Method m : cf.methods) { + if (nameMark(cf.pool.getString(m.name)) != 0 && + constants.get(m) == null) { + String failure = "method has special name but fails to match pattern: "+m; + if (!allowMatchFailure) + throw new IllegalArgumentException(failure); + else if (!quietly) + System.err.println("warning: "+failure); + } + } + if (verifySpecifierCount >= 0) { + List specs = bootstrapMethodSpecifiers(false); + int specsLen = (specs == null ? 0 : specs.size()); + if (specsLen != verifySpecifierCount) { + throw new IllegalArgumentException("BootstrapMethods length is "+specsLen+" but should be "+verifySpecifierCount); + } + } + } + + // mark constant pool entries according to participation in patterns + boolean initializeMarks() { + boolean changed = false; + for (;;) { + boolean changed1 = false; + int cpindex = -1; + for (Constant e : cf.pool) { + ++cpindex; + if (e == null) continue; + char mark = poolMarks[cpindex]; + if (mark != 0) continue; + switch (e.tag) { + case CONSTANT_Utf8: + mark = nameMark(e.itemString()); break; + case CONSTANT_NameAndType: + mark = nameAndTypeMark(e.itemIndexes()); break; + case CONSTANT_Class: { + int n1 = e.itemIndex(); + char nmark = poolMarks[(char)n1]; + if ("DJ".indexOf(nmark) >= 0) + mark = nmark; + break; + } + case CONSTANT_Field: + case CONSTANT_Method: { + Short[] n12 = e.itemIndexes(); + short cl = n12[0]; + short nt = n12[1]; + char cmark = poolMarks[(char)cl]; + if (cmark != 0) { + mark = cmark; // it is a java.lang.invoke.* or java.lang.* method + break; + } + String cls = cf.pool.getString(CONSTANT_Class, cl); + if (cls.equals(cf.nameString())) { + switch (poolMarks[(char)nt]) { + // it is a private MH/MT/INDY method + case 'T': case 'H': case 'I': + mark = poolMarks[(char)nt]; + break; + } + } + break; + } + default: break; + } + if (mark != 0) { + poolMarks[cpindex] = mark; + changed1 = true; + } + } + if (!changed1) + break; + changed = true; + } + return changed; + } + char nameMark(String s) { + if (s.startsWith("MT_")) return 'T'; + else if (s.startsWith("MH_")) return 'H'; + else if (s.startsWith("INDY_")) return 'I'; + else if (s.startsWith("java/lang/invoke/")) return 'D'; + else if (s.startsWith("java/lang/")) return 'J'; + return 0; + } + char nameAndTypeMark(Short[] n12) { + return nameAndTypeMark(n12[0], n12[1]); + } + char nameAndTypeMark(short n1, short n2) { + char mark = poolMarks[(char)n1]; + if (mark == 0) return 0; + String descr = cf.pool.getString(CONSTANT_Utf8, n2); + String requiredType; + switch (poolMarks[(char)n1]) { + case 'H': requiredType = "()Ljava/lang/invoke/MethodHandle;"; break; + case 'T': requiredType = "()Ljava/lang/invoke/MethodType;"; break; + case 'I': requiredType = "()Ljava/lang/invoke/MethodHandle;"; break; + default: return 0; + } + if (descr.equals(requiredType)) return mark; + return 0; + } + + private class JVMState { + final List stack = new ArrayList<>(); + int sp() { return stack.size(); } + void push(Object x) { stack.add(x); } + void push2(Object x) { stack.add(EMPTY_SLOT); stack.add(x); } + void pushAt(int pos, Object x) { stack.add(stack.size()+pos, x); } + Object pop() { return stack.remove(sp()-1); } + Object top() { return stack.get(sp()-1); } + List args(boolean hasRecv, String type) { + return args(argsize(type) + (hasRecv ? 1 : 0)); + } + List args(int argsize) { + return stack.subList(sp()-argsize, sp()); + } + boolean stackMotion(int bc) { + switch (bc) { + case opc_pop: pop(); break; + case opc_pop2: pop(); pop(); break; + case opc_swap: pushAt(-1, pop()); break; + case opc_dup: push(top()); break; + case opc_dup_x1: pushAt(-2, top()); break; + case opc_dup_x2: pushAt(-3, top()); break; + // ? also: dup2{,_x1,_x2} + default: return false; + } + return true; + } + } + private final String EMPTY_SLOT = "_"; + private void removeEmptyJVMSlots(List args) { + for (;;) { + int i = args.indexOf(EMPTY_SLOT); + if (i >= 0 && i+1 < args.size() + && (isConstant(args.get(i+1), CONSTANT_Long) || + isConstant(args.get(i+1), CONSTANT_Double))) + args.remove(i); + else break; + } + } + + private Constant scanPattern(Method m, char patternMark) { + if (verbose) System.err.println("scan "+m+" for pattern="+patternMark); + int wantTag; + switch (patternMark) { + case 'T': wantTag = CONSTANT_MethodType; break; + case 'H': wantTag = CONSTANT_MethodHandle; break; + case 'I': wantTag = CONSTANT_InvokeDynamic; break; + default: throw new InternalError(); + } + Instruction i = m.instructions(); + JVMState jvm = new JVMState(); + Pool pool = cf.pool; + int branchCount = 0; + Object arg; + List args; + List bsmArgs = null; // args to invokeGeneric + decode: + for (; i != null; i = i.next()) { + //System.out.println(jvm.stack+" "+i); + int bc = i.bc; + switch (bc) { + case opc_ldc: jvm.push(pool.get(i.u1At(1))); break; + case opc_ldc_w: jvm.push(pool.get(i.u2At(1))); break; + case opc_ldc2_w: jvm.push2(pool.get(i.u2At(1))); break; + case opc_aconst_null: jvm.push(null); break; + case opc_bipush: jvm.push((int)(byte) i.u1At(1)); break; + case opc_sipush: jvm.push((int)(short)i.u2At(1)); break; + + // these support creation of a restarg array + case opc_anewarray: + arg = jvm.pop(); + if (!(arg instanceof Integer)) break decode; + arg = Arrays.asList(new Object[(Integer)arg]); + jvm.push(arg); + break; + case opc_dup: + jvm.push(jvm.top()); break; + case opc_aastore: + args = jvm.args(3); // array, index, value + if (args.get(0) instanceof List && + args.get(1) instanceof Integer) { + ((List)args.get(0)).set( (Integer)args.get(1), args.get(2) ); + } + args.clear(); + break; + + case opc_getstatic: + { + // int.class compiles to getstatic Integer.TYPE + int fieldi = i.u2At(1); + char mark = poolMarks[fieldi]; + //System.err.println("getstatic "+fieldi+Arrays.asList(pool.getStrings(pool.getMemberRef((short)fieldi)))+mark); + if (mark == 'J') { + Short[] ref = pool.getMemberRef((short) fieldi); + String name = pool.getString(CONSTANT_Utf8, ref[1]); + if ("TYPE".equals(name)) { + String wrapperName = pool.getString(CONSTANT_Class, ref[0]).replace('/', '.'); + // a primitive type descriptor + Class primClass; + try { + primClass = (Class) Class.forName(wrapperName).getField(name).get(null); + } catch (Exception ex) { + throw new InternalError("cannot load "+wrapperName+"."+name); + } + jvm.push(primClass); + break; + } + } + // unknown field; keep going... + jvm.push(UNKNOWN_CON); + break; + } + case opc_putstatic: + { + if (patternMark != 'I') break decode; + jvm.pop(); + // unknown field; keep going... + break; + } + + case opc_invokestatic: + case opc_invokevirtual: + { + boolean hasRecv = (bc == opc_invokevirtual); + int methi = i.u2At(1); + char mark = poolMarks[methi]; + Short[] ref = pool.getMemberRef((short)methi); + String type = pool.getString(CONSTANT_Utf8, ref[2]); + //System.out.println("invoke "+pool.getString(CONSTANT_Utf8, ref[1])+" "+Arrays.asList(ref)+" : "+type); + args = jvm.args(hasRecv, type); + String intrinsic = null; + Constant con; + if (mark == 'D' || mark == 'J') { + intrinsic = pool.getString(CONSTANT_Utf8, ref[1]); + if (mark == 'J') { + String cls = pool.getString(CONSTANT_Class, ref[0]); + cls = cls.substring(1+cls.lastIndexOf('/')); + intrinsic = cls+"."+intrinsic; + } + //System.out.println("recognized intrinsic "+intrinsic); + byte refKind = -1; + switch (intrinsic) { + case "findGetter": refKind = REF_getField; break; + case "findStaticGetter": refKind = REF_getStatic; break; + case "findSetter": refKind = REF_putField; break; + case "findStaticSetter": refKind = REF_putStatic; break; + case "findVirtual": refKind = REF_invokeVirtual; break; + case "findStatic": refKind = REF_invokeStatic; break; + case "findSpecial": refKind = REF_invokeSpecial; break; + case "findConstructor": refKind = REF_newInvokeSpecial; break; + } + if (refKind >= 0 && (con = parseMemberLookup(refKind, args)) != null) { + args.clear(); args.add(con); + continue; + } + } + Method ownMethod = null; + if (mark == 'T' || mark == 'H' || mark == 'I') { + ownMethod = findMember(cf.methods, ref[1], ref[2]); + } + switch (intrinsic == null ? "" : intrinsic) { + case "fromMethodDescriptorString": + con = makeMethodTypeCon(args.get(0)); + args.clear(); args.add(con); + continue; + case "methodType": { + flattenVarargs(args); // there are several overloadings, some with varargs + StringBuilder buf = new StringBuilder(); + String rtype = null; + for (Object typeArg : args) { + if (typeArg instanceof Class) { + Class argClass = (Class) typeArg; + if (argClass.isPrimitive()) { + char tchar; + switch (argClass.getName()) { + case "void": tchar = 'V'; break; + case "boolean": tchar = 'Z'; break; + case "byte": tchar = 'B'; break; + case "char": tchar = 'C'; break; + case "short": tchar = 'S'; break; + case "int": tchar = 'I'; break; + case "long": tchar = 'J'; break; + case "float": tchar = 'F'; break; + case "double": tchar = 'D'; break; + default: throw new InternalError(argClass.toString()); + } + buf.append(tchar); + } else { + // should not happen, but... + buf.append('L').append(argClass.getName().replace('.','/')).append(';'); + } + } else if (typeArg instanceof Constant) { + Constant argCon = (Constant) typeArg; + if (argCon.tag == CONSTANT_Class) { + String cn = pool.get(argCon.itemIndex()).itemString(); + if (cn.endsWith(";")) + buf.append(cn); + else + buf.append('L').append(cn).append(';'); + } else { + break decode; + } + } else { + break decode; + } + if (rtype == null) { + // first arg is treated differently + rtype = buf.toString(); + buf.setLength(0); + buf.append('('); + } + } + buf.append(')').append(rtype); + con = con = makeMethodTypeCon(buf.toString()); + args.clear(); args.add(con); + continue; + } + case "lookup": + case "dynamicInvoker": + args.clear(); args.add(intrinsic); + continue; + case "lookupClass": + if (args.equals(Arrays.asList("lookup"))) { + // fold lookup().lookupClass() to the enclosing class + args.clear(); args.add(pool.get(cf.thisc)); + continue; + } + break; + case "invokeGeneric": + case "invokeWithArguments": + if (patternMark != 'I') break decode; + if ("invokeWithArguments".equals(intrinsic)) + flattenVarargs(args); + bsmArgs = new ArrayList(args); + args.clear(); args.add("invokeGeneric"); + continue; + case "Integer.valueOf": + case "Float.valueOf": + case "Long.valueOf": + case "Double.valueOf": + removeEmptyJVMSlots(args); + if (args.size() == 1) { + arg = args.remove(0); + assert(3456 == (CONSTANT_Integer*1000 + CONSTANT_Float*100 + CONSTANT_Long*10 + CONSTANT_Double)); + if (isConstant(arg, CONSTANT_Integer + "IFLD".indexOf(intrinsic.charAt(0))) + || arg instanceof Number) { + args.add(arg); continue; + } + } + break decode; + } + if (!hasRecv && ownMethod != null && patternMark != 0) { + con = constants.get(ownMethod); + if (con == null) break decode; + args.clear(); args.add(con); + continue; + } else if (type.endsWith(")V")) { + // allow calls like println("reached the pattern method") + args.clear(); + continue; + } + break decode; // bail out for most calls + } + case opc_areturn: + { + ++branchCount; + if (bsmArgs != null) { + // parse bsmArgs as (MH, lookup, String, MT, [extra]) + Constant indyCon = makeInvokeDynamicCon(bsmArgs); + if (indyCon != null) { + Constant typeCon = (Constant) bsmArgs.get(3); + indySignatures.put(m, pool.getString(typeCon.itemIndex())); + return indyCon; + } + System.err.println(m+": inscrutable bsm arguments: "+bsmArgs); + break decode; // bail out + } + arg = jvm.pop(); + if (branchCount == 2 && UNKNOWN_CON.equals(arg)) + break; // merge to next path + if (isConstant(arg, wantTag)) + return (Constant) arg; + break decode; // bail out + } + default: + if (jvm.stackMotion(i.bc)) break; + if (bc >= opc_nconst_MIN && bc <= opc_nconst_MAX) + { jvm.push(INSTRUCTION_CONSTANTS[bc - opc_nconst_MIN]); break; } + if (patternMark == 'I') { + // these support caching paths in INDY_x methods + if (bc == opc_aload || bc >= opc_aload_0 && bc <= opc_aload_MAX) + { jvm.push(UNKNOWN_CON); break; } + if (bc == opc_astore || bc >= opc_astore_0 && bc <= opc_astore_MAX) + { jvm.pop(); break; } + switch (bc) { + case opc_getfield: + case opc_aaload: + jvm.push(UNKNOWN_CON); break; + case opc_ifnull: + case opc_ifnonnull: + // ignore branch target + if (++branchCount != 1) break decode; + jvm.pop(); + break; + case opc_checkcast: + arg = jvm.top(); + if ("invokeWithArguments".equals(arg) || + "invokeGeneric".equals(arg)) + break; // assume it is a helpful cast + break decode; + default: + break decode; // bail out + } + continue decode; // go to next instruction + } + break decode; // bail out + } //end switch + } + System.err.println(m+": bailout on "+i+" jvm stack: "+jvm.stack); + return null; + } + private final String UNKNOWN_CON = ""; + + private void flattenVarargs(List args) { + int size = args.size(); + if (size > 0 && args.get(size-1) instanceof List) + args.addAll((List) args.remove(size-1)); + } + + private boolean isConstant(Object x, int tag) { + return x instanceof Constant && ((Constant)x).tag == tag; + } + private Constant makeMethodTypeCon(Object x) { + short utfIndex; + if (x instanceof String) + utfIndex = (short) cf.pool.addConstant(CONSTANT_Utf8, x).index; + else if (isConstant(x, CONSTANT_String)) + utfIndex = ((Constant)x).itemIndex(); + else return null; + return cf.pool.addConstant(CONSTANT_MethodType, utfIndex); + } + private Constant parseMemberLookup(byte refKind, List args) { + // E.g.: lookup().findStatic(Foo.class, "name", MethodType) + if (args.size() != 4) return null; + int argi = 0; + if (!"lookup".equals(args.get(argi++))) return null; + short refindex, cindex, ntindex, nindex, tindex; + Object con; + if (!isConstant(con = args.get(argi++), CONSTANT_Class)) return null; + cindex = (short)((Constant)con).index; + if (!isConstant(con = args.get(argi++), CONSTANT_String)) return null; + nindex = ((Constant)con).itemIndex(); + if (isConstant(con = args.get(argi++), CONSTANT_MethodType) || + isConstant(con, CONSTANT_Class)) { + tindex = ((Constant)con).itemIndex(); + } else return null; + ntindex = (short) cf.pool.addConstant(CONSTANT_NameAndType, + new Short[]{ nindex, tindex }).index; + byte reftag = CONSTANT_Method; + if (refKind <= REF_putStatic) + reftag = CONSTANT_Field; + else if (refKind == REF_invokeInterface) + reftag = CONSTANT_InterfaceMethod; + Constant ref = cf.pool.addConstant(reftag, new Short[]{ cindex, ntindex }); + return cf.pool.addConstant(CONSTANT_MethodHandle, new Object[]{ refKind, (short)ref.index }); + } + private Constant makeInvokeDynamicCon(List args) { + // E.g.: MH_bsm.invokeGeneric(lookup(), "name", MethodType, "extraArg") + removeEmptyJVMSlots(args); + if (args.size() != 4 && args.size() != 5) return null; + int argi = 0; + short nindex, tindex, ntindex, bsmindex; + Object con; + if (!isConstant(con = args.get(argi++), CONSTANT_MethodHandle)) return null; + bsmindex = (short) ((Constant)con).index; + if (!"lookup".equals(args.get(argi++))) return null; + if (!isConstant(con = args.get(argi++), CONSTANT_String)) return null; + nindex = ((Constant)con).itemIndex(); + if (!isConstant(con = args.get(argi++), CONSTANT_MethodType)) return null; + tindex = ((Constant)con).itemIndex(); + ntindex = (short) cf.pool.addConstant(CONSTANT_NameAndType, + new Short[]{ nindex, tindex }).index; + if (transitionalJSR292) { + if (argi != args.size()) { + System.err.println("BSM specifier has extra arguments but transitionalJSR292=1"); + return null; + } + return cf.pool.addConstant(CONSTANT_InvokeDynamic_17, + new Short[]{ bsmindex, ntindex }); + } + List extraArgs = Collections.emptyList(); + if (argi < args.size()) { + Object arg = args.get(argi); + if (arg instanceof List) + extraArgs = (List) arg; + else + extraArgs = Arrays.asList(arg); + removeEmptyJVMSlots(args); + } + List extraArgIndexes = new CountedList<>(Short.class); + for (Object x : extraArgs) { + if (x instanceof Number) { + Object num = null; byte numTag = 0; + if (x instanceof Integer) { num = x; numTag = CONSTANT_Integer; } + if (x instanceof Float) { num = Float.floatToRawIntBits((Float)x); numTag = CONSTANT_Float; } + if (x instanceof Long) { num = x; numTag = CONSTANT_Long; } + if (x instanceof Double) { num = Double.doubleToRawLongBits((Double)x); numTag = CONSTANT_Double; } + if (num != null) x = cf.pool.addConstant(numTag, x); + } + if (!(x instanceof Constant)) return null; + extraArgIndexes.add((short) ((Constant)x).index); + } + List specs = bootstrapMethodSpecifiers(true); + int specindex = -1; + Object[] spec = new Object[]{ bsmindex, extraArgIndexes }; + for (Object[] spec1 : specs) { + if (Arrays.equals(spec1, spec)) { + specindex = specs.indexOf(spec1); + if (verbose) System.err.println("reusing BSM specifier: "+spec1[0]+spec1[1]); + break; + } + } + if (specindex == -1) { + specindex = (short) specs.size(); + specs.add(spec); + if (verbose) System.err.println("adding BSM specifier: "+spec[0]+spec[1]); + } + return cf.pool.addConstant(CONSTANT_InvokeDynamic, + new Short[]{ (short)specindex, ntindex }); + } + + List bootstrapMethodSpecifiers(boolean createIfNotFound) { + Attr bsms = cf.findAttr("BootstrapMethods"); + if (bsms == null) { + if (!createIfNotFound) return null; + bsms = new Attr(cf, "BootstrapMethods", new byte[]{0,0}); + assert(bsms == cf.findAttr("BootstrapMethods")); + } + if (bsms.item instanceof byte[]) { + // unflatten + List specs = new CountedList<>(Object[].class); + DataInputStream in = new DataInputStream(new ByteArrayInputStream((byte[]) bsms.item)); + try { + int len = (char) in.readShort(); + for (int i = 0; i < len; i++) { + short bsm = in.readShort(); + int argc = (char) in.readShort(); + List argv = new CountedList<>(Short.class); + for (int j = 0; j < argc; j++) + argv.add(in.readShort()); + specs.add(new Object[]{ bsm, argv }); + } + } catch (IOException ex) { throw new InternalError(); } + bsms.item = specs; + } + return (List) bsms.item; + } + } + + private DataInputStream openInput(File f) throws IOException { + return new DataInputStream(new BufferedInputStream(new FileInputStream(f))); + } + + private DataOutputStream openOutput(File f) throws IOException { + if (!overwrite && f.exists()) + throw new IOException("file already exists: "+f); + ensureDirectory(f.getParentFile()); + return new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f))); + } + + static byte[] readRawBytes(DataInputStream in, int size) throws IOException { + byte[] bytes = new byte[size]; + int nr = in.read(bytes); + if (nr != size) + throw new InternalError("wrong size: "+nr); + return bytes; + } + + private interface Chunk { + void readFrom(DataInputStream in) throws IOException; + void writeTo(DataOutputStream out) throws IOException; + } + + private static class CountedList extends ArrayList implements Chunk { + final Class itemClass; + final int rowlen; + CountedList(Class itemClass, int rowlen) { + this.itemClass = itemClass; + this.rowlen = rowlen; + } + CountedList(Class itemClass) { this(itemClass, -1); } + public void readFrom(DataInputStream in) throws IOException { + int count = in.readUnsignedShort(); + while (size() < count) { + if (rowlen < 0) { + add(readInput(in, itemClass)); + } else { + Class elemClass = itemClass.getComponentType(); + Object[] row = (Object[]) java.lang.reflect.Array.newInstance(elemClass, rowlen); + for (int i = 0; i < rowlen; i++) + row[i] = readInput(in, elemClass); + add(itemClass.cast(row)); + } + } + } + public void writeTo(DataOutputStream out) throws IOException { + out.writeShort((short)size()); + for (T item : this) { + writeOutput(out, item); + } + } + } + + private static T readInput(DataInputStream in, Class dataClass) throws IOException { + Object data; + if (dataClass == Integer.class) { + data = in.readInt(); + } else if (dataClass == Short.class) { + data = in.readShort(); + } else if (dataClass == Byte.class) { + data = in.readByte(); + } else if (dataClass == String.class) { + data = in.readUTF(); + } else if (Chunk.class.isAssignableFrom(dataClass)) { + T obj; + try { obj = dataClass.newInstance(); } + catch (Exception ex) { throw new RuntimeException(ex); } + ((Chunk)obj).readFrom(in); + data = obj; + } else { + throw new InternalError("bad input datum: "+dataClass); + } + return dataClass.cast(data); + } + private static T readInput(byte[] bytes, Class dataClass) { + try { + return readInput(new DataInputStream(new ByteArrayInputStream(bytes)), dataClass); + } catch (IOException ex) { + throw new InternalError(); + } + } + private static void readInputs(DataInputStream in, Object... data) throws IOException { + for (Object x : data) ((Chunk)x).readFrom(in); + } + + private static void writeOutput(DataOutputStream out, Object data) throws IOException { + if (data == null) { + return; + } if (data instanceof Integer) { + out.writeInt((Integer)data); + } else if (data instanceof Long) { + out.writeLong((Long)data); + } else if (data instanceof Short) { + out.writeShort((Short)data); + } else if (data instanceof Byte) { + out.writeByte((Byte)data); + } else if (data instanceof String) { + out.writeUTF((String)data); + } else if (data instanceof byte[]) { + out.write((byte[])data); + } else if (data instanceof Object[]) { + for (Object x : (Object[]) data) + writeOutput(out, x); + } else if (data instanceof Chunk) { + Chunk x = (Chunk) data; + x.writeTo(out); + } else if (data instanceof List) { + for (Object x : (List) data) + writeOutput(out, x); + } else { + throw new InternalError("bad output datum: "+data+" : "+data.getClass().getName()); + } + } + private static void writeOutputs(DataOutputStream out, Object... data) throws IOException { + for (Object x : data) writeOutput(out, x); + } + + public static abstract class Outer { + public abstract List inners(); + protected void linkInners() { + for (Inner i : inners()) { + i.linkOuter(this); + if (i instanceof Outer) + ((Outer)i).linkInners(); + } + } + public T outer(Class c) { + for (Outer walk = this;; walk = ((Inner)walk).outer()) { + if (c.isInstance(walk)) + return c.cast(walk); + //if (!(walk instanceof Inner)) return null; + } + } + + public abstract List attrs(); + public Attr findAttr(String name) { + return findAttr(outer(ClassFile.class).pool.stringIndex(name, false)); + } + public Attr findAttr(int name) { + if (name == 0) return null; + for (Attr a : attrs()) { + if (a.name == name) return a; + } + return null; + } + } + public interface Inner { Outer outer(); void linkOuter(Outer o); } + public static abstract class InnerOuter extends Outer implements Inner { + public Outer outer; + public Outer outer() { return outer; } + public void linkOuter(Outer o) { assert(outer == null); outer = o; } + } + public static class Constant implements Chunk { + public final byte tag; + public final T item; + public final int index; + public Constant(int index, byte tag, T item) { + this.index = index; + this.tag = tag; + this.item = item; + } + public Constant checkTag(byte tag) { + if (this.tag != tag) throw new InternalError(this.toString()); + return this; + } + public String itemString() { return (String)item; } + public Short itemIndex() { return (Short)item; } + public Short[] itemIndexes() { return (Short[])item; } + public void readFrom(DataInputStream in) throws IOException { + throw new InternalError("do not call"); + } + public void writeTo(DataOutputStream out) throws IOException { + writeOutputs(out, tag, item); + } + public boolean equals(Object x) { return (x instanceof Constant && equals((Constant)x)); } + public boolean equals(Constant that) { + return (this.tag == that.tag && this.itemAsComparable().equals(that.itemAsComparable())); + } + public int hashCode() { return (tag * 31) + this.itemAsComparable().hashCode(); } + public Object itemAsComparable() { + switch (tag) { + case CONSTANT_Double: return Double.longBitsToDouble((Long)item); + case CONSTANT_Float: return Float.intBitsToFloat((Integer)item); + } + return (item instanceof Object[] ? Arrays.asList((Object[])item) : item); + } + public String toString() { + String itstr = String.valueOf(itemAsComparable()); + return (index + ":" + tagName(tag) + (itstr.startsWith("[")?"":"=") + itstr); + } + private static String[] TAG_NAMES; + public static String tagName(byte tag) { // used for error messages + if (TAG_NAMES == null) + TAG_NAMES = ("None Utf8 Unicode Integer Float Long Double Class String" + +" Fieldref Methodref InterfaceMethodref NameAndType #13 #14" + +" MethodHandle MethodType InvokeDynamic#17 InvokeDynamic").split(" "); + if ((tag & 0xFF) >= TAG_NAMES.length) return "#"+(tag & 0xFF); + return TAG_NAMES[tag & 0xFF]; + } + } + + public static class Pool extends CountedList implements Chunk { + private Map strings = new TreeMap<>(); + + public Pool() { + super(Constant.class); + } + public void readFrom(DataInputStream in) throws IOException { + int count = in.readUnsignedShort(); + add(null); // always ignore first item + while (size() < count) { + readConstant(in); + } + } + public Constant addConstant(byte tag, T item) { + Constant con = new Constant<>(size(), tag, item); + int idx = indexOf(con); + if (idx >= 0) return get(idx); + add(con); + if (tag == CONSTANT_Utf8) strings.put((String)item, (short) con.index); + return con; + } + private void readConstant(DataInputStream in) throws IOException { + byte tag = in.readByte(); + int index = size(); + Object arg; + switch (tag) { + case CONSTANT_Utf8: + arg = in.readUTF(); + strings.put((String) arg, (short) size()); + break; + case CONSTANT_Integer: + case CONSTANT_Float: + arg = in.readInt(); break; + case CONSTANT_Long: + case CONSTANT_Double: + add(new Constant(index, tag, in.readLong())); + add(null); + return; + case CONSTANT_Class: + case CONSTANT_String: + arg = in.readShort(); break; + case CONSTANT_Field: + case CONSTANT_Method: + case CONSTANT_InterfaceMethod: + case CONSTANT_NameAndType: + case CONSTANT_InvokeDynamic_17: + case CONSTANT_InvokeDynamic: + // read an ordered pair + arg = new Short[] { in.readShort(), in.readShort() }; + break; + case CONSTANT_MethodHandle: + // read an ordered pair; first part is a u1 (not u2) + arg = new Object[] { in.readByte(), in.readShort() }; + break; + case CONSTANT_MethodType: + arg = in.readShort(); break; + default: + throw new InternalError("bad CP tag "+tag); + } + add(new Constant(index, tag, arg)); + } + + // Access: + public Constant get(int index) { + // extra 1-bits get into the shorts + return super.get((char) index); + } + String getString(byte tag, short index) { + get(index).checkTag(tag); + return getString(index); + } + String getString(short index) { + Object v = get(index).item; + if (v instanceof Short) + v = get((Short)v).checkTag(CONSTANT_Utf8).item; + return (String) v; + } + String[] getStrings(Short[] indexes) { + String[] res = new String[indexes.length]; + for (int i = 0; i < indexes.length; i++) + res[i] = getString(indexes[i]); + return res; + } + int stringIndex(String name, boolean createIfNotFound) { + Short x = strings.get(name); + if (x != null) return (char)(int) x; + if (!createIfNotFound) return 0; + return addConstant(CONSTANT_Utf8, name).index; + } + Short[] getMemberRef(short index) { + Short[] cls_nnt = get(index).itemIndexes(); + Short[] name_type = get(cls_nnt[1]).itemIndexes(); + return new Short[]{ cls_nnt[0], name_type[0], name_type[1] }; + } + } + + public class ClassFile extends Outer implements Chunk { + ClassFile(File f) throws IOException { + DataInputStream in = openInput(f); + try { + readFrom(in); + } finally { + if (in != null) in.close(); + } + } + + public int magic, version; // + public final Pool pool = new Pool(); + public short access, thisc, superc; + public final List interfaces = new CountedList<>(Short.class); + public final List fields = new CountedList<>(Field.class); + public final List methods = new CountedList<>(Method.class); + public final List attrs = new CountedList<>(Attr.class); + + public final void readFrom(DataInputStream in) throws IOException { + magic = in.readInt(); version = in.readInt(); + if (magic != 0xCAFEBABE) throw new IOException("bad magic number"); + pool.readFrom(in); + Code_index = pool.stringIndex("Code", false); + access = in.readShort(); thisc = in.readShort(); superc = in.readShort(); + readInputs(in, interfaces, fields, methods, attrs); + if (in.read() >= 0) throw new IOException("junk after end of file"); + linkInners(); + } + + void writeTo(File f) throws IOException { + DataOutputStream out = openOutput(f); + try { + writeTo(out); + } finally { + out.close(); + } + } + + public void writeTo(DataOutputStream out) throws IOException { + writeOutputs(out, magic, version, pool, + access, thisc, superc, interfaces, + fields, methods, attrs); + } + + public byte[] toByteArray() { + try { + ByteArrayOutputStream buf = new ByteArrayOutputStream(); + writeTo(new DataOutputStream(buf)); + return buf.toByteArray(); + } catch (IOException ex) { + throw new InternalError(); + } + } + + public List inners() { + List inns = new ArrayList<>(); + inns.addAll(fields); inns.addAll(methods); inns.addAll(attrs); + return inns; + } + public List attrs() { return attrs; } + + // derived stuff: + public String nameString() { return pool.getString(CONSTANT_Class, thisc); } + int Code_index; + } + + private static T findMember(List mems, int name, int type) { + if (name == 0 || type == 0) return null; + for (T m : mems) { + if (m.name == name && m.type == type) return m; + } + return null; + } + + public static class Member extends InnerOuter implements Chunk { + public short access, name, type; + public final List attrs = new CountedList<>(Attr.class); + public void readFrom(DataInputStream in) throws IOException { + access = in.readShort(); name = in.readShort(); type = in.readShort(); + readInputs(in, attrs); + } + public void writeTo(DataOutputStream out) throws IOException { + writeOutputs(out, access, name, type, attrs); + } + public List inners() { return attrs; } + public List attrs() { return attrs; } + public ClassFile outer() { return (ClassFile) outer; } + public String nameString() { return outer().pool.getString(CONSTANT_Utf8, name); } + public String typeString() { return outer().pool.getString(CONSTANT_Utf8, type); } + public String toString() { + if (outer == null) return super.toString(); + return nameString() + (this instanceof Method ? "" : ":") + + simplifyType(typeString()); + } + } + public static class Field extends Member { + } + public static class Method extends Member { + public Code code() { + Attr a = findAttr("Code"); + if (a == null) return null; + return (Code) a.item; + } + public Instruction instructions() { + Code code = code(); + if (code == null) return null; + return code.instructions(); + } + } + + public static class Attr extends InnerOuter implements Chunk { + public short name; + public int size = -1; // no pre-declared size + public Object item; + + public Attr() {} + public Attr(Outer outer, String name, Object item) { + ClassFile cf = outer.outer(ClassFile.class); + linkOuter(outer); + this.name = (short) cf.pool.stringIndex(name, true); + this.item = item; + outer.attrs().add(this); + } + public void readFrom(DataInputStream in) throws IOException { + name = in.readShort(); + size = in.readInt(); + item = readRawBytes(in, size); + } + public void writeTo(DataOutputStream out) throws IOException { + out.writeShort(name); + // write the 4-byte size header and then the contents: + byte[] bytes; + int trueSize; + if (item instanceof byte[]) { + bytes = (byte[]) item; + out.writeInt(trueSize = bytes.length); + out.write(bytes); + } else { + trueSize = flatten(out); + } + if (trueSize != size && size >= 0) + System.err.println("warning: attribute size changed "+size+" to "+trueSize); + } + public void linkOuter(Outer o) { + super.linkOuter(o); + if (item instanceof byte[] && + outer instanceof Method && + ((Method)outer).outer().Code_index == name) { + item = readInput((byte[])item, Code.class); + } + } + public List inners() { + if (item instanceof Inner) + return Collections.nCopies(1, (Inner)item); + return Collections.emptyList(); + } + public List attrs() { return null; } // Code overrides this + public byte[] flatten() { + ByteArrayOutputStream buf = new ByteArrayOutputStream(size); + flatten(buf); + return buf.toByteArray(); + } + public int flatten(DataOutputStream out) throws IOException { + ByteArrayOutputStream buf = new ByteArrayOutputStream(Math.max(20, size)); + int trueSize = flatten(buf); + out.writeInt(trueSize); + buf.writeTo(out); + return trueSize; + } + private int flatten(ByteArrayOutputStream buf) { + try { + writeOutput(new DataOutputStream(buf), item); + return buf.size(); + } catch (IOException ex) { + throw new InternalError(); + } + } + public String nameString() { + ClassFile cf = outer(ClassFile.class); + if (cf == null) return "#"+name; + return cf.pool.getString(name); + } + public String toString() { + return nameString()+(size < 0 ? "=" : "["+size+"]=")+item; + } + } + + public static class Code extends InnerOuter implements Chunk { + public short stacks, locals; + public byte[] bytes; + public final List etable = new CountedList<>(Short[].class, 4); + public final List attrs = new CountedList<>(Attr.class); + // etable[N] = (N)*{ startpc, endpc, handlerpc, catchtype } + public void readFrom(DataInputStream in) throws IOException { + stacks = in.readShort(); locals = in.readShort(); + bytes = readRawBytes(in, in.readInt()); + readInputs(in, etable, attrs); + } + public void writeTo(DataOutputStream out) throws IOException { + writeOutputs(out, stacks, locals, bytes.length, bytes, etable, attrs); + } + public List inners() { return attrs; } + public List attrs() { return attrs; } + public Instruction instructions() { + return new Instruction(bytes, 0); + } + } + + // lots of constants + private static final byte + CONSTANT_Utf8 = 1, + CONSTANT_Integer = 3, + CONSTANT_Float = 4, + CONSTANT_Long = 5, + CONSTANT_Double = 6, + CONSTANT_Class = 7, + CONSTANT_String = 8, + CONSTANT_Field = 9, + CONSTANT_Method = 10, + CONSTANT_InterfaceMethod = 11, + CONSTANT_NameAndType = 12, + CONSTANT_MethodHandle = 15, // JSR 292 + CONSTANT_MethodType = 16, // JSR 292 + CONSTANT_InvokeDynamic_17 = 17, // JSR 292, only occurs in old class files + CONSTANT_InvokeDynamic = 18; // JSR 292 + private static final byte + REF_getField = 1, + REF_getStatic = 2, + REF_putField = 3, + REF_putStatic = 4, + REF_invokeVirtual = 5, + REF_invokeStatic = 6, + REF_invokeSpecial = 7, + REF_newInvokeSpecial = 8, + REF_invokeInterface = 9; + + private static final int + opc_nop = 0, + opc_aconst_null = 1, + opc_nconst_MIN = 2, // iconst_m1 + opc_nconst_MAX = 15, // dconst_1 + opc_bipush = 16, + opc_sipush = 17, + opc_ldc = 18, + opc_ldc_w = 19, + opc_ldc2_w = 20, + opc_aload = 25, + opc_aload_0 = 42, + opc_aload_MAX = 45, + opc_aaload = 50, + opc_astore = 58, + opc_astore_0 = 75, + opc_astore_MAX = 78, + opc_aastore = 83, + opc_pop = 87, + opc_pop2 = 88, + opc_dup = 89, + opc_dup_x1 = 90, + opc_dup_x2 = 91, + opc_dup2 = 92, + opc_dup2_x1 = 93, + opc_dup2_x2 = 94, + opc_swap = 95, + opc_tableswitch = 170, + opc_lookupswitch = 171, + opc_areturn = 176, + opc_getstatic = 178, + opc_putstatic = 179, + opc_getfield = 180, + opc_putfield = 181, + opc_invokevirtual = 182, + opc_invokespecial = 183, + opc_invokestatic = 184, + opc_invokeinterface = 185, + opc_invokedynamic = 186, + opc_anewarray = 189, + opc_checkcast = 192, + opc_ifnull = 198, + opc_ifnonnull = 199, + opc_wide = 196; + + private static final Object[] INSTRUCTION_CONSTANTS = { + -1, 0, 1, 2, 3, 4, 5, 0L, 1L, 0.0F, 1.0F, 2.0F, 0.0D, 1.0D + }; + + private static final String INSTRUCTION_FORMATS = + "nop$ aconst_null$L iconst_m1$I iconst_0$I iconst_1$I "+ + "iconst_2$I iconst_3$I iconst_4$I iconst_5$I lconst_0$J_ "+ + "lconst_1$J_ fconst_0$F fconst_1$F fconst_2$F dconst_0$D_ "+ + "dconst_1$D_ bipush=bx$I sipush=bxx$I ldc=bk$X ldc_w=bkk$X "+ + "ldc2_w=bkk$X_ iload=bl/wbll$I lload=bl/wbll$J_ fload=bl/wbll$F "+ + "dload=bl/wbll$D_ aload=bl/wbll$L iload_0$I iload_1$I "+ + "iload_2$I iload_3$I lload_0$J_ lload_1$J_ lload_2$J_ "+ + "lload_3$J_ fload_0$F fload_1$F fload_2$F fload_3$F dload_0$D_ "+ + "dload_1$D_ dload_2$D_ dload_3$D_ aload_0$L aload_1$L "+ + "aload_2$L aload_3$L iaload$LI$I laload$LI$J_ faload$LI$F "+ + "daload$LI$D_ aaload$LI$L baload$LI$I caload$LI$I saload$LI$I "+ + "istore=bl/wbll$I$ lstore=bl/wbll$J_$ fstore=bl/wbll$F$ "+ + "dstore=bl/wbll$D_$ astore=bl/wbll$L$ istore_0$I$ istore_1$I$ "+ + "istore_2$I$ istore_3$I$ lstore_0$J_$ lstore_1$J_$ "+ + "lstore_2$J_$ lstore_3$J_$ fstore_0$F$ fstore_1$F$ fstore_2$F$ "+ + "fstore_3$F$ dstore_0$D_$ dstore_1$D_$ dstore_2$D_$ "+ + "dstore_3$D_$ astore_0$L$ astore_1$L$ astore_2$L$ astore_3$L$ "+ + "iastore$LII$ lastore$LIJ_$ fastore$LIF$ dastore$LID_$ "+ + "aastore$LIL$ bastore$LII$ castore$LII$ sastore$LII$ pop$X$ "+ + "pop2$XX$ dup$X$XX dup_x1$XX$XXX dup_x2$XXX$XXXX dup2$XX$XXXX "+ + "dup2_x1$XXX$XXXXX dup2_x2$XXXX$XXXXXX swap$XX$XX "+ + "iadd$II$I ladd$J_J_$J_ fadd$FF$F dadd$D_D_$D_ isub$II$I "+ + "lsub$J_J_$J_ fsub$FF$F dsub$D_D_$D_ imul$II$I lmul$J_J_$J_ "+ + "fmul$FF$F dmul$D_D_$D_ idiv$II$I ldiv$J_J_$J_ fdiv$FF$F "+ + "ddiv$D_D_$D_ irem$II$I lrem$J_J_$J_ frem$FF$F drem$D_D_$D_ "+ + "ineg$I$I lneg$J_$J_ fneg$F$F dneg$D_$D_ ishl$II$I lshl$J_I$J_ "+ + "ishr$II$I lshr$J_I$J_ iushr$II$I lushr$J_I$J_ iand$II$I "+ + "land$J_J_$J_ ior$II$I lor$J_J_$J_ ixor$II$I lxor$J_J_$J_ "+ + "iinc=blx/wbllxx$ i2l$I$J_ i2f$I$F i2d$I$D_ l2i$J_$I l2f$J_$F "+ + "l2d$J_$D_ f2i$F$I f2l$F$J_ f2d$F$D_ d2i$D_$I d2l$D_$J_ "+ + "d2f$D_$F i2b$I$I i2c$I$I i2s$I$I lcmp fcmpl fcmpg dcmpl dcmpg "+ + "ifeq=boo ifne=boo iflt=boo ifge=boo ifgt=boo ifle=boo "+ + "if_icmpeq=boo if_icmpne=boo if_icmplt=boo if_icmpge=boo "+ + "if_icmpgt=boo if_icmple=boo if_acmpeq=boo if_acmpne=boo "+ + "goto=boo jsr=boo ret=bl/wbll tableswitch=* lookupswitch=* "+ + "ireturn lreturn freturn dreturn areturn return "+ + "getstatic=bkf$Q putstatic=bkf$Q$ getfield=bkf$L$Q "+ + "putfield=bkf$LQ$ invokevirtual=bkm$LQ$Q "+ + "invokespecial=bkm$LQ$Q invokestatic=bkm$Q$Q "+ + "invokeinterface=bkixx$LQ$Q invokedynamic=bkd__$Q$Q new=bkc$L "+ + "newarray=bx$I$L anewarray=bkc$I$L arraylength$L$I athrow "+ + "checkcast=bkc$L$L instanceof=bkc$L$I monitorenter$L "+ + "monitorexit$L wide=* multianewarray=bkcx ifnull=boo "+ + "ifnonnull=boo goto_w=boooo jsr_w=boooo "; + private static final String[] INSTRUCTION_NAMES; + private static final String[] INSTRUCTION_POPS; + private static final int[] INSTRUCTION_INFO; + static { + String[] insns = INSTRUCTION_FORMATS.split(" "); + assert(insns[opc_lookupswitch].startsWith("lookupswitch")); + assert(insns[opc_tableswitch].startsWith("tableswitch")); + assert(insns[opc_wide].startsWith("wide")); + assert(insns[opc_invokedynamic].startsWith("invokedynamic")); + int[] info = new int[256]; + String[] names = new String[256]; + String[] pops = new String[256]; + for (int i = 0; i < insns.length; i++) { + String insn = insns[i]; + int dl = insn.indexOf('$'); + if (dl > 0) { + String p = insn.substring(dl+1); + if (p.indexOf('$') < 0) p = "$" + p; + pops[i] = p; + insn = insn.substring(0, dl); + } + int eq = insn.indexOf('='); + if (eq < 0) { + info[i] = 1; + names[i] = insn; + continue; + } + names[i] = insn.substring(0, eq); + String fmt = insn.substring(eq+1); + if (fmt.equals("*")) { + info[i] = 0; + continue; + } + int sl = fmt.indexOf('/'); + if (sl < 0) { + info[i] = (char) fmt.length(); + } else { + String wfmt = fmt.substring(sl+1); + fmt = fmt.substring(0, sl); + info[i] = (char)( fmt.length() + (wfmt.length() * 16) ); + } + } + INSTRUCTION_INFO = info; + INSTRUCTION_NAMES = names; + INSTRUCTION_POPS = pops; + } + + public static class Instruction implements Cloneable { + byte[] codeBase; + int pc; + int bc; + int info; + int wide; + int len; + Instruction(byte[] codeBase, int pc) { + this.codeBase = codeBase; + init(pc); + } + public Instruction clone() { + try { + return (Instruction) super.clone(); + } catch (CloneNotSupportedException ex) { + throw new InternalError(); + } + } + private Instruction init(int pc) { + this.pc = pc; + this.bc = codeBase[pc] & 0xFF; + this.info = INSTRUCTION_INFO[bc]; + this.wide = 0; + this.len = (info & 0x0F); + if (len == 0) + computeLength(); + return this; + } + Instruction next() { + if (len == 0 && bc != 0) throw new InternalError(); + int npc = pc + len; + if (npc == codeBase.length) + return null; + return init(npc); + } + void forceNext(int newLen) { + bc = opc_nop; + len = newLen; + } + + public String toString() { + StringBuilder buf = new StringBuilder(); + buf.append(pc).append(":").append(INSTRUCTION_NAMES[bc]); + switch (len) { + case 3: buf.append(" ").append(u2At(1)); break; + case 5: buf.append(" ").append(u2At(1)).append(" ").append(u2At(3)); break; + default: for (int i = 1; i < len; i++) buf.append(" ").append(u1At(1)); + } + return buf.toString(); + } + + // these are the hard parts + private void computeLength() { + int cases; + switch (bc) { + case opc_wide: + bc = codeBase[pc + 1]; + info = INSTRUCTION_INFO[bc]; + len = ((info >> 4) & 0x0F); + if (len == 0) throw new RuntimeException("misplaced wide bytecode: "+bc); + return; + + case opc_tableswitch: + cases = (u4At(alignedIntOffset(2)) - u4At(alignedIntOffset(1)) + 1); + len = alignedIntOffset(3 + cases*1); + return; + + case opc_lookupswitch: + cases = u4At(alignedIntOffset(1)); + len = alignedIntOffset(2 + cases*2); + return; + + default: + throw new RuntimeException("unknown bytecode: "+bc); + } + } + // switch code + // clget the Nth int (where 0 is the first after the opcode itself) + public int alignedIntOffset(int n) { + int pos = pc + 1; + pos += ((-pos) & 0x03); // align it + pos += (n * 4); + return pos - pc; + } + public int u1At(int pos) { + return (codeBase[pc+pos] & 0xFF); + } + public int u2At(int pos) { + return (u1At(pos+0)<<8) + u1At(pos+1); + } + public int u4At(int pos) { + return (u2At(pos+0)<<16) + u2At(pos+2); + } + public void u1AtPut(int pos, int x) { + codeBase[pc+pos] = (byte)x; + } + public void u2AtPut(int pos, int x) { + codeBase[pc+pos+0] = (byte)(x >> 8); + codeBase[pc+pos+1] = (byte)(x >> 0); + } + } + + static String simplifyType(String type) { + String simpleType = OBJ_SIGNATURE.matcher(type).replaceAll("L"); + assert(simpleType.matches("^\\([A-Z]*\\)[A-Z]$")); + // change (DD)D to (D_D_)D_ + simpleType = WIDE_SIGNATURE.matcher(simpleType).replaceAll("\\0_"); + return simpleType; + } + static int argsize(String type) { + return simplifyType(type).length()-3; + } + private static final Pattern OBJ_SIGNATURE = Pattern.compile("\\[*L[^;]*;|\\[+[A-Z]"); + private static final Pattern WIDE_SIGNATURE = Pattern.compile("[JD]"); +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/LoadClass.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/LoadClass.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/LoadClass.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.tools; + +import java.io.File; +import vm.share.UnsafeAccess; +import vm.share.FileUtils; +import vm.mlvm.share.CustomClassLoaders; +import vm.mlvm.anonloader.share.AnonkTestee01; + +import vm.mlvm.share.Env; + +/** + * A tool, which loads a class file specified in command line into VM using: + *
      + *
    • A custom class loader, + *
    • {@link sun.misc.Unsafe#defineAnonymousClass(Class, byte[], Object[])} + * call. + *
    + * + *

    Syntax: + *

    {@code
    + * $ java [options...] vm.mlvm.tool.LoadClass class-file-name [class-FQDN]
    + * }
    + * + * The first argument, class file name is mandatory. + * The second one is optional — a fully qualified class name. + * If the second argument is not specified, it is constructed from the first + * argument, replacing '/' with '.' + * + *

    The tool can be used for investigating failures of vm.mlvm.anon tests. + * + */ +public class LoadClass { + + private static final Class HOST_CLASS = AnonkTestee01.class; + + private static void usage() { + System.out.println("Usage: java " + LoadClass.class.getName() + + " [class-name]"); + } + + /** + * Runs the tool. + * @param args Tool arguments + */ + @SuppressWarnings("deprecation") + public static void main(String[] args) { + if (args.length < 1) { + usage(); + System.exit(1); + } + + try { + final String classFileName = args[0]; + final String className = (args.length > 1) ? args[1] + : classFileName.replaceAll("\\.class$", "") + .replace("/", "."); + final byte[] classBytes = FileUtils + .readFile(new File(classFileName)); + + Env.traceImportant("Loading class '%s' from file '%s'...", + className, classFileName); + + Env.traceImportant("...using custom ClassLoader"); + try { + ClassLoader cl = CustomClassLoaders + .makeClassBytesLoader(classBytes, className); + Class c = cl.loadClass(className); + c.newInstance(); + Env.traceImportant("OK"); + } catch (Throwable e) { + Env.traceImportant(e, + "Couldn't load class '%s' via custom ClassLoader", + classFileName); + } + + Env.traceImportant( + "...using sun.misc.Unsafe.defineAnonymousClass():"); + try { + Class c = UnsafeAccess.unsafe.defineAnonymousClass(HOST_CLASS, + classBytes, new Object[0]); + c.newInstance(); + Env.traceImportant("OK"); + } catch (Throwable e) { + Env.traceImportant(e, "Couldn't load class '%s' via sun.misc." + + "Unsafe.defineAnonymousClass()", classFileName); + } + } catch (Throwable e) { + Env.traceImportant(e, "Can't load class"); + } + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/StratumAP.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/StratumAP.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/StratumAP.java @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.tools; + +import java.io.IOException; +import java.io.Writer; +import java.util.Set; +import java.io.File; + +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.Filer; +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.annotation.processing.SupportedSourceVersion; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; +import javax.tools.FileObject; +import javax.tools.StandardLocation; + +import nsk.share.jdi.sde.SmapGenerator; +import nsk.share.jdi.sde.SmapStratum; +import vm.mlvm.share.Stratum; +import vm.mlvm.tools.StratumAPTreeVisitor.StratumLineInfo; + +import com.sun.source.tree.CompilationUnitTree; +import com.sun.source.util.TreePath; +import com.sun.source.util.Trees; + +@SupportedAnnotationTypes("vm.mlvm.share.Stratum") +public class StratumAP extends AbstractProcessor { + + public static final String SMAP_EXT = ".smap"; + private boolean verbose = false; + + private Trees trees; + @Override + public synchronized void init(ProcessingEnvironment processingEnv) { + super.init(processingEnv); + trees = Trees.instance(processingEnv); + verbose = Boolean.parseBoolean(processingEnv.getOptions().get("verbose")); + } + + public SourceVersion getSupportedSourceVersion() { + return SourceVersion.latest(); + } + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + if (roundEnv.processingOver()) { + return true; + } + + for (Element e : roundEnv.getElementsAnnotatedWith(Stratum.class)) { + Stratum s = e.getAnnotation(Stratum.class); + if (s == null) { + continue; + } + + TreePath tp = trees.getPath(e); + + StratumAPTreeVisitor visitor = new StratumAPTreeVisitor(); + visitor.scan(tp, trees); + + String stratumName = s.stratumName(); + String stratumSourceFileName = s.stratumSourceFileName(); + + SmapStratum st = new SmapStratum(stratumName); + st.addFile(stratumSourceFileName); + + Set lines = visitor.strata.get(stratumName); + StringBuffer stratumSource = new StringBuffer(); + if (lines != null) { + int curStratumLine = 1; + for (StratumLineInfo lineInfo : lines) { + for (int i = -1; i <= 1; i++) + st.addLineData(curStratumLine, + stratumSourceFileName, + 1, + lineInfo.getJavaLineNum() + i, + 1); + + stratumSource.append(lineInfo.getStratumSourceLine()).append("\n"); + ++curStratumLine; + } + } + + if (verbose) { + System.out.println("Strata:\n" + visitor.strata + "\n\nSource:\n" + stratumSource); + } + + CompilationUnitTree compUnit = tp.getCompilationUnit(); + String pkgName = compUnit.getPackageName().toString(); + Filer filer = processingEnv.getFiler(); + + SmapGenerator gen = new SmapGenerator(); + gen.addStratum(st, false); + + try { + FileObject stratumFile = filer.createResource(StandardLocation.CLASS_OUTPUT, pkgName, stratumSourceFileName, e); + + if (verbose) { + System.out.println("Writing " + stratumFile.toUri()); + } + + Writer writer = stratumFile.openWriter(); + try { + writer.append(stratumSource); + } finally { + writer.close(); + } + } catch (IOException ioe) { + ioe.printStackTrace(); + return false; + } + + String sourceFileName = + compUnit.getSourceFile().getName() + .replaceAll("^.*\\" + File.separatorChar, ""); + + gen.setOutputFileName(sourceFileName); + + if (verbose) { + System.out.println(gen.getString() + "\n"); + } + + String smapFileName = + sourceFileName + .replaceAll("\\..*$", "") + + SMAP_EXT; + + try { + FileObject smapFile = filer.createResource(StandardLocation.CLASS_OUTPUT, pkgName, smapFileName, e); + + if (verbose) { + System.out.println("Writing " + smapFile.toUri()); + } + + Writer writer = smapFile.openWriter(); + try { + writer.append(gen.getString()); + } finally { + writer.close(); + } + } catch (IOException ioe) { + ioe.printStackTrace(); + return false; + } + } + + return true; + } +} diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/StratumAPTreeVisitor.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/StratumAPTreeVisitor.java new file mode 100644 --- /dev/null +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/StratumAPTreeVisitor.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package vm.mlvm.tools; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import com.sun.source.tree.CompilationUnitTree; +import com.sun.source.tree.LabeledStatementTree; +import com.sun.source.util.TreePathScanner; +import com.sun.source.util.Trees; + +public class StratumAPTreeVisitor extends TreePathScanner { + public static final String LABEL_PREFIX = "Stratum_"; + + public static class StratumLineInfo implements Comparable { + String stratumName; + int stratumLineOrder; + String stratumLine; + int javaLineNum; + + public StratumLineInfo(String stratumName, int stratumLineOrder, String stratumLine, int javaLineNum) { + this.stratumName = stratumName; + this.stratumLineOrder = stratumLineOrder; + this.stratumLine = stratumLine; + this.javaLineNum = javaLineNum; + } + + public String getStratumName() { + return stratumName; + } + + public int getStratumLineOrder() { + return stratumLineOrder; + } + + public String getStratumSourceLine() { + return stratumLine; + } + + public int getJavaLineNum() { + return javaLineNum; + } + + @Override + public int compareTo(StratumLineInfo o) { + int i; + if ( (i = getStratumName().compareTo(o.getStratumName())) != 0 ) + return i; + + if ( (i = getStratumLineOrder() - o.getStratumLineOrder()) != 0 ) + return i; + + return 0; + } + + @Override + public String toString() { + return getStratumName() + ":" + getStratumLineOrder() + + " => Java:" + getJavaLineNum() + + " [" + getStratumSourceLine() + "]"; + } + } + + public Map> strata = new HashMap>(); + + @Override + public Object visitLabeledStatement(LabeledStatementTree node, Trees p) { + processLabel(node, p); + return super.visitLabeledStatement(node, p); + } + + private void processLabel(LabeledStatementTree node, Trees p) { + String label = node.getLabel().toString(); + + if ( ! label.startsWith(LABEL_PREFIX) ) + return; + + int stratumNameEndPos = label.indexOf('_', LABEL_PREFIX.length()); + if ( stratumNameEndPos == -1 ) + return; + + String stratumName = label.substring(LABEL_PREFIX.length(), stratumNameEndPos); + + int stratumLineEndPos = label.indexOf('_', stratumNameEndPos + 1); + if ( stratumLineEndPos == -1 ) + return; + + String stratumLineNumStr = label.substring(stratumNameEndPos + 1, stratumLineEndPos); + int stratumLineNum = Integer.parseInt(stratumLineNumStr); + + String stratumLine = label.substring(stratumLineEndPos + 1); + + CompilationUnitTree unit = getCurrentPath().getCompilationUnit(); + int javaLineNum = (int) unit.getLineMap().getLineNumber(p.getSourcePositions().getStartPosition(unit, node)); + + Set stratumLines = this.strata.get(stratumName); + if ( stratumLines == null ) { + stratumLines = new TreeSet(); + this.strata.put(stratumName, stratumLines); + } + + stratumLines.add(new StratumLineInfo(stratumName, stratumLineNum, stratumLine, javaLineNum)); + } +}