aboutsummaryrefslogtreecommitdiff
path: root/src/ProtocolBuffers/Descriptors/MessageDescriptor.cs
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2009-06-05 19:29:36 +0100
committerJon Skeet <skeet@pobox.com>2009-06-05 19:29:36 +0100
commitdf67f1482beab88844296a469aa135fbaebcec9d (patch)
tree86cc32075c445264bd28a582f1a873913664b968 /src/ProtocolBuffers/Descriptors/MessageDescriptor.cs
parent6ef233d4ea9099188310e5278f76c01f931ac817 (diff)
downloadprotobuf-df67f1482beab88844296a469aa135fbaebcec9d.tar.gz
protobuf-df67f1482beab88844296a469aa135fbaebcec9d.tar.bz2
protobuf-df67f1482beab88844296a469aa135fbaebcec9d.zip
Fix custom options behaviour
Diffstat (limited to 'src/ProtocolBuffers/Descriptors/MessageDescriptor.cs')
-rw-r--r--src/ProtocolBuffers/Descriptors/MessageDescriptor.cs49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/ProtocolBuffers/Descriptors/MessageDescriptor.cs b/src/ProtocolBuffers/Descriptors/MessageDescriptor.cs
index 17ad37fd..cdd75a0c 100644
--- a/src/ProtocolBuffers/Descriptors/MessageDescriptor.cs
+++ b/src/ProtocolBuffers/Descriptors/MessageDescriptor.cs
@@ -29,6 +29,7 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+using System;
using System.Collections.Generic;
using Google.ProtocolBuffers.DescriptorProtos;
@@ -123,6 +124,15 @@ namespace Google.ProtocolBuffers.Descriptors {
}
/// <summary>
+ /// Finds a field by field name.
+ /// </summary>
+ /// <param name="name">The unqualified name of the field (e.g. "foo").</param>
+ /// <returns>The field's descriptor, or null if not found.</returns>
+ public FieldDescriptor FindFieldByName(String name) {
+ return File.DescriptorPool.FindSymbol<FieldDescriptor>(FullName + "." + name);
+ }
+
+ /// <summary>
/// Finds a field by field number.
/// </summary>
/// <param name="number">The field number within this message type.</param>
@@ -132,6 +142,22 @@ namespace Google.ProtocolBuffers.Descriptors {
}
/// <summary>
+ /// Finds a field by its property name, as it would be generated by protogen.
+ /// </summary>
+ /// <param name="propertyName">The property name within this message type.</param>
+ /// <returns>The field's descriptor, or null if not found.</returns>
+ public FieldDescriptor FindFieldByPropertyName(string propertyName) {
+ // For reasonably short messages, this will be more efficient than a dictionary
+ // lookup. It also means we don't need to do things lazily with locks etc.
+ foreach (FieldDescriptor field in Fields) {
+ if (field.CSharpOptions.PropertyName == propertyName) {
+ return field;
+ }
+ }
+ return null;
+ }
+
+ /// <summary>
/// Finds a nested descriptor by name. The is valid for fields, nested
/// message types and enums.
/// </summary>
@@ -198,5 +224,28 @@ namespace Google.ProtocolBuffers.Descriptors {
}
return false;
}
+
+ /// <summary>
+ /// See FileDescriptor.ReplaceProto
+ /// </summary>
+ internal override void ReplaceProto(DescriptorProto newProto) {
+ base.ReplaceProto(newProto);
+
+ for (int i = 0; i < nestedTypes.Count; i++) {
+ nestedTypes[i].ReplaceProto(newProto.GetNestedType(i));
+ }
+
+ for (int i = 0; i < enumTypes.Count; i++) {
+ enumTypes[i].ReplaceProto(newProto.GetEnumType(i));
+ }
+
+ for (int i = 0; i < fields.Count; i++) {
+ fields[i].ReplaceProto(newProto.GetField(i));
+ }
+
+ for (int i = 0; i < extensions.Count; i++) {
+ extensions[i].ReplaceProto(newProto.GetExtension(i));
+ }
+ }
}
}