code: public static void checkMethodSignature(final String signature) {
          // MethodTypeSignature:
          // FormalTypeParameters? ( TypeSignature* ) ( TypeSignature | V ) (
          // ^ClassTypeSignature | ^TypeVariableSignature )*
  
          int pos = 0;
          if (getChar(signature, 0) == '<') {
              pos = checkFormalTypeParameters(signature, pos);
          }
          pos = checkChar('(', signature, pos);
          while ("ZCBSIFJDL[T".indexOf(getChar(signature, pos)) != -1) {
              pos = checkTypeSignature(signature, pos);
          }
          pos = checkChar(')', signature, pos);
          if (getChar(signature, pos) == 'V') {
              ++pos;
          } else {
              pos = checkTypeSignature(signature, pos);
          }
          while (getChar(signature, pos) == '^') {
              ++pos;
              if (getChar(signature, pos) == 'L') {
                  pos = checkClassTypeSignature(signature, pos);
              } else {
                  pos = checkTypeVariableSignature(signature, pos);
              }
          }
          if (pos != signature.length()) {
              throw new IllegalArgumentException(signature + ": error at index "
                      + pos);
          }
      }
docs: Checks a method signature.
  
  @param signature
  a string containing the signature that must be checked.