Skip to content

Commit cdb2f16

Browse files
committed
Move SwiftProtobufNamer uniquelyNamedValues to use EnumAliasInfo.
1 parent 1d7da61 commit cdb2f16

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

Sources/protoc-gen-swift/EnumGenerator.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class EnumGenerator {
116116
/// - Parameter p: The code printer.
117117
private func generateCasesOrAliases(printer p: inout CodePrinter) {
118118
let visibility = generatorOptions.visibilitySourceSnippet
119-
for enumValueDescriptor in namer.uniquelyNamedValues(enum: enumDescriptor) {
119+
for enumValueDescriptor in namer.uniquelyNamedValues(valueAliasInfo: aliasInfo) {
120120
let comments = enumValueDescriptor.protoSourceComments()
121121
if !comments.isEmpty {
122122
p.print()

Sources/protoc-gen-swift/SwiftProtobufNamer+Extensions.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ extension SwiftProtobufNamer {
2020
/// names. Only poorly named proto enum alias values get filtered
2121
/// away, so the assumption is they aren't really needed from an
2222
/// api pov.
23-
func uniquelyNamedValues(enum e: EnumDescriptor) -> [EnumValueDescriptor] {
24-
return e.values.filter {
23+
func uniquelyNamedValues(
24+
valueAliasInfo aliasInfo: EnumDescriptor.ValueAliasInfo
25+
) -> [EnumValueDescriptor] {
26+
return aliasInfo.mainValues.first!.enumType.values.filter {
2527
// Original are kept as is. The computations for relative
2628
// name already adds values for collisions with different
2729
// values.
28-
guard let aliasOf = $0.aliasOf else { return true }
30+
guard let aliasOf = aliasInfo.original(of: $0) else { return true }
2931
let relativeName = self.relativeName(enumValue: $0)
3032
let aliasOfRelativeName = self.relativeName(enumValue: aliasOf)
3133
// If the relative name matches for the alias and original, drop
@@ -34,11 +36,11 @@ extension SwiftProtobufNamer {
3436
// Only include this alias if it is the first one with this name.
3537
// (handles alias with different cases in their names that get
3638
// mangled to a single Swift name.)
37-
let firstAlias = aliasOf.aliases.firstIndex {
39+
let firstAlias = aliasInfo.aliases(aliasOf)!.firstIndex {
3840
let otherRelativeName = self.relativeName(enumValue: $0)
3941
return relativeName == otherRelativeName
4042
}
41-
return aliasOf.aliases[firstAlias!] === $0
43+
return aliasInfo.aliases(aliasOf)![firstAlias!] === $0
4244
}
4345
}
4446
}

Tests/protoc-gen-swiftTests/Test_SwiftProtobufNamerExtensions.swift

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ class Test_SwiftProtobufNamer: XCTestCase {
7171

7272
// Test uniquelyNamedValues(enum:)
7373

74-
let filtered = namer.uniquelyNamedValues(enum: e)
74+
let aliasInfo = EnumDescriptor.ValueAliasInfo(enumDescriptor: e)
75+
let filtered = namer.uniquelyNamedValues(valueAliasInfo: aliasInfo)
7576
XCTAssertEqual(filtered.count, 3)
7677

7778
XCTAssertEqual(filtered[0].name, "TEST_ENUM_FOO")
@@ -126,7 +127,8 @@ class Test_SwiftProtobufNamer: XCTestCase {
126127

127128
// Test uniquelyNamedValues(enum:)
128129

129-
let filtered = namer.uniquelyNamedValues(enum: e)
130+
let aliasInfo = EnumDescriptor.ValueAliasInfo(enumDescriptor: e)
131+
let filtered = namer.uniquelyNamedValues(valueAliasInfo: aliasInfo)
130132
XCTAssertEqual(filtered.count, 4)
131133

132134
XCTAssertEqual(filtered[0].name, "TEST_ENUM_FOO")
@@ -202,7 +204,8 @@ class Test_SwiftProtobufNamer: XCTestCase {
202204

203205
// Test uniquelyNamedValues(enum:)
204206

205-
let filtered = namer.uniquelyNamedValues(enum: e)
207+
let aliasInfo = EnumDescriptor.ValueAliasInfo(enumDescriptor: e)
208+
let filtered = namer.uniquelyNamedValues(valueAliasInfo: aliasInfo)
206209
XCTAssertEqual(filtered.count, 6)
207210

208211
XCTAssertEqual(filtered[0].name, "TEST_ENUM_FOO")
@@ -286,7 +289,8 @@ class Test_SwiftProtobufNamer: XCTestCase {
286289

287290
// QUX & qux collided, so only one remains.
288291

289-
let filtered = namer.uniquelyNamedValues(enum: e)
292+
let aliasInfo = EnumDescriptor.ValueAliasInfo(enumDescriptor: e)
293+
let filtered = namer.uniquelyNamedValues(valueAliasInfo: aliasInfo)
290294
XCTAssertEqual(filtered.count, 5)
291295

292296
XCTAssertEqual(filtered[0].name, "ALIAS_FOO")

0 commit comments

Comments
 (0)