diff options
Diffstat (limited to 'csharp/ProtocolBuffers')
5 files changed, 28 insertions, 3 deletions
diff --git a/csharp/ProtocolBuffers/Descriptors/MessageDescriptor.cs b/csharp/ProtocolBuffers/Descriptors/MessageDescriptor.cs index b733fb93..02343937 100644 --- a/csharp/ProtocolBuffers/Descriptors/MessageDescriptor.cs +++ b/csharp/ProtocolBuffers/Descriptors/MessageDescriptor.cs @@ -34,6 +34,13 @@ namespace Google.ProtocolBuffers.Descriptors { } /// <value> + /// If this is a nested type, get the outer descriptor, otherwise null. + /// </value> + public MessageDescriptor ContainingType { + get { return containingType; } + } + + /// <value> /// An unmodifiable list of this message type's fields. /// </value> public IList<FieldDescriptor> Fields { diff --git a/csharp/ProtocolBuffers/Descriptors/MethodDescriptor.cs b/csharp/ProtocolBuffers/Descriptors/MethodDescriptor.cs index efc3fa4c..4b4dc707 100644 --- a/csharp/ProtocolBuffers/Descriptors/MethodDescriptor.cs +++ b/csharp/ProtocolBuffers/Descriptors/MethodDescriptor.cs @@ -28,7 +28,7 @@ namespace Google.ProtocolBuffers.Descriptors { /// The method's input type. /// </value> public MessageDescriptor OutputType { - get { return inputType; } + get { return outputType; } } internal MethodDescriptor(MethodDescriptorProto proto, FileDescriptor file, diff --git a/csharp/ProtocolBuffers/Descriptors/ServiceDescriptor.cs b/csharp/ProtocolBuffers/Descriptors/ServiceDescriptor.cs index d7c6f3a3..67ef0418 100644 --- a/csharp/ProtocolBuffers/Descriptors/ServiceDescriptor.cs +++ b/csharp/ProtocolBuffers/Descriptors/ServiceDescriptor.cs @@ -27,6 +27,15 @@ namespace Google.ProtocolBuffers.Descriptors { public IList<MethodDescriptor> Methods { get { return methods; } } + + /// <summary> + /// Finds a method by name. + /// </summary> + /// <param name="name">The unqualified name of the method (e.g. "Foo").</param> + /// <returns>The method's decsriptor, or null if not found.</returns> + public MethodDescriptor FindMethodByName(String name) { + return File.DescriptorPool.FindSymbol<MethodDescriptor>(FullName + "." + name); + } internal void CrossLink() { foreach (MethodDescriptor method in methods) { diff --git a/csharp/ProtocolBuffers/DynamicMessage.cs b/csharp/ProtocolBuffers/DynamicMessage.cs index 5b22d38b..5ffbdfbb 100644 --- a/csharp/ProtocolBuffers/DynamicMessage.cs +++ b/csharp/ProtocolBuffers/DynamicMessage.cs @@ -233,6 +233,10 @@ namespace Google.ProtocolBuffers { this.unknownFields = UnknownFieldSet.DefaultInstance; } + public DynamicMessage Build() { + return (DynamicMessage)((IBuilder)this).Build(); + } + public override IBuilder Clear() { fields.Clear(); return this; diff --git a/csharp/ProtocolBuffers/FieldSet.cs b/csharp/ProtocolBuffers/FieldSet.cs index bca7e5b5..4f660533 100644 --- a/csharp/ProtocolBuffers/FieldSet.cs +++ b/csharp/ProtocolBuffers/FieldSet.cs @@ -325,8 +325,13 @@ namespace Google.ProtocolBuffers { if (fields.TryGetValue(field, out result)) { return result; } - - // This will just do the right thing + if (field.MappedType == MappedType.Message) { + if (field.IsRepeated) { + return new List<object>(); + } else { + return null; + } + } return field.DefaultValue; } set { |