code: public Signature insertArgs(int index, String[] names, Class<?>... types) {
          assert names.length == types.length : "names and types must be of the same length";
  
          String[] newArgNames = new String[argNames.length + names.length];
          System.arraycopy(names, 0, newArgNames, index, names.length);
          if (index != 0) System.arraycopy(argNames, 0, newArgNames, 0, index);
          if (argNames.length - index != 0)
              System.arraycopy(argNames, index, newArgNames, index + names.length, argNames.length - index);
  
          MethodType newMethodType = methodType.insertParameterTypes(index, types);
  
          return new Signature(newMethodType, newArgNames);
      }
docs: Insert arguments (names + types) into the signature.
  
  @param index the index at which to insert
  @param names the names of the new arguments
  @param types the types of the new arguments
  @return a new signature with the added arguments