Jelajahi Sumber

Move some other tests off descriptor.proto.

These don't need to use descriptor, they just needed some object hierarchy and
the ability to create extensions; so create custom types for this instead so
only tests that have to be on descriptor.proto are.
Thomas Van Lenten 1 tahun lalu
induk
melakukan
fef831da63

+ 4 - 5
Protos/SwiftProtobufPluginLibraryTests/pluginlib_descriptor_test.proto

@@ -21,7 +21,6 @@ package swift_descriptor_test;
 // Use the option to test swift name generation.
 option swift_prefix = "SDT";
 
-import "google/protobuf/descriptor.proto";
 import "pluginlib_descriptor_test_import.proto";
 
 enum TopLevelEnum {
@@ -61,23 +60,23 @@ message TopLevelMessage2 {
 }
 
 message ExternalRefs {
-  optional google.protobuf.DescriptorProto desc = 1;
+  optional swift_descriptor_test.import.ExtendableOne one = 1;
   optional swift_descriptor_test.import.Version ver = 2;
 }
 
-extend google.protobuf.FieldOptions {
+extend swift_descriptor_test.import.ExtendableOne {
   optional string ext_str = 90000;
 }
 
 message ScoperForExt {
-  extend google.protobuf.MessageOptions {
+  extend swift_descriptor_test.import.ExtendableOne.ExtendableTwo {
     optional TopLevelEnum ext_enum = 99001;
     optional TopLevelMessage2 ext_msg = 99002;
   }
 }
 
 service SomeService {
-  rpc Foo(google.protobuf.DescriptorProto) returns (swift_descriptor_test.import.Version);
+  rpc Foo(swift_descriptor_test.import.ExtendableOne) returns (swift_descriptor_test.import.Version);
   rpc Bar(TopLevelMessage) returns (TopLevelMessage2);
 }
 

+ 11 - 0
Protos/SwiftProtobufPluginLibraryTests/pluginlib_descriptor_test_import.proto

@@ -24,3 +24,14 @@ message Version {
   optional int32 patch = 3;
   optional string suffix = 4;
 }
+
+message ExtendableOne {
+
+  message ExtendableTwo {
+    extensions 1000 to max;
+  }
+
+  optional ExtendableTwo sub_msg_field = 1;
+
+  extensions 1000 to max;
+}

+ 18 - 18
Reference/SwiftProtobufPluginLibraryTests/pluginlib_descriptor_test.pb.swift

@@ -244,14 +244,14 @@ struct SDTExternalRefs: Sendable {
   // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
   // methods supported on all messages.
 
-  var desc: SwiftProtobuf.Google_Protobuf_DescriptorProto {
-    get {return _desc ?? SwiftProtobuf.Google_Protobuf_DescriptorProto()}
-    set {_desc = newValue}
+  var one: SwiftDescriptorTest_Import_ExtendableOne {
+    get {return _one ?? SwiftDescriptorTest_Import_ExtendableOne()}
+    set {_one = newValue}
   }
-  /// Returns true if `desc` has been explicitly set.
-  var hasDesc: Bool {return self._desc != nil}
-  /// Clears the value of `desc`. Subsequent reads from it will return its default value.
-  mutating func clearDesc() {self._desc = nil}
+  /// Returns true if `one` has been explicitly set.
+  var hasOne: Bool {return self._one != nil}
+  /// Clears the value of `one`. Subsequent reads from it will return its default value.
+  mutating func clearOne() {self._one = nil}
 
   var ver: SwiftDescriptorTest_Import_Version {
     get {return _ver ?? SwiftDescriptorTest_Import_Version()}
@@ -266,7 +266,7 @@ struct SDTExternalRefs: Sendable {
 
   init() {}
 
-  fileprivate var _desc: SwiftProtobuf.Google_Protobuf_DescriptorProto? = nil
+  fileprivate var _one: SwiftDescriptorTest_Import_ExtendableOne? = nil
   fileprivate var _ver: SwiftDescriptorTest_Import_Version? = nil
 }
 
@@ -430,7 +430,7 @@ struct SDTProto2MessageForPresence: Sendable {
 // declaration. To avoid naming collisions, the names are prefixed with the name of
 // the scope where the extend directive occurs.
 
-extension SwiftProtobuf.Google_Protobuf_FieldOptions {
+extension SwiftDescriptorTest_Import_ExtendableOne {
 
   var SDTextStr: String {
     get {return getExtensionValue(ext: SDTExtensions_ext_str) ?? String()}
@@ -448,7 +448,7 @@ extension SwiftProtobuf.Google_Protobuf_FieldOptions {
   }
 }
 
-extension SwiftProtobuf.Google_Protobuf_MessageOptions {
+extension SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo {
 
   var SDTScoperForExt_extEnum: SDTTopLevelEnum {
     get {return getExtensionValue(ext: SDTScoperForExt.Extensions.ext_enum) ?? .valueZero}
@@ -498,19 +498,19 @@ let SDTPluginlibDescriptorTest_Extensions: SwiftProtobuf.SimpleExtensionMap = [
 // constructing a `SimpleExtensionMap`, otherwise, use the above _Extension Properties_
 // accessors for the extension fields on the messages directly.
 
-let SDTExtensions_ext_str = SwiftProtobuf.MessageExtension<SwiftProtobuf.OptionalExtensionField<SwiftProtobuf.ProtobufString>, SwiftProtobuf.Google_Protobuf_FieldOptions>(
+let SDTExtensions_ext_str = SwiftProtobuf.MessageExtension<SwiftProtobuf.OptionalExtensionField<SwiftProtobuf.ProtobufString>, SwiftDescriptorTest_Import_ExtendableOne>(
   _protobuf_fieldNumber: 90000,
   fieldName: "swift_descriptor_test.ext_str"
 )
 
 extension SDTScoperForExt {
   enum Extensions {
-    static let ext_enum = SwiftProtobuf.MessageExtension<SwiftProtobuf.OptionalEnumExtensionField<SDTTopLevelEnum>, SwiftProtobuf.Google_Protobuf_MessageOptions>(
+    static let ext_enum = SwiftProtobuf.MessageExtension<SwiftProtobuf.OptionalEnumExtensionField<SDTTopLevelEnum>, SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo>(
       _protobuf_fieldNumber: 99001,
       fieldName: "swift_descriptor_test.ScoperForExt.ext_enum"
     )
 
-    static let ext_msg = SwiftProtobuf.MessageExtension<SwiftProtobuf.OptionalMessageExtensionField<SDTTopLevelMessage2>, SwiftProtobuf.Google_Protobuf_MessageOptions>(
+    static let ext_msg = SwiftProtobuf.MessageExtension<SwiftProtobuf.OptionalMessageExtensionField<SDTTopLevelMessage2>, SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo>(
       _protobuf_fieldNumber: 99002,
       fieldName: "swift_descriptor_test.ScoperForExt.ext_msg"
     )
@@ -868,12 +868,12 @@ extension SDTTopLevelMessage2: SwiftProtobuf.Message, SwiftProtobuf._MessageImpl
 extension SDTExternalRefs: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
   static let protoMessageName: String = _protobuf_package + ".ExternalRefs"
   static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
-    1: .same(proto: "desc"),
+    1: .same(proto: "one"),
     2: .same(proto: "ver"),
   ]
 
   public var isInitialized: Bool {
-    if let v = self._desc, !v.isInitialized {return false}
+    if let v = self._one, !v.isInitialized {return false}
     return true
   }
 
@@ -883,7 +883,7 @@ extension SDTExternalRefs: SwiftProtobuf.Message, SwiftProtobuf._MessageImplemen
       // allocates stack space for every case branch when no optimizations are
       // enabled. https://github.com/apple/swift-protobuf/issues/1034
       switch fieldNumber {
-      case 1: try { try decoder.decodeSingularMessageField(value: &self._desc) }()
+      case 1: try { try decoder.decodeSingularMessageField(value: &self._one) }()
       case 2: try { try decoder.decodeSingularMessageField(value: &self._ver) }()
       default: break
       }
@@ -895,7 +895,7 @@ extension SDTExternalRefs: SwiftProtobuf.Message, SwiftProtobuf._MessageImplemen
     // allocates stack space for every if/case branch local when no optimizations
     // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
     // https://github.com/apple/swift-protobuf/issues/1182
-    try { if let v = self._desc {
+    try { if let v = self._one {
       try visitor.visitSingularMessageField(value: v, fieldNumber: 1)
     } }()
     try { if let v = self._ver {
@@ -905,7 +905,7 @@ extension SDTExternalRefs: SwiftProtobuf.Message, SwiftProtobuf._MessageImplemen
   }
 
   static func ==(lhs: SDTExternalRefs, rhs: SDTExternalRefs) -> Bool {
-    if lhs._desc != rhs._desc {return false}
+    if lhs._one != rhs._one {return false}
     if lhs._ver != rhs._ver {return false}
     if lhs.unknownFields != rhs.unknownFields {return false}
     return true

+ 109 - 0
Reference/SwiftProtobufPluginLibraryTests/pluginlib_descriptor_test_import.pb.swift

@@ -88,6 +88,40 @@ struct SwiftDescriptorTest_Import_Version: Sendable {
   fileprivate var _suffix: String? = nil
 }
 
+struct SwiftDescriptorTest_Import_ExtendableOne: SwiftProtobuf.ExtensibleMessage, Sendable {
+  // SwiftProtobuf.Message conformance is added in an extension below. See the
+  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
+  // methods supported on all messages.
+
+  var subMsgField: SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo {
+    get {return _subMsgField ?? SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo()}
+    set {_subMsgField = newValue}
+  }
+  /// Returns true if `subMsgField` has been explicitly set.
+  var hasSubMsgField: Bool {return self._subMsgField != nil}
+  /// Clears the value of `subMsgField`. Subsequent reads from it will return its default value.
+  mutating func clearSubMsgField() {self._subMsgField = nil}
+
+  var unknownFields = SwiftProtobuf.UnknownStorage()
+
+  struct ExtendableTwo: SwiftProtobuf.ExtensibleMessage, Sendable {
+    // SwiftProtobuf.Message conformance is added in an extension below. See the
+    // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
+    // methods supported on all messages.
+
+    var unknownFields = SwiftProtobuf.UnknownStorage()
+
+    init() {}
+
+    var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet()
+  }
+
+  init() {}
+
+  var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet()
+  fileprivate var _subMsgField: SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo? = nil
+}
+
 // MARK: - Code below here is support for the SwiftProtobuf runtime.
 
 fileprivate let _protobuf_package = "swift_descriptor_test.import"
@@ -145,3 +179,78 @@ extension SwiftDescriptorTest_Import_Version: SwiftProtobuf.Message, SwiftProtob
     return true
   }
 }
+
+extension SwiftDescriptorTest_Import_ExtendableOne: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
+  static let protoMessageName: String = _protobuf_package + ".ExtendableOne"
+  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
+    1: .standard(proto: "sub_msg_field"),
+  ]
+
+  public var isInitialized: Bool {
+    if !_protobuf_extensionFieldValues.isInitialized {return false}
+    if let v = self._subMsgField, !v.isInitialized {return false}
+    return true
+  }
+
+  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
+    while let fieldNumber = try decoder.nextFieldNumber() {
+      // The use of inline closures is to circumvent an issue where the compiler
+      // allocates stack space for every case branch when no optimizations are
+      // enabled. https://github.com/apple/swift-protobuf/issues/1034
+      switch fieldNumber {
+      case 1: try { try decoder.decodeSingularMessageField(value: &self._subMsgField) }()
+      case 1000..<536870912:
+        try { try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: SwiftDescriptorTest_Import_ExtendableOne.self, fieldNumber: fieldNumber) }()
+      default: break
+      }
+    }
+  }
+
+  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
+    // The use of inline closures is to circumvent an issue where the compiler
+    // allocates stack space for every if/case branch local when no optimizations
+    // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
+    // https://github.com/apple/swift-protobuf/issues/1182
+    try { if let v = self._subMsgField {
+      try visitor.visitSingularMessageField(value: v, fieldNumber: 1)
+    } }()
+    try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912)
+    try unknownFields.traverse(visitor: &visitor)
+  }
+
+  static func ==(lhs: SwiftDescriptorTest_Import_ExtendableOne, rhs: SwiftDescriptorTest_Import_ExtendableOne) -> Bool {
+    if lhs._subMsgField != rhs._subMsgField {return false}
+    if lhs.unknownFields != rhs.unknownFields {return false}
+    if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false}
+    return true
+  }
+}
+
+extension SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
+  static let protoMessageName: String = SwiftDescriptorTest_Import_ExtendableOne.protoMessageName + ".ExtendableTwo"
+  static let _protobuf_nameMap = SwiftProtobuf._NameMap()
+
+  public var isInitialized: Bool {
+    if !_protobuf_extensionFieldValues.isInitialized {return false}
+    return true
+  }
+
+  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
+    while let fieldNumber = try decoder.nextFieldNumber() {
+      if (1000 <= fieldNumber && fieldNumber < 536870912) {
+        try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo.self, fieldNumber: fieldNumber)
+      }
+    }
+  }
+
+  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
+    try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912)
+    try unknownFields.traverse(visitor: &visitor)
+  }
+
+  static func ==(lhs: SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo, rhs: SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo) -> Bool {
+    if lhs.unknownFields != rhs.unknownFields {return false}
+    if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false}
+    return true
+  }
+}

File diff ditekan karena terlalu besar
+ 204 - 6004
Tests/SwiftProtobufPluginLibraryTests/DescriptorTestData.swift


+ 54 - 54
Tests/SwiftProtobufPluginLibraryTests/Test_Descriptor.swift

@@ -29,44 +29,43 @@ final class Test_Descriptor: XCTestCase {
     let fileSet = try Google_Protobuf_FileDescriptorSet(serializedBytes: fileDescriptorSetBytes)
 
     let descriptorSet = DescriptorSet(proto: fileSet)
-    XCTAssertEqual(descriptorSet.files.count, 8)
+    XCTAssertEqual(descriptorSet.files.count, 7)
     // descriptor.proto documents the protoc will order the files based on the import
     // from plugin on descriptor.
-    XCTAssertEqual(descriptorSet.files[0].name, "google/protobuf/descriptor.proto")
-    XCTAssertEqual(descriptorSet.files[1].name, "pluginlib_descriptor_test_import.proto")
-    XCTAssertEqual(descriptorSet.files[2].name, "pluginlib_descriptor_test.proto")
-    XCTAssertEqual(descriptorSet.files[3].name, "pluginlib_descriptor_test2.proto")
-    XCTAssertEqual(descriptorSet.files[4].name, "pluginlib_descriptor_delimited.proto")
-    XCTAssertEqual(descriptorSet.files[5].name, "unittest_delimited_import.proto")
-    XCTAssertEqual(descriptorSet.files[6].name, "unittest_delimited.proto")
-    XCTAssertEqual(descriptorSet.files[7].name, "swift_protobuf_module_mappings.proto")
-
-    let descriptorFileDescriptor = descriptorSet.files[0]
-
-    XCTAssertEqual(descriptorFileDescriptor.enums.count, 1)
-    XCTAssertEqual(descriptorFileDescriptor.enums[0].fullName, "google.protobuf.Edition")
-    XCTAssertNil(descriptorFileDescriptor.enums[0].containingType)
-    XCTAssertEqual(descriptorFileDescriptor.messages[4].enums.count, 2)
-    XCTAssertEqual(descriptorFileDescriptor.messages[4].enums[0].fullName, "google.protobuf.FieldDescriptorProto.Type")
-    XCTAssertTrue(descriptorFileDescriptor.messages[4].enums[0].containingType === descriptorFileDescriptor.messages[4])
-    XCTAssertEqual(descriptorFileDescriptor.messages[4].enums[1].fullName, "google.protobuf.FieldDescriptorProto.Label")
-    XCTAssertTrue(descriptorFileDescriptor.messages[4].enums[1].containingType === descriptorFileDescriptor.messages[4])
-
-    let importFileDescriptor = descriptorSet.files[1]
-
-    XCTAssertEqual(importFileDescriptor.messages.count, 1)
+    XCTAssertEqual(descriptorSet.files[0].name, "pluginlib_descriptor_test_import.proto")
+    XCTAssertEqual(descriptorSet.files[1].name, "pluginlib_descriptor_test.proto")
+    XCTAssertEqual(descriptorSet.files[2].name, "pluginlib_descriptor_test2.proto")
+    XCTAssertEqual(descriptorSet.files[3].name, "pluginlib_descriptor_delimited.proto")
+    XCTAssertEqual(descriptorSet.files[4].name, "unittest_delimited_import.proto")
+    XCTAssertEqual(descriptorSet.files[5].name, "unittest_delimited.proto")
+    XCTAssertEqual(descriptorSet.files[6].name, "swift_protobuf_module_mappings.proto")
+
+    let importFileDescriptor = descriptorSet.files[0]
+
+    XCTAssertEqual(importFileDescriptor.messages.count, 2)
     XCTAssertEqual(importFileDescriptor.messages[0].fullName, "swift_descriptor_test.import.Version")
     XCTAssertNil(importFileDescriptor.messages[0].containingType)
     XCTAssertEqual(importFileDescriptor.messages[0].messages.count, 0)
     XCTAssertEqual(importFileDescriptor.enums.count, 0)
     XCTAssertEqual(importFileDescriptor.extensions.count, 0)
 
-    let testFileDesciptor = descriptorSet.files[2]
+    XCTAssertEqual(importFileDescriptor.messages[1].fullName, "swift_descriptor_test.import.ExtendableOne")
+    XCTAssertNil(importFileDescriptor.messages[1].containingType)
+    XCTAssertEqual(importFileDescriptor.messages[1].messages.count, 1)
+
+    XCTAssertEqual(importFileDescriptor.messages[1].messages[0].fullName, "swift_descriptor_test.import.ExtendableOne.ExtendableTwo")
+    XCTAssertEqual(importFileDescriptor.messages[1].messages[0].messages.count, 0)
+
+    let testFileDesciptor = descriptorSet.files[1]
 
     XCTAssertEqual(testFileDesciptor.enums.count, 1)
     XCTAssertEqual(testFileDesciptor.enums[0].fullName, "swift_descriptor_test.TopLevelEnum")
     XCTAssertNil(testFileDesciptor.enums[0].containingType)
 
+    XCTAssertEqual(testFileDesciptor.messages[0].enums.count, 1)
+    XCTAssertEqual(testFileDesciptor.messages[0].enums[0].fullName, "swift_descriptor_test.TopLevelMessage.SubEnum")
+    XCTAssertTrue(testFileDesciptor.messages[0].enums[0].containingType === testFileDesciptor.messages[0])
+
     XCTAssertEqual(testFileDesciptor.messages[0].oneofs.count, 1)
     XCTAssertEqual(testFileDesciptor.messages[0].oneofs[0].name, "o")
     XCTAssertEqual(testFileDesciptor.messages[1].oneofs.count, 0)
@@ -89,17 +88,16 @@ final class Test_Descriptor: XCTestCase {
 
     let descriptorSet = DescriptorSet(proto: fileSet)
 
-    XCTAssertTrue(descriptorSet.fileDescriptor(named: "google/protobuf/descriptor.proto") === descriptorSet.files[0])
-    XCTAssertTrue(descriptorSet.fileDescriptor(named: "pluginlib_descriptor_test_import.proto") === descriptorSet.files[1])
+    XCTAssertTrue(descriptorSet.fileDescriptor(named: "pluginlib_descriptor_test_import.proto") === descriptorSet.files[0])
 
-    XCTAssertTrue(descriptorSet.descriptor(named: "swift_descriptor_test.import.Version") === descriptorSet.files[1].messages[0])
-    XCTAssertTrue(descriptorSet.descriptor(named: "google.protobuf.DescriptorProto") === descriptorSet.files[0].messages[2])
-    XCTAssertTrue(descriptorSet.descriptor(named: "google.protobuf.DescriptorProto.ExtensionRange") === descriptorSet.files[0].messages[2].messages[0])
+    XCTAssertTrue(descriptorSet.descriptor(named: "swift_descriptor_test.import.Version") === descriptorSet.files[0].messages[0])
+    XCTAssertTrue(descriptorSet.descriptor(named: "swift_descriptor_test.TopLevelMessage") === descriptorSet.files[1].messages[0])
+    XCTAssertTrue(descriptorSet.descriptor(named: "swift_descriptor_test.TopLevelMessage.SubMessage") === descriptorSet.files[1].messages[0].messages[0])
 
-    XCTAssertTrue(descriptorSet.enumDescriptor(named: "google.protobuf.FieldDescriptorProto.Type") === descriptorSet.files[0].messages[4].enums[0])
-    XCTAssertTrue(descriptorSet.enumDescriptor(named: "google.protobuf.FieldDescriptorProto.Label") === descriptorSet.files[0].messages[4].enums[1])
+    XCTAssertTrue(descriptorSet.enumDescriptor(named: "swift_descriptor_test.TopLevelEnum") === descriptorSet.files[1].enums[0])
+    XCTAssertTrue(descriptorSet.enumDescriptor(named: "swift_descriptor_test.TopLevelMessage.SubEnum") === descriptorSet.files[1].messages[0].enums[0])
 
-    XCTAssertTrue(descriptorSet.serviceDescriptor(named: "swift_descriptor_test.SomeService") === descriptorSet.files[2].services[0])
+    XCTAssertTrue(descriptorSet.serviceDescriptor(named: "swift_descriptor_test.SomeService") === descriptorSet.files[1].services[0])
   }
 
   func testParents() throws {
@@ -110,11 +108,13 @@ final class Test_Descriptor: XCTestCase {
     let importVersion = descriptorSet.descriptor(named: "swift_descriptor_test.import.Version")!
     XCTAssertTrue(importVersion.containingType == nil)
 
-    let fieldDescProto = descriptorSet.descriptor(named: "google.protobuf.FieldDescriptorProto")!
-    let fieldDescType = descriptorSet.enumDescriptor(named: "google.protobuf.FieldDescriptorProto.Type")!
-    XCTAssertTrue(fieldDescType.containingType === fieldDescProto)
-    let fieldDescLabel = descriptorSet.enumDescriptor(named: "google.protobuf.FieldDescriptorProto.Label")!
-    XCTAssertTrue(fieldDescLabel.containingType === fieldDescProto)
+    let importExtendOne = descriptorSet.descriptor(named: "swift_descriptor_test.import.ExtendableOne")!
+    let importExtendTwo = descriptorSet.descriptor(named: "swift_descriptor_test.import.ExtendableOne.ExtendableTwo")!
+    XCTAssertTrue(importExtendTwo.containingType === importExtendOne)
+
+    let testDescriptor = descriptorSet.descriptor(named: "swift_descriptor_test.TopLevelMessage")!
+    let testEnum = descriptorSet.enumDescriptor(named: "swift_descriptor_test.TopLevelMessage.SubEnum")!
+    XCTAssertTrue(testEnum.containingType === testDescriptor)
 
     let serviceDescProto = descriptorSet.serviceDescriptor(named: "swift_descriptor_test.SomeService")!
     let fooMethod = serviceDescProto.methods[0]
@@ -122,17 +122,17 @@ final class Test_Descriptor: XCTestCase {
     let barMethod = serviceDescProto.methods[1]
     XCTAssertTrue(barMethod.service === serviceDescProto)
 
-    let descriptorFile = descriptorSet.files[0]
-    let importFile = descriptorSet.files[1]
-    let descriptorTestFile = descriptorSet.files[2]
+    let importFile = descriptorSet.files[0]
+    let testFile = descriptorSet.files[1]
 
     XCTAssertTrue(importVersion.file === importFile)
 
-    XCTAssertTrue(fieldDescProto.file === descriptorFile)
-    XCTAssertTrue(fieldDescType.file === descriptorFile)
-    XCTAssertTrue(fieldDescLabel.file === descriptorFile)
+    XCTAssertTrue(importExtendOne.file === importFile)
+    XCTAssertTrue(importExtendTwo.file === importFile)
 
-    XCTAssertTrue(serviceDescProto.file === descriptorTestFile)
+    XCTAssertTrue(testDescriptor.file === testFile)
+    XCTAssertTrue(testEnum.file === testFile)
+    XCTAssertTrue(serviceDescProto.file === testFile)
   }
 
   func testFields() throws {
@@ -173,13 +173,13 @@ final class Test_Descriptor: XCTestCase {
     XCTAssertTrue(topLevelMessage2.fields[1].messageType === topLevelMessage2)
 
     let externalRefs = descriptorSet.descriptor(named: "swift_descriptor_test.ExternalRefs")!
-    let googleProtobufDescriptorProto = descriptorSet.descriptor(named: "google.protobuf.DescriptorProto")!
+    let extendOne = descriptorSet.descriptor(named: "swift_descriptor_test.import.ExtendableOne")!
     let testImportVersion = descriptorSet.descriptor(named: "swift_descriptor_test.import.Version")!
 
     XCTAssertEqual(externalRefs.fields.count, 2)
-    XCTAssertEqual(externalRefs.fields[0].name, "desc")
+    XCTAssertEqual(externalRefs.fields[0].name, "one")
     XCTAssertEqual(externalRefs.fields[1].name, "ver")
-    XCTAssertTrue(externalRefs.fields[0].messageType === googleProtobufDescriptorProto)
+    XCTAssertTrue(externalRefs.fields[0].messageType === extendOne)
     XCTAssertTrue(externalRefs.fields[1].messageType === testImportVersion)
 
     // Proto2 Presence
@@ -316,22 +316,22 @@ final class Test_Descriptor: XCTestCase {
 
     let descriptorSet = DescriptorSet(proto: fileSet)
 
-    let googleProtobufFieldOptions = descriptorSet.descriptor(named: "google.protobuf.FieldOptions")!
-    let googleProtobufMessageOptions = descriptorSet.descriptor(named: "google.protobuf.MessageOptions")!
+    let extendOne = descriptorSet.descriptor(named: "swift_descriptor_test.import.ExtendableOne")!
+    let extendTwo = descriptorSet.descriptor(named: "swift_descriptor_test.import.ExtendableOne.ExtendableTwo")!
 
-    let descriptorTestFile = descriptorSet.files[2]
+    let descriptorTestFile = descriptorSet.files[1]
 
     let topLevelExt = descriptorTestFile.extensions[0]
     XCTAssertNil(topLevelExt.extensionScope)
-    XCTAssertTrue(topLevelExt.containingType === googleProtobufFieldOptions)
+    XCTAssertTrue(topLevelExt.containingType === extendOne)
 
     let extScoper = descriptorSet.descriptor(named: "swift_descriptor_test.ScoperForExt")!
     let nestedExt1 = descriptorTestFile.messages[3].extensions[0]
     let nestedExt2 = descriptorTestFile.messages[3].extensions[1]
     XCTAssertTrue(nestedExt1.extensionScope === extScoper)
-    XCTAssertTrue(nestedExt1.containingType === googleProtobufMessageOptions)
+    XCTAssertTrue(nestedExt1.containingType === extendTwo)
     XCTAssertTrue(nestedExt2.extensionScope === extScoper)
-    XCTAssertTrue(nestedExt2.containingType === googleProtobufMessageOptions)
+    XCTAssertTrue(nestedExt2.containingType === extendTwo)
 
     XCTAssertTrue(nestedExt1.enumType === descriptorTestFile.enums[0])
     XCTAssertTrue(nestedExt2.messageType === descriptorTestFile.messages[1])

+ 1 - 1
Tests/SwiftProtobufPluginLibraryTests/Test_FeatureResolver.swift

@@ -153,7 +153,7 @@ final class Test_FeatureResolver: XCTestCase {
                                              featureExtensions: [SwiftFeatureTest_Extensions_test,
                                                                  SDTExtensions_ext_str])) { e in
       XCTAssertEqual(e as! FeatureResolver.Error,
-                     FeatureResolver.Error.invalidExtension(type: "google.protobuf.FieldOptions"))
+                     FeatureResolver.Error.invalidExtension(type: "swift_descriptor_test.import.ExtendableOne"))
     }
   }
 

+ 18 - 18
Tests/SwiftProtobufPluginLibraryTests/pluginlib_descriptor_test.pb.swift

@@ -244,14 +244,14 @@ struct SDTExternalRefs: Sendable {
   // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
   // methods supported on all messages.
 
-  var desc: SwiftProtobuf.Google_Protobuf_DescriptorProto {
-    get {return _desc ?? SwiftProtobuf.Google_Protobuf_DescriptorProto()}
-    set {_desc = newValue}
+  var one: SwiftDescriptorTest_Import_ExtendableOne {
+    get {return _one ?? SwiftDescriptorTest_Import_ExtendableOne()}
+    set {_one = newValue}
   }
-  /// Returns true if `desc` has been explicitly set.
-  var hasDesc: Bool {return self._desc != nil}
-  /// Clears the value of `desc`. Subsequent reads from it will return its default value.
-  mutating func clearDesc() {self._desc = nil}
+  /// Returns true if `one` has been explicitly set.
+  var hasOne: Bool {return self._one != nil}
+  /// Clears the value of `one`. Subsequent reads from it will return its default value.
+  mutating func clearOne() {self._one = nil}
 
   var ver: SwiftDescriptorTest_Import_Version {
     get {return _ver ?? SwiftDescriptorTest_Import_Version()}
@@ -266,7 +266,7 @@ struct SDTExternalRefs: Sendable {
 
   init() {}
 
-  fileprivate var _desc: SwiftProtobuf.Google_Protobuf_DescriptorProto? = nil
+  fileprivate var _one: SwiftDescriptorTest_Import_ExtendableOne? = nil
   fileprivate var _ver: SwiftDescriptorTest_Import_Version? = nil
 }
 
@@ -430,7 +430,7 @@ struct SDTProto2MessageForPresence: Sendable {
 // declaration. To avoid naming collisions, the names are prefixed with the name of
 // the scope where the extend directive occurs.
 
-extension SwiftProtobuf.Google_Protobuf_FieldOptions {
+extension SwiftDescriptorTest_Import_ExtendableOne {
 
   var SDTextStr: String {
     get {return getExtensionValue(ext: SDTExtensions_ext_str) ?? String()}
@@ -448,7 +448,7 @@ extension SwiftProtobuf.Google_Protobuf_FieldOptions {
   }
 }
 
-extension SwiftProtobuf.Google_Protobuf_MessageOptions {
+extension SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo {
 
   var SDTScoperForExt_extEnum: SDTTopLevelEnum {
     get {return getExtensionValue(ext: SDTScoperForExt.Extensions.ext_enum) ?? .valueZero}
@@ -498,19 +498,19 @@ let SDTPluginlibDescriptorTest_Extensions: SwiftProtobuf.SimpleExtensionMap = [
 // constructing a `SimpleExtensionMap`, otherwise, use the above _Extension Properties_
 // accessors for the extension fields on the messages directly.
 
-let SDTExtensions_ext_str = SwiftProtobuf.MessageExtension<SwiftProtobuf.OptionalExtensionField<SwiftProtobuf.ProtobufString>, SwiftProtobuf.Google_Protobuf_FieldOptions>(
+let SDTExtensions_ext_str = SwiftProtobuf.MessageExtension<SwiftProtobuf.OptionalExtensionField<SwiftProtobuf.ProtobufString>, SwiftDescriptorTest_Import_ExtendableOne>(
   _protobuf_fieldNumber: 90000,
   fieldName: "swift_descriptor_test.ext_str"
 )
 
 extension SDTScoperForExt {
   enum Extensions {
-    static let ext_enum = SwiftProtobuf.MessageExtension<SwiftProtobuf.OptionalEnumExtensionField<SDTTopLevelEnum>, SwiftProtobuf.Google_Protobuf_MessageOptions>(
+    static let ext_enum = SwiftProtobuf.MessageExtension<SwiftProtobuf.OptionalEnumExtensionField<SDTTopLevelEnum>, SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo>(
       _protobuf_fieldNumber: 99001,
       fieldName: "swift_descriptor_test.ScoperForExt.ext_enum"
     )
 
-    static let ext_msg = SwiftProtobuf.MessageExtension<SwiftProtobuf.OptionalMessageExtensionField<SDTTopLevelMessage2>, SwiftProtobuf.Google_Protobuf_MessageOptions>(
+    static let ext_msg = SwiftProtobuf.MessageExtension<SwiftProtobuf.OptionalMessageExtensionField<SDTTopLevelMessage2>, SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo>(
       _protobuf_fieldNumber: 99002,
       fieldName: "swift_descriptor_test.ScoperForExt.ext_msg"
     )
@@ -868,12 +868,12 @@ extension SDTTopLevelMessage2: SwiftProtobuf.Message, SwiftProtobuf._MessageImpl
 extension SDTExternalRefs: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
   static let protoMessageName: String = _protobuf_package + ".ExternalRefs"
   static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
-    1: .same(proto: "desc"),
+    1: .same(proto: "one"),
     2: .same(proto: "ver"),
   ]
 
   public var isInitialized: Bool {
-    if let v = self._desc, !v.isInitialized {return false}
+    if let v = self._one, !v.isInitialized {return false}
     return true
   }
 
@@ -883,7 +883,7 @@ extension SDTExternalRefs: SwiftProtobuf.Message, SwiftProtobuf._MessageImplemen
       // allocates stack space for every case branch when no optimizations are
       // enabled. https://github.com/apple/swift-protobuf/issues/1034
       switch fieldNumber {
-      case 1: try { try decoder.decodeSingularMessageField(value: &self._desc) }()
+      case 1: try { try decoder.decodeSingularMessageField(value: &self._one) }()
       case 2: try { try decoder.decodeSingularMessageField(value: &self._ver) }()
       default: break
       }
@@ -895,7 +895,7 @@ extension SDTExternalRefs: SwiftProtobuf.Message, SwiftProtobuf._MessageImplemen
     // allocates stack space for every if/case branch local when no optimizations
     // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
     // https://github.com/apple/swift-protobuf/issues/1182
-    try { if let v = self._desc {
+    try { if let v = self._one {
       try visitor.visitSingularMessageField(value: v, fieldNumber: 1)
     } }()
     try { if let v = self._ver {
@@ -905,7 +905,7 @@ extension SDTExternalRefs: SwiftProtobuf.Message, SwiftProtobuf._MessageImplemen
   }
 
   static func ==(lhs: SDTExternalRefs, rhs: SDTExternalRefs) -> Bool {
-    if lhs._desc != rhs._desc {return false}
+    if lhs._one != rhs._one {return false}
     if lhs._ver != rhs._ver {return false}
     if lhs.unknownFields != rhs.unknownFields {return false}
     return true

+ 109 - 0
Tests/SwiftProtobufPluginLibraryTests/pluginlib_descriptor_test_import.pb.swift

@@ -88,6 +88,40 @@ struct SwiftDescriptorTest_Import_Version: Sendable {
   fileprivate var _suffix: String? = nil
 }
 
+struct SwiftDescriptorTest_Import_ExtendableOne: SwiftProtobuf.ExtensibleMessage, Sendable {
+  // SwiftProtobuf.Message conformance is added in an extension below. See the
+  // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
+  // methods supported on all messages.
+
+  var subMsgField: SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo {
+    get {return _subMsgField ?? SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo()}
+    set {_subMsgField = newValue}
+  }
+  /// Returns true if `subMsgField` has been explicitly set.
+  var hasSubMsgField: Bool {return self._subMsgField != nil}
+  /// Clears the value of `subMsgField`. Subsequent reads from it will return its default value.
+  mutating func clearSubMsgField() {self._subMsgField = nil}
+
+  var unknownFields = SwiftProtobuf.UnknownStorage()
+
+  struct ExtendableTwo: SwiftProtobuf.ExtensibleMessage, Sendable {
+    // SwiftProtobuf.Message conformance is added in an extension below. See the
+    // `Message` and `Message+*Additions` files in the SwiftProtobuf library for
+    // methods supported on all messages.
+
+    var unknownFields = SwiftProtobuf.UnknownStorage()
+
+    init() {}
+
+    var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet()
+  }
+
+  init() {}
+
+  var _protobuf_extensionFieldValues = SwiftProtobuf.ExtensionFieldValueSet()
+  fileprivate var _subMsgField: SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo? = nil
+}
+
 // MARK: - Code below here is support for the SwiftProtobuf runtime.
 
 fileprivate let _protobuf_package = "swift_descriptor_test.import"
@@ -145,3 +179,78 @@ extension SwiftDescriptorTest_Import_Version: SwiftProtobuf.Message, SwiftProtob
     return true
   }
 }
+
+extension SwiftDescriptorTest_Import_ExtendableOne: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
+  static let protoMessageName: String = _protobuf_package + ".ExtendableOne"
+  static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
+    1: .standard(proto: "sub_msg_field"),
+  ]
+
+  public var isInitialized: Bool {
+    if !_protobuf_extensionFieldValues.isInitialized {return false}
+    if let v = self._subMsgField, !v.isInitialized {return false}
+    return true
+  }
+
+  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
+    while let fieldNumber = try decoder.nextFieldNumber() {
+      // The use of inline closures is to circumvent an issue where the compiler
+      // allocates stack space for every case branch when no optimizations are
+      // enabled. https://github.com/apple/swift-protobuf/issues/1034
+      switch fieldNumber {
+      case 1: try { try decoder.decodeSingularMessageField(value: &self._subMsgField) }()
+      case 1000..<536870912:
+        try { try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: SwiftDescriptorTest_Import_ExtendableOne.self, fieldNumber: fieldNumber) }()
+      default: break
+      }
+    }
+  }
+
+  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
+    // The use of inline closures is to circumvent an issue where the compiler
+    // allocates stack space for every if/case branch local when no optimizations
+    // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
+    // https://github.com/apple/swift-protobuf/issues/1182
+    try { if let v = self._subMsgField {
+      try visitor.visitSingularMessageField(value: v, fieldNumber: 1)
+    } }()
+    try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912)
+    try unknownFields.traverse(visitor: &visitor)
+  }
+
+  static func ==(lhs: SwiftDescriptorTest_Import_ExtendableOne, rhs: SwiftDescriptorTest_Import_ExtendableOne) -> Bool {
+    if lhs._subMsgField != rhs._subMsgField {return false}
+    if lhs.unknownFields != rhs.unknownFields {return false}
+    if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false}
+    return true
+  }
+}
+
+extension SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
+  static let protoMessageName: String = SwiftDescriptorTest_Import_ExtendableOne.protoMessageName + ".ExtendableTwo"
+  static let _protobuf_nameMap = SwiftProtobuf._NameMap()
+
+  public var isInitialized: Bool {
+    if !_protobuf_extensionFieldValues.isInitialized {return false}
+    return true
+  }
+
+  mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
+    while let fieldNumber = try decoder.nextFieldNumber() {
+      if (1000 <= fieldNumber && fieldNumber < 536870912) {
+        try decoder.decodeExtensionField(values: &_protobuf_extensionFieldValues, messageType: SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo.self, fieldNumber: fieldNumber)
+      }
+    }
+  }
+
+  func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
+    try visitor.visitExtensionFields(fields: _protobuf_extensionFieldValues, start: 1000, end: 536870912)
+    try unknownFields.traverse(visitor: &visitor)
+  }
+
+  static func ==(lhs: SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo, rhs: SwiftDescriptorTest_Import_ExtendableOne.ExtendableTwo) -> Bool {
+    if lhs.unknownFields != rhs.unknownFields {return false}
+    if lhs._protobuf_extensionFieldValues != rhs._protobuf_extensionFieldValues {return false}
+    return true
+  }
+}

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini