docs: public static Dynamic ofInvocation(MethodDescription.InDefinedShape methodDescription, List<?> rawArguments) {
              if (!methodDescription.isConstructor() && methodDescription.getReturnType().represents(void.class)) {
                  throw new IllegalArgumentException("Bootstrap method is no constructor or non-void static factory: " + methodDescription);
              } else if (methodDescription.getParameters().size() + (methodDescription.isStatic() || methodDescription.isConstructor() ? 0 : 1) != rawArguments.size()) {
                  throw new IllegalArgumentException("Cannot assign " + rawArguments + " to " + methodDescription);
              }
              Iterator<TypeDescription> iterator = (methodDescription.isStatic() || methodDescription.isConstructor()
                      ? methodDescription.getParameters().asTypeList().asErasures()
                      : CompoundList.of(methodDescription.getDeclaringType(), methodDescription.getParameters().asTypeList().asErasures())).iterator();
              List<Object> arguments = new ArrayList<Object>(rawArguments.size());
              for (Object argument : rawArguments) {
                  if (argument == null) {
                      argument = Dynamic.ofNullConstant();
                  } else if (argument instanceof Class) {
                      argument = ((Class<?>) argument).isPrimitive()
                              ? ofPrimitiveType((Class<?>) argument)
                              : TypeDescription.ForLoadedType.of((Class<?>) argument);
                  } else if (argument instanceof TypeDescription && ((TypeDescription) argument).isPrimitive()) {
                      argument = ofPrimitiveType((TypeDescription) argument);
                  } else if (JavaType.METHOD_HANDLE.isInstance(argument)) {
                      argument = MethodHandle.ofLoaded(argument);
                  } else if (JavaType.METHOD_TYPE.isInstance(argument)) {
                      argument = MethodType.ofLoaded(argument);
                  }
                  TypeDescription targetType;
                  if (argument instanceof JavaConstant) {
                      targetType = ((JavaConstant) argument).getType();
                  } else if (argument instanceof TypeDescription) {
                      targetType = TypeDescription.CLASS;
                  } else {
                      targetType = TypeDescription.ForLoadedType.of(argument.getClass());
                  }
                  if (!targetType.asBoxed().isAssignableTo(iterator.next().asBoxed())) {
                      throw new IllegalArgumentException("Cannot assign argument of type " + targetType + " to " + methodDescription);
                  }
                  arguments.add(argument);
              }
              Object[] asmifiedArgument = new Object[arguments.size() + 1];
              asmifiedArgument[0] = new Handle(methodDescription.isConstructor() ? Opcodes.H_NEWINVOKESPECIAL : Opcodes.H_INVOKESTATIC,
                      methodDescription.getDeclaringType().getInternalName(),
                      methodDescription.getInternalName(),
                      methodDescription.getDescriptor(),
                      false);
              int index = 1;
              for (Object argument : arguments) {
                  if (argument instanceof TypeDescription) {
                      argument = Type.getType(((TypeDescription) argument).getDescriptor());
                  } else if (argument instanceof JavaConstant) {
                      argument = ((JavaConstant) argument).asConstantPoolValue();
                  }
                  asmifiedArgument[index++] = argument;
              }
              return new Dynamic(new ConstantDynamic("invoke",
                      (methodDescription.isConstructor()
                              ? methodDescription.getDeclaringType()
                              : methodDescription.getReturnType().asErasure()).getDescriptor(),
                      new Handle(Opcodes.H_INVOKESTATIC,
                              CONSTANT_BOOTSTRAPS,
                              "invoke",
                              "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;[Ljava/lang/Object;)Ljava/lang/Object;",
                              false),
                      asmifiedArgument), methodDescription.isConstructor() ? methodDescription.getDeclaringType() : methodDescription.getReturnType().asErasure());
          }