aboutsummaryrefslogtreecommitdiff
path: root/src/ProtocolBuffers
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2009-01-27 14:43:10 +0000
committerJon Skeet <skeet@pobox.com>2009-01-27 14:43:10 +0000
commit49fcd4f794bb96c3dcf729f81c0ffcb19fdadc14 (patch)
tree8ec88242bda7104a649c2273770605f89a4aba37 /src/ProtocolBuffers
parent642a8140c88dfb61f5f4812fc179e4f42beb4978 (diff)
downloadprotobuf-49fcd4f794bb96c3dcf729f81c0ffcb19fdadc14.tar.gz
protobuf-49fcd4f794bb96c3dcf729f81c0ffcb19fdadc14.tar.bz2
protobuf-49fcd4f794bb96c3dcf729f81c0ffcb19fdadc14.zip
Merge extensions correctly
Diffstat (limited to 'src/ProtocolBuffers')
-rw-r--r--src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs7
-rw-r--r--src/ProtocolBuffers/DynamicMessage.cs7
-rw-r--r--src/ProtocolBuffers/ExtendableBuilder.cs6
3 files changed, 14 insertions, 6 deletions
diff --git a/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs b/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs
index 67fdf966..4206f261 100644
--- a/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs
+++ b/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs
@@ -3936,6 +3936,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if (other.uninterpretedOption_.Count != 0) {
base.AddRange(other.uninterpretedOption_, result.uninterpretedOption_);
}
+ this.MergeExtensionFields(other);
this.MergeUnknownFields(other.UnknownFields);
return this;
}
@@ -4273,6 +4274,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if (other.uninterpretedOption_.Count != 0) {
base.AddRange(other.uninterpretedOption_, result.uninterpretedOption_);
}
+ this.MergeExtensionFields(other);
this.MergeUnknownFields(other.UnknownFields);
return this;
}
@@ -4565,6 +4567,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if (other.uninterpretedOption_.Count != 0) {
base.AddRange(other.uninterpretedOption_, result.uninterpretedOption_);
}
+ this.MergeExtensionFields(other);
this.MergeUnknownFields(other.UnknownFields);
return this;
}
@@ -4839,6 +4842,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if (other.uninterpretedOption_.Count != 0) {
base.AddRange(other.uninterpretedOption_, result.uninterpretedOption_);
}
+ this.MergeExtensionFields(other);
this.MergeUnknownFields(other.UnknownFields);
return this;
}
@@ -5063,6 +5067,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if (other.uninterpretedOption_.Count != 0) {
base.AddRange(other.uninterpretedOption_, result.uninterpretedOption_);
}
+ this.MergeExtensionFields(other);
this.MergeUnknownFields(other.UnknownFields);
return this;
}
@@ -5287,6 +5292,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if (other.uninterpretedOption_.Count != 0) {
base.AddRange(other.uninterpretedOption_, result.uninterpretedOption_);
}
+ this.MergeExtensionFields(other);
this.MergeUnknownFields(other.UnknownFields);
return this;
}
@@ -5511,6 +5517,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos {
if (other.uninterpretedOption_.Count != 0) {
base.AddRange(other.uninterpretedOption_, result.uninterpretedOption_);
}
+ this.MergeExtensionFields(other);
this.MergeUnknownFields(other.UnknownFields);
return this;
}
diff --git a/src/ProtocolBuffers/DynamicMessage.cs b/src/ProtocolBuffers/DynamicMessage.cs
index 812be1c8..b740013b 100644
--- a/src/ProtocolBuffers/DynamicMessage.cs
+++ b/src/ProtocolBuffers/DynamicMessage.cs
@@ -284,15 +284,12 @@ namespace Google.ProtocolBuffers {
throw new ArgumentException("MergeFrom(IMessage) can only merge messages of the same type.");
}
fields.MergeFrom(other);
+ MergeUnknownFields(other.UnknownFields);
return this;
}
public override Builder MergeFrom(DynamicMessage other) {
- if (other.DescriptorForType != type) {
- throw new ArgumentException("MergeFrom(IMessage) can only merge messages of the same type.");
- }
- fields.MergeFrom(other);
- return this;
+ return MergeFrom((IMessage)other);
}
public override DynamicMessage Build() {
diff --git a/src/ProtocolBuffers/ExtendableBuilder.cs b/src/ProtocolBuffers/ExtendableBuilder.cs
index 7f4461cb..b88f2994 100644
--- a/src/ProtocolBuffers/ExtendableBuilder.cs
+++ b/src/ProtocolBuffers/ExtendableBuilder.cs
@@ -159,12 +159,16 @@ namespace Google.ProtocolBuffers {
public override TBuilder AddRepeatedField(FieldDescriptor field, object value) {
if (field.IsExtension) {
ExtendableMessage<TMessage, TBuilder> message = MessageBeingBuilt;
- message.VerifyContainingType(field);
+ message.VerifyContainingType(field);
message.Extensions.AddRepeatedField(field, value);
return ThisBuilder;
} else {
return base.AddRepeatedField(field, value);
}
}
+
+ protected void MergeExtensionFields(ExtendableMessage<TMessage, TBuilder> other) {
+ MessageBeingBuilt.Extensions.MergeFrom(other.Extensions);
+ }
}
}