Skip to content

Commit a28c252

Browse files
authored
Merge pull request apple#477 from thomasvl/oneof_cleanup
Oneof cleanup and generation improvements.
2 parents c385543 + 7997221 commit a28c252

File tree

46 files changed

+1306
-1113
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1306
-1113
lines changed

Protos/unittest_swift_fieldorder.proto

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,36 @@ extend TestFieldOrderings {
4444
optional string my_extension_string = 50;
4545
optional int32 my_extension_int = 5;
4646
}
47+
48+
49+
// These checks how the traverse() generated for a oneof
50+
// deals with field orders. Currently requires inspecting the code.
51+
message OneofTraversalGeneration {
52+
// Gaps, not no issues, no start:end: on traverse().
53+
oneof o_Good {
54+
int32 a = 1;
55+
int32 b = 26;
56+
}
57+
58+
// Gaps with a field in the middle of the range.
59+
oneof o_Conflict_Field {
60+
int32 a2 = 101;
61+
int32 b2 = 126;
62+
}
63+
// In the middle of previous oneof field ranges.
64+
optional int32 m = 113;
65+
66+
// Gaps with an extension range in the middle of the range.
67+
oneof o_Conflict_ExtensionsStart {
68+
int32 a3 = 201;
69+
int32 b3 = 226;
70+
}
71+
extensions 202;
72+
73+
// Gaps with an extension range in the middle of the range.
74+
oneof o_Conflict_ExtensionsEnd {
75+
int32 a4 = 301;
76+
int32 b4 = 326;
77+
}
78+
extensions 325;
79+
}

Reference/conformance/conformance.pb.swift

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ struct Conformance_ConformanceRequest: SwiftProtobuf.Message {
155155
}
156156

157157
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
158-
try self.payload?.traverse(visitor: &visitor, start: 1, end: 3)
158+
try self.payload?.traverse(visitor: &visitor)
159159
if self.requestedOutputFormat != Conformance_WireFormat.unspecified {
160160
try visitor.visitSingularEnumField(value: self.requestedOutputFormat, fieldNumber: 3)
161161
}
@@ -290,7 +290,7 @@ struct Conformance_ConformanceResponse: SwiftProtobuf.Message {
290290
}
291291

292292
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
293-
try self.result?.traverse(visitor: &visitor, start: 1, end: 7)
293+
try self.result?.traverse(visitor: &visitor)
294294
try unknownFields.traverse(visitor: &visitor)
295295
}
296296
}
@@ -341,16 +341,12 @@ extension Conformance_ConformanceRequest.OneOf_Payload {
341341
return nil
342342
}
343343

344-
fileprivate func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V, start: Int, end: Int) throws {
344+
fileprivate func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
345345
switch self {
346346
case .protobufPayload(let v):
347-
if start <= 1 && 1 < end {
348-
try visitor.visitSingularBytesField(value: v, fieldNumber: 1)
349-
}
347+
try visitor.visitSingularBytesField(value: v, fieldNumber: 1)
350348
case .jsonPayload(let v):
351-
if start <= 2 && 2 < end {
352-
try visitor.visitSingularStringField(value: v, fieldNumber: 2)
353-
}
349+
try visitor.visitSingularStringField(value: v, fieldNumber: 2)
354350
}
355351
}
356352
}
@@ -411,32 +407,20 @@ extension Conformance_ConformanceResponse.OneOf_Result {
411407
return nil
412408
}
413409

414-
fileprivate func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V, start: Int, end: Int) throws {
410+
fileprivate func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
415411
switch self {
416412
case .parseError(let v):
417-
if start <= 1 && 1 < end {
418-
try visitor.visitSingularStringField(value: v, fieldNumber: 1)
419-
}
413+
try visitor.visitSingularStringField(value: v, fieldNumber: 1)
420414
case .runtimeError(let v):
421-
if start <= 2 && 2 < end {
422-
try visitor.visitSingularStringField(value: v, fieldNumber: 2)
423-
}
415+
try visitor.visitSingularStringField(value: v, fieldNumber: 2)
424416
case .protobufPayload(let v):
425-
if start <= 3 && 3 < end {
426-
try visitor.visitSingularBytesField(value: v, fieldNumber: 3)
427-
}
417+
try visitor.visitSingularBytesField(value: v, fieldNumber: 3)
428418
case .jsonPayload(let v):
429-
if start <= 4 && 4 < end {
430-
try visitor.visitSingularStringField(value: v, fieldNumber: 4)
431-
}
419+
try visitor.visitSingularStringField(value: v, fieldNumber: 4)
432420
case .skipped(let v):
433-
if start <= 5 && 5 < end {
434-
try visitor.visitSingularStringField(value: v, fieldNumber: 5)
435-
}
421+
try visitor.visitSingularStringField(value: v, fieldNumber: 5)
436422
case .serializeError(let v):
437-
if start <= 6 && 6 < end {
438-
try visitor.visitSingularStringField(value: v, fieldNumber: 6)
439-
}
423+
try visitor.visitSingularStringField(value: v, fieldNumber: 6)
440424
}
441425
}
442426
}

Reference/google/protobuf/struct.pb.swift

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ struct Google_Protobuf_Value: SwiftProtobuf.Message {
233233

234234
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
235235
try withExtendedLifetime(_storage) { (_storage: _StorageClass) in
236-
try _storage._kind?.traverse(visitor: &visitor, start: 1, end: 7)
236+
try _storage._kind?.traverse(visitor: &visitor)
237237
}
238238
try unknownFields.traverse(visitor: &visitor)
239239
}
@@ -376,32 +376,20 @@ extension Google_Protobuf_Value.OneOf_Kind {
376376
return nil
377377
}
378378

379-
fileprivate func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V, start: Int, end: Int) throws {
379+
fileprivate func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
380380
switch self {
381381
case .nullValue(let v):
382-
if start <= 1 && 1 < end {
383-
try visitor.visitSingularEnumField(value: v, fieldNumber: 1)
384-
}
382+
try visitor.visitSingularEnumField(value: v, fieldNumber: 1)
385383
case .numberValue(let v):
386-
if start <= 2 && 2 < end {
387-
try visitor.visitSingularDoubleField(value: v, fieldNumber: 2)
388-
}
384+
try visitor.visitSingularDoubleField(value: v, fieldNumber: 2)
389385
case .stringValue(let v):
390-
if start <= 3 && 3 < end {
391-
try visitor.visitSingularStringField(value: v, fieldNumber: 3)
392-
}
386+
try visitor.visitSingularStringField(value: v, fieldNumber: 3)
393387
case .boolValue(let v):
394-
if start <= 4 && 4 < end {
395-
try visitor.visitSingularBoolField(value: v, fieldNumber: 4)
396-
}
388+
try visitor.visitSingularBoolField(value: v, fieldNumber: 4)
397389
case .structValue(let v):
398-
if start <= 5 && 5 < end {
399-
try visitor.visitSingularMessageField(value: v, fieldNumber: 5)
400-
}
390+
try visitor.visitSingularMessageField(value: v, fieldNumber: 5)
401391
case .listValue(let v):
402-
if start <= 6 && 6 < end {
403-
try visitor.visitSingularMessageField(value: v, fieldNumber: 6)
404-
}
392+
try visitor.visitSingularMessageField(value: v, fieldNumber: 6)
405393
}
406394
}
407395
}

Reference/google/protobuf/test_messages_proto3.pb.swift

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,7 +1269,7 @@ struct ProtobufTestMessages_Proto3_TestAllTypes: SwiftProtobuf.Message {
12691269
if !_storage._mapStringForeignEnum.isEmpty {
12701270
try visitor.visitMapField(fieldType: SwiftProtobuf._ProtobufEnumMap<SwiftProtobuf.ProtobufString,ProtobufTestMessages_Proto3_ForeignEnum>.self, value: _storage._mapStringForeignEnum, fieldNumber: 74)
12711271
}
1272-
try _storage._oneofField?.traverse(visitor: &visitor, start: 111, end: 120)
1272+
try _storage._oneofField?.traverse(visitor: &visitor)
12731273
if let v = _storage._optionalBoolWrapper {
12741274
try visitor.visitSingularMessageField(value: v, fieldNumber: 201)
12751275
}
@@ -1998,44 +1998,26 @@ extension ProtobufTestMessages_Proto3_TestAllTypes.OneOf_OneofField {
19981998
return nil
19991999
}
20002000

2001-
fileprivate func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V, start: Int, end: Int) throws {
2001+
fileprivate func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
20022002
switch self {
20032003
case .oneofUint32(let v):
2004-
if start <= 111 && 111 < end {
2005-
try visitor.visitSingularUInt32Field(value: v, fieldNumber: 111)
2006-
}
2004+
try visitor.visitSingularUInt32Field(value: v, fieldNumber: 111)
20072005
case .oneofNestedMessage(let v):
2008-
if start <= 112 && 112 < end {
2009-
try visitor.visitSingularMessageField(value: v, fieldNumber: 112)
2010-
}
2006+
try visitor.visitSingularMessageField(value: v, fieldNumber: 112)
20112007
case .oneofString(let v):
2012-
if start <= 113 && 113 < end {
2013-
try visitor.visitSingularStringField(value: v, fieldNumber: 113)
2014-
}
2008+
try visitor.visitSingularStringField(value: v, fieldNumber: 113)
20152009
case .oneofBytes(let v):
2016-
if start <= 114 && 114 < end {
2017-
try visitor.visitSingularBytesField(value: v, fieldNumber: 114)
2018-
}
2010+
try visitor.visitSingularBytesField(value: v, fieldNumber: 114)
20192011
case .oneofBool(let v):
2020-
if start <= 115 && 115 < end {
2021-
try visitor.visitSingularBoolField(value: v, fieldNumber: 115)
2022-
}
2012+
try visitor.visitSingularBoolField(value: v, fieldNumber: 115)
20232013
case .oneofUint64(let v):
2024-
if start <= 116 && 116 < end {
2025-
try visitor.visitSingularUInt64Field(value: v, fieldNumber: 116)
2026-
}
2014+
try visitor.visitSingularUInt64Field(value: v, fieldNumber: 116)
20272015
case .oneofFloat(let v):
2028-
if start <= 117 && 117 < end {
2029-
try visitor.visitSingularFloatField(value: v, fieldNumber: 117)
2030-
}
2016+
try visitor.visitSingularFloatField(value: v, fieldNumber: 117)
20312017
case .oneofDouble(let v):
2032-
if start <= 118 && 118 < end {
2033-
try visitor.visitSingularDoubleField(value: v, fieldNumber: 118)
2034-
}
2018+
try visitor.visitSingularDoubleField(value: v, fieldNumber: 118)
20352019
case .oneofEnum(let v):
2036-
if start <= 119 && 119 < end {
2037-
try visitor.visitSingularEnumField(value: v, fieldNumber: 119)
2038-
}
2020+
try visitor.visitSingularEnumField(value: v, fieldNumber: 119)
20392021
}
20402022
}
20412023
}

0 commit comments

Comments
 (0)