From ca4cbda9ded3b96f7c2053fdf091055b871ed30e Mon Sep 17 00:00:00 2001 From: Jon Skeet Date: Thu, 14 Aug 2008 20:35:29 +0100 Subject: [PATCH] Extensions don't need to go under a separate type. --- csharp/ProtocolBuffers.Test/DescriptorsTest.cs | 2 +- csharp/ProtocolBuffers.Test/MessageTest.cs | 8 ++++---- .../TestProtos/UnitTestMessageSetProtoFile.cs | 8 ++++---- .../TestProtos/UnitTestOptimizeForProtoFile.cs | 4 ++-- .../TestProtos/UnitTestProtoFile.cs | 10 +++++----- csharp/ProtocolBuffers.Test/WireFormatTest.cs | 12 ++++++------ .../protobuf/compiler/csharp/csharp_message.cc | 12 +++++++----- 7 files changed, 29 insertions(+), 27 deletions(-) diff --git a/csharp/ProtocolBuffers.Test/DescriptorsTest.cs b/csharp/ProtocolBuffers.Test/DescriptorsTest.cs index 5f47de1be3..6e406af55d 100644 --- a/csharp/ProtocolBuffers.Test/DescriptorsTest.cs +++ b/csharp/ProtocolBuffers.Test/DescriptorsTest.cs @@ -114,7 +114,7 @@ namespace Google.ProtocolBuffers { FieldDescriptor messageField = messageType.FindDescriptor("optional_foreign_message"); FieldDescriptor cordField = messageType.FindDescriptor("optional_cord"); FieldDescriptor extension = UnitTestProtoFile.OptionalInt32Extension.Descriptor; - FieldDescriptor nestedExtension = TestRequired.Types.Single.Descriptor; + FieldDescriptor nestedExtension = TestRequired.Single.Descriptor; Assert.AreEqual("optional_int32", primitiveField.Name); Assert.AreEqual("protobuf_unittest.TestAllTypes.optional_int32", diff --git a/csharp/ProtocolBuffers.Test/MessageTest.cs b/csharp/ProtocolBuffers.Test/MessageTest.cs index c03be0cef0..6d56f0e5ff 100644 --- a/csharp/ProtocolBuffers.Test/MessageTest.cs +++ b/csharp/ProtocolBuffers.Test/MessageTest.cs @@ -116,16 +116,16 @@ namespace Google.ProtocolBuffers { Assert.IsTrue(builder.IsInitialized); - builder.SetExtension(TestRequired.Types.Single, TestRequiredUninitialized); + builder.SetExtension(TestRequired.Single, TestRequiredUninitialized); Assert.IsFalse(builder.IsInitialized); - builder.SetExtension(TestRequired.Types.Single, TestRequiredInitialized); + builder.SetExtension(TestRequired.Single, TestRequiredInitialized); Assert.IsTrue(builder.IsInitialized); - builder.AddExtension(TestRequired.Types.Multi, TestRequiredUninitialized); + builder.AddExtension(TestRequired.Multi, TestRequiredUninitialized); Assert.IsFalse(builder.IsInitialized); - builder.SetExtension(TestRequired.Types.Multi, 0, TestRequiredInitialized); + builder.SetExtension(TestRequired.Multi, 0, TestRequiredInitialized); Assert.IsTrue(builder.IsInitialized); } diff --git a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs index 8599f65ba8..a1189c832a 100644 --- a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs +++ b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs @@ -518,10 +518,10 @@ namespace Google.ProtocolBuffers.TestProtos { get { return self::UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_TestMessageSetExtension1__FieldAccessorTable; } } + public static readonly pb::GeneratedExtensionBase MessageSetExtension = + pb::GeneratedSingleExtension.CreateInstance(Descriptor.Extensions[0]); #region Nested types public static class Types { - public static readonly pb::GeneratedExtensionBase MessageSetExtension = - pb::GeneratedSingleExtension.CreateInstance(Descriptor.Extensions[0]); } #endregion @@ -728,10 +728,10 @@ namespace Google.ProtocolBuffers.TestProtos { get { return self::UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_TestMessageSetExtension2__FieldAccessorTable; } } + public static readonly pb::GeneratedExtensionBase MessageSetExtension = + pb::GeneratedSingleExtension.CreateInstance(Descriptor.Extensions[0]); #region Nested types public static class Types { - public static readonly pb::GeneratedExtensionBase MessageSetExtension = - pb::GeneratedSingleExtension.CreateInstance(Descriptor.Extensions[0]); } #endregion diff --git a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs index b38a26b1f8..46b9084320 100644 --- a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs +++ b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs @@ -75,10 +75,10 @@ namespace Google.ProtocolBuffers.TestProtos { get { return self::UnitTestOptimizeForProtoFile.internal__static_protobuf_unittest_TestOptimizedForSize__FieldAccessorTable; } } + public static readonly pb::GeneratedExtensionBase TestExtension = + pb::GeneratedSingleExtension.CreateInstance(Descriptor.Extensions[0]); #region Nested types public static class Types { - public static readonly pb::GeneratedExtensionBase TestExtension = - pb::GeneratedSingleExtension.CreateInstance(Descriptor.Extensions[0]); } #endregion diff --git a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs index 4c7dd75d19..9a22a800cf 100644 --- a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs +++ b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs @@ -6147,13 +6147,13 @@ namespace Google.ProtocolBuffers.TestProtos { get { return self::UnitTestProtoFile.internal__static_protobuf_unittest_TestRequired__FieldAccessorTable; } } + public static readonly pb::GeneratedExtensionBase Single = + pb::GeneratedSingleExtension.CreateInstance(Descriptor.Extensions[0]); + public static readonly + pb::GeneratedExtensionBase> Multi = + pb::GeneratedRepeatExtension.CreateInstance(Descriptor.Extensions[1]); #region Nested types public static class Types { - public static readonly pb::GeneratedExtensionBase Single = - pb::GeneratedSingleExtension.CreateInstance(Descriptor.Extensions[0]); - public static readonly - pb::GeneratedExtensionBase> Multi = - pb::GeneratedRepeatExtension.CreateInstance(Descriptor.Extensions[1]); } #endregion diff --git a/csharp/ProtocolBuffers.Test/WireFormatTest.cs b/csharp/ProtocolBuffers.Test/WireFormatTest.cs index ecf8730669..e0451f89ac 100644 --- a/csharp/ProtocolBuffers.Test/WireFormatTest.cs +++ b/csharp/ProtocolBuffers.Test/WireFormatTest.cs @@ -121,10 +121,10 @@ namespace Google.ProtocolBuffers { TestMessageSet messageSet = TestMessageSet.CreateBuilder() .SetExtension( - TestMessageSetExtension1.Types.MessageSetExtension, + TestMessageSetExtension1.MessageSetExtension, TestMessageSetExtension1.CreateBuilder().SetI(123).Build()) .SetExtension( - TestMessageSetExtension2.Types.MessageSetExtension, + TestMessageSetExtension2.MessageSetExtension, TestMessageSetExtension2.CreateBuilder().SetStr("foo").Build()) .SetUnknownFields( UnknownFieldSet.CreateBuilder() @@ -159,8 +159,8 @@ namespace Google.ProtocolBuffers { [Test] public void ParseMessageSet() { ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance(); - extensionRegistry.Add(TestMessageSetExtension1.Types.MessageSetExtension); - extensionRegistry.Add(TestMessageSetExtension2.Types.MessageSetExtension); + extensionRegistry.Add(TestMessageSetExtension1.MessageSetExtension); + extensionRegistry.Add(TestMessageSetExtension2.MessageSetExtension); // Set up a RawMessageSet with two known messages and an unknown one. RawMessageSet raw = @@ -194,8 +194,8 @@ namespace Google.ProtocolBuffers { TestMessageSet messageSet = TestMessageSet.ParseFrom(data, extensionRegistry); - Assert.AreEqual(123, messageSet.GetExtension(TestMessageSetExtension1.Types.MessageSetExtension).I); - Assert.AreEqual("foo", messageSet.GetExtension(TestMessageSetExtension2.Types.MessageSetExtension).Str); + Assert.AreEqual(123, messageSet.GetExtension(TestMessageSetExtension1.MessageSetExtension).I); + Assert.AreEqual("foo", messageSet.GetExtension(TestMessageSetExtension2.MessageSetExtension).Str); // Check for unknown field with type LENGTH_DELIMITED, // number UNKNOWN_TYPE_ID, and contents "bar". diff --git a/src/google/protobuf/compiler/csharp/csharp_message.cc b/src/google/protobuf/compiler/csharp/csharp_message.cc index c74fb4b3be..689e4accde 100644 --- a/src/google/protobuf/compiler/csharp/csharp_message.cc +++ b/src/google/protobuf/compiler/csharp/csharp_message.cc @@ -237,9 +237,14 @@ void MessageGenerator::Generate(io::Printer* printer) { "fileclass", ClassName(descriptor_->file()), "identifier", UniqueFileScopeIdentifier(descriptor_)); + // Extensions don't need to go in an extra nested type + for (int i = 0; i < descriptor_->extension_count(); i++) { + ExtensionGenerator(descriptor_->extension(i)).Generate(printer); + } + if (descriptor_->enum_type_count() - + descriptor_->nested_type_count() - + descriptor_->extension_count() > 0) { + + descriptor_->nested_type_count() + + descriptor_->extension_count() > 0) { printer->Print("#region Nested types\r\n"); printer->Print("public static class Types {\r\n"); printer->Indent(); @@ -252,9 +257,6 @@ void MessageGenerator::Generate(io::Printer* printer) { MessageGenerator(descriptor_->nested_type(i)).Generate(printer); } - for (int i = 0; i < descriptor_->extension_count(); i++) { - ExtensionGenerator(descriptor_->extension(i)).Generate(printer); - } printer->Outdent(); printer->Print("}\r\n"); printer->Print("#endregion\r\n\r\n");