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);
		}
	}