(
final String name,
final String descriptor,
final Handle bootstrapMethodHandle,
final Object... bootstrapMethodArguments)
| 1063 | } |
| 1064 | |
| 1065 | @Override |
| 1066 | public void visitInvokeDynamicInsn( |
| 1067 | final String name, |
| 1068 | final String descriptor, |
| 1069 | final Handle bootstrapMethodHandle, |
| 1070 | final Object... bootstrapMethodArguments) { |
| 1071 | lastBytecodeOffset = code.length; |
| 1072 | // Add the instruction to the bytecode of the method. |
| 1073 | Symbol invokeDynamicSymbol = |
| 1074 | symbolTable.addConstantInvokeDynamic( |
| 1075 | name, descriptor, bootstrapMethodHandle, bootstrapMethodArguments); |
| 1076 | code.put12(Opcodes.INVOKEDYNAMIC, invokeDynamicSymbol.index); |
| 1077 | code.putShort(0); |
| 1078 | // If needed, update the maximum stack size and number of locals, and stack map frames. |
| 1079 | if (currentBasicBlock != null) { |
| 1080 | if (compute == COMPUTE_ALL_FRAMES || compute == COMPUTE_INSERTED_FRAMES) { |
| 1081 | currentBasicBlock.frame.execute(Opcodes.INVOKEDYNAMIC, 0, invokeDynamicSymbol, symbolTable); |
| 1082 | } else { |
| 1083 | int argumentsAndReturnSize = invokeDynamicSymbol.getArgumentsAndReturnSizes(); |
| 1084 | int stackSizeDelta = (argumentsAndReturnSize & 3) - (argumentsAndReturnSize >> 2) + 1; |
| 1085 | int size = relativeStackSize + stackSizeDelta; |
| 1086 | if (size > maxRelativeStackSize) { |
| 1087 | maxRelativeStackSize = size; |
| 1088 | } |
| 1089 | relativeStackSize = size; |
| 1090 | } |
| 1091 | } |
| 1092 | } |
| 1093 | |
| 1094 | @Override |
| 1095 | public void visitJumpInsn(final int opcode, final Label label) { |
no test coverage detected