Skip to content

Commit

Permalink
Update traversal logic for proto2
Browse files Browse the repository at this point in the history
  • Loading branch information
mrabiciu committed Feb 11, 2024
1 parent a285f80 commit ce87a7e
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 120 deletions.
10 changes: 2 additions & 8 deletions Sources/protoc-gen-swift/MessageFieldGenerator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class MessageFieldGenerator: FieldGeneratorBase, FieldGenerator {
}

var usesAlwaysVisitPrimitivesFlagForTraversal: Bool {
!hasFieldPresence || (!isGroupOrMessage && fieldDescriptor.file.syntax == .proto2)
!hasFieldPresence
}

init(descriptor: FieldDescriptor,
Expand Down Expand Up @@ -206,13 +206,7 @@ class MessageFieldGenerator: FieldGeneratorBase, FieldGenerator {
conditional = "!\(storedProperty).isEmpty || alwaysVisitPrimitiveFields"
} else if hasFieldPresence {
usesLocals = true
if !isGroupOrMessage, fieldDescriptor.file.syntax == .proto2 {
// Under proto2 all primitives have presence but
// we want include primitives if alwaysVisitPrimitiveFields is true
conditional = "let v = \(storedProperty) ?? (alwaysVisitPrimitiveFields ? \(isEnum ? swiftType : "")\(swiftDefaultValue) : nil)"
} else {
conditional = "let v = \(storedProperty)"
}
conditional = "let v = \(storedProperty)"
} else {
// At this point, the fields would be a primative type, and should only
// be visted if it is the non default value.
Expand Down
116 changes: 4 additions & 112 deletions Tests/SwiftProtobufTests/Test_JSON.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1177,26 +1177,6 @@ final class Test_JSONDefaultValues: XCTestCase {

func testProto2() {
let expected = "{"
+ #""optionalInt32":0,"#
+ #""optionalInt64":"0","#
+ #""optionalUint32":0,"#
+ #""optionalUint64":"0","#
+ #""optionalSint32":0,"#
+ #""optionalSint64":"0","#
+ #""optionalFixed32":0,"#
+ #""optionalFixed64":"0","#
+ #""optionalSfixed32":0,"#
+ #""optionalSfixed64":"0","#
+ #""optionalFloat":0.0,"#
+ #""optionalDouble":0.0,"#
+ #""optionalBool":false,"#
+ #""optionalString":"","#
+ #""optionalBytes":"","#
+ #""optionalNestedEnum":"FOO","#
+ #""optionalForeignEnum":"FOREIGN_FOO","#
+ #""optionalImportEnum":"IMPORT_FOO","#
+ #""optionalStringPiece":"","#
+ #""optionalCord":"","#
+ #""repeatedInt32":[],"#
+ #""repeatedInt64":[],"#
+ #""repeatedUint32":[],"#
Expand All @@ -1220,27 +1200,7 @@ final class Test_JSONDefaultValues: XCTestCase {
+ #""repeatedImportEnum":[],"#
+ #""repeatedStringPiece":[],"#
+ #""repeatedCord":[],"#
+ #""repeatedLazyMessage":[],"#
+ #""defaultInt32":41,"#
+ #""defaultInt64":"42","#
+ #""defaultUint32":43,"#
+ #""defaultUint64":"44","#
+ #""defaultSint32":-45,"#
+ #""defaultSint64":"46","#
+ #""defaultFixed32":47,"#
+ #""defaultFixed64":"48","#
+ #""defaultSfixed32":49,"#
+ #""defaultSfixed64":"-50","#
+ #""defaultFloat":51.5,"#
+ #""defaultDouble":52000.0,"#
+ #""defaultBool":true,"#
+ #""defaultString":"hello","#
+ #""defaultBytes":"d29ybGQ=","#
+ #""defaultNestedEnum":"BAR","#
+ #""defaultForeignEnum":"FOREIGN_BAR","#
+ #""defaultImportEnum":"IMPORT_BAR","#
+ #""defaultStringPiece":"abc","#
+ #""defaultCord":"123""#
+ #""repeatedLazyMessage":[]"#
+ "}"

var encodingOptions = JSONEncodingOptions()
Expand All @@ -1251,27 +1211,9 @@ final class Test_JSONDefaultValues: XCTestCase {

func testProto2Configured() {
let expected = "{"
+ #""optionalInt32":0,"#
+ #""optionalInt64":"0","#
+ #""optionalUint32":0,"#
+ #""optionalUint64":"0","#
+ #""optionalSint32":0,"#
+ #""optionalSint64":"0","#
+ #""optionalFixed32":0,"#
+ #""optionalFixed64":"0","#
+ #""optionalSfixed32":0,"#
+ #""optionalSfixed64":"0","#
+ #""optionalFloat":0.0,"#
+ #""optionalDouble":0.0,"#
+ #""optionalBool":false,"#
+ #""optionalString":"i am a test string value","#
+ #""optionalBytes":"aSBhbSBhIHRlc3Qgc3RyaW5nIHZhbHVl","#
+ #""optionalNestedMessage":{"bb":0},"#
+ #""optionalNestedEnum":"FOO","#
+ #""optionalForeignEnum":"FOREIGN_FOO","#
+ #""optionalImportEnum":"IMPORT_FOO","#
+ #""optionalStringPiece":"","#
+ #""optionalCord":"","#
+ #""optionalNestedMessage":{},"#
+ #""repeatedInt32":[],"#
+ #""repeatedInt64":[],"#
+ #""repeatedUint32":[],"#
Expand All @@ -1295,27 +1237,7 @@ final class Test_JSONDefaultValues: XCTestCase {
+ #""repeatedImportEnum":[],"#
+ #""repeatedStringPiece":[],"#
+ #""repeatedCord":[],"#
+ #""repeatedLazyMessage":[],"#
+ #""defaultInt32":41,"#
+ #""defaultInt64":"42","#
+ #""defaultUint32":43,"#
+ #""defaultUint64":"44","#
+ #""defaultSint32":-45,"#
+ #""defaultSint64":"46","#
+ #""defaultFixed32":47,"#
+ #""defaultFixed64":"48","#
+ #""defaultSfixed32":49,"#
+ #""defaultSfixed64":"-50","#
+ #""defaultFloat":51.5,"#
+ #""defaultDouble":52000.0,"#
+ #""defaultBool":true,"#
+ #""defaultString":"hello","#
+ #""defaultBytes":"d29ybGQ=","#
+ #""defaultNestedEnum":"BAR","#
+ #""defaultForeignEnum":"FOREIGN_BAR","#
+ #""defaultImportEnum":"IMPORT_BAR","#
+ #""defaultStringPiece":"abc","#
+ #""defaultCord":"123""#
+ #""repeatedLazyMessage":[]"#
+ "}"

var encodingOptions = JSONEncodingOptions()
Expand All @@ -1329,37 +1251,7 @@ final class Test_JSONDefaultValues: XCTestCase {
}

func testExtremeDefaultValues() {
let expected = "{"
+ #""escapedBytes":"AAEHCAwKDQkLXCci/g==","#
+ #""largeUint32":4294967295,"#
+ #""largeUint64":"18446744073709551615","#
+ #""smallInt32":-2147483647,"#
+ #""smallInt64":"-9223372036854775807","#
+ #""utf8String":"ሴ","#
+ #""zeroFloat":0.0,"#
+ #""oneFloat":1.0,"#
+ #""smallFloat":1.5,"#
+ #""negativeOneFloat":-1.0,"#
+ #""negativeFloat":-1.5,"#
+ #""largeFloat":2e+08,"#
+ #""smallNegativeFloat":-8e-28,"#
+ #""infDouble":"Infinity","#
+ #""negInfDouble":"-Infinity","#
// TODO: NaN and Inifinity should fall back to 0 like they do in C++
+ #""nanDouble":"NaN","#
+ #""infFloat":"Infinity","#
+ #""negInfFloat":"-Infinity","#
+ #""nanFloat":"NaN","#
+ #""cppTrigraph":"? ? ?? ?? ??? ??/ ??-","#
+ #""reallySmallInt32":-2147483648,"#
+ #""reallySmallInt64":"-9223372036854775808","#
+ #""stringWithZero":"hel\u0000lo","#
+ #""bytesWithZero":"d29yAGxk","#
+ #""stringPieceWithZero":"ab\u0000c","#
+ #""cordWithZero":"12\u00003","#
+ #""replacementString":"${unknown}""#
+ "}"

let expected = "{}"
var encodingOptions = JSONEncodingOptions()
encodingOptions.alwaysPrintPrimitiveFields = true
let msg = SwiftProtoTesting_TestExtremeDefaultValues()
Expand Down

0 comments on commit ce87a7e

Please sign in to comment.