Parses a Method descriptor as described in section 4.3.3 of the JVM
    specification.

def method_descriptor(descriptor: str) -> MethodDescriptor:
    """
    Parses a Method descriptor as described in section 4.3.3 of the JVM
    specification.
    """
    end_para = descriptor.find(')')
    returns = descriptor[end_para + 1:]
    args = descriptor[1:end_para]

    return MethodDescriptor(
        parse_descriptor(returns)[0],
        parse_descriptor(args),
        returns,
        args,
        descriptor
    )