Pārlūkot izejas kodu

Extensions don't need to go under a separate type.

Jon Skeet 17 gadi atpakaļ
vecāks
revīzija
ca4cbda9de

+ 1 - 1
csharp/ProtocolBuffers.Test/DescriptorsTest.cs

@@ -114,7 +114,7 @@ namespace Google.ProtocolBuffers {
       FieldDescriptor messageField = messageType.FindDescriptor<FieldDescriptor>("optional_foreign_message");
       FieldDescriptor cordField = messageType.FindDescriptor<FieldDescriptor>("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",

+ 4 - 4
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);
     }
 

+ 4 - 4
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<self::TestMessageSetExtension1> MessageSetExtension =
+          pb::GeneratedSingleExtension<self::TestMessageSetExtension1>.CreateInstance(Descriptor.Extensions[0]);
     #region Nested types
     public static class Types {
-      public static readonly pb::GeneratedExtensionBase<self::TestMessageSetExtension1> MessageSetExtension =
-            pb::GeneratedSingleExtension<self::TestMessageSetExtension1>.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<self::TestMessageSetExtension2> MessageSetExtension =
+          pb::GeneratedSingleExtension<self::TestMessageSetExtension2>.CreateInstance(Descriptor.Extensions[0]);
     #region Nested types
     public static class Types {
-      public static readonly pb::GeneratedExtensionBase<self::TestMessageSetExtension2> MessageSetExtension =
-            pb::GeneratedSingleExtension<self::TestMessageSetExtension2>.CreateInstance(Descriptor.Extensions[0]);
     }
     #endregion
     

+ 2 - 2
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<int> TestExtension =
+          pb::GeneratedSingleExtension<int>.CreateInstance(Descriptor.Extensions[0]);
     #region Nested types
     public static class Types {
-      public static readonly pb::GeneratedExtensionBase<int> TestExtension =
-            pb::GeneratedSingleExtension<int>.CreateInstance(Descriptor.Extensions[0]);
     }
     #endregion
     

+ 5 - 5
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<self::TestRequired> Single =
+          pb::GeneratedSingleExtension<self::TestRequired>.CreateInstance(Descriptor.Extensions[0]);
+    public static readonly
+      pb::GeneratedExtensionBase<scg::IList<self::TestRequired>> Multi =
+          pb::GeneratedRepeatExtension<self::TestRequired>.CreateInstance(Descriptor.Extensions[1]);
     #region Nested types
     public static class Types {
-      public static readonly pb::GeneratedExtensionBase<self::TestRequired> Single =
-            pb::GeneratedSingleExtension<self::TestRequired>.CreateInstance(Descriptor.Extensions[0]);
-      public static readonly
-        pb::GeneratedExtensionBase<scg::IList<self::TestRequired>> Multi =
-            pb::GeneratedRepeatExtension<self::TestRequired>.CreateInstance(Descriptor.Extensions[1]);
     }
     #endregion
     

+ 6 - 6
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".

+ 7 - 5
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");