| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | using Google.ProtocolBuffers.DescriptorProtos;namespace Google.ProtocolBuffers.Descriptors {  /// <summary>  /// Describes a single method in a service.  /// </summary>  public class MethodDescriptor : IndexedDescriptorBase<MethodDescriptorProto, MethodOptions> {    private readonly ServiceDescriptor service;    private MessageDescriptor inputType;    private MessageDescriptor outputType;    /// <value>    /// The service this method belongs to.    /// </value>    public ServiceDescriptor Service {      get { return service; }    }    /// <value>    /// The method's input type.    /// </value>    public MessageDescriptor InputType {      get { return inputType; }    }    /// <value>    /// The method's input type.    /// </value>    public MessageDescriptor OutputType {      get { return outputType; }    }    internal MethodDescriptor(MethodDescriptorProto proto, FileDescriptor file,        ServiceDescriptor parent, int index)         : base(proto, file, parent.FullName + "." + proto.Name, index) {      service = parent;      file.DescriptorPool.AddSymbol(this);    }    internal void CrossLink() {      IDescriptor lookup = File.DescriptorPool.LookupSymbol(Proto.InputType, this);      if (!(lookup is MessageDescriptor)) {        throw new DescriptorValidationException(this, "\"" + Proto.InputType + "\" is not a message type.");      }      inputType = (MessageDescriptor) lookup;      lookup = File.DescriptorPool.LookupSymbol(Proto.OutputType, this);      if (!(lookup is MessageDescriptor)) {        throw new DescriptorValidationException(this, "\"" + Proto.OutputType + "\" is not a message type.");      }      outputType = (MessageDescriptor) lookup;    }  }}
 |