code: public static InsnList call(Method method, InsnList ... args) {
          Validate.notNull(method);
          Validate.notNull(args);
          Validate.noNullElements(args);
          
          
          InsnList ret = new InsnList();
          
          for (InsnList arg : args) {
              ret.add(arg);
          }
          
          Type clsType = Type.getType(method.getDeclaringClass());
          Type methodType = Type.getType(method);
          
          if ((method.getModifiers() & Modifier.STATIC) == Modifier.STATIC) {
              Validate.isTrue(method.getParameterCount() == args.length);
              ret.add(new MethodInsnNode(Opcodes.INVOKESTATIC, clsType.getInternalName(), method.getName(), methodType.getDescriptor(),
                      false));
          } else if (method.getDeclaringClass().isInterface()) {
              Validate.isTrue(method.getParameterCount() + 1 == args.length);
              ret.add(new MethodInsnNode(Opcodes.INVOKEINTERFACE, clsType.getInternalName(), method.getName(), methodType.getDescriptor(),
                      true));
          } else {
              Validate.isTrue(method.getParameterCount() + 1 == args.length);
              ret.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, clsType.getInternalName(), method.getName(), methodType.getDescriptor(),
                      false));
          }
          
          return ret;
      }
docs: Calls a method with a set of arguments. After execution the stack may have an extra item pushed on it: the object that was returned
  by this method (if any).
  @param method method to call
  @param args method argument instruction lists -- each instruction list must leave one item on the stack of the type expected
  by the method (note that if this is a non-static method, the first argument must always evaluate to the "this" pointer/reference)
  @return instructions to invoke a method
  @throws NullPointerException if any argument is {@code null} or array contains {@code null}
  @throws IllegalArgumentException if the length of {@code args} doesn't match the number of parameters in {@code method}