Skip to content

Commit 2b2bb04

Browse files
Omit empty unknown fields from toString (#181)
1 parent d0934f0 commit 2b2bb04

File tree

3 files changed

+51
-6
lines changed

3 files changed

+51
-6
lines changed

protokt-codegen/src/main/kotlin/com/toasttab/protokt/codegen/annotators/MessageAnnotator.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,21 +206,24 @@ private constructor(
206206
.addModifiers(KModifier.OVERRIDE)
207207
.addCode(
208208
if (properties.isEmpty()) {
209-
"return \"${msg.name}(unknownFields=\$unknownFields)\""
209+
"return \"${msg.name}(${unknownFieldsToString(prefix = "")})\""
210210
} else {
211211
"""
212212
|return "${msg.name}(" +
213213
|${toStringLines(properties)}
214-
| "unknownFields=${"$"}unknownFields)"
214+
| "${unknownFieldsToString(prefix = ", ")})"
215215
""".bindMargin()
216216
}
217217
)
218218
.build()
219219
)
220220

221+
private fun unknownFieldsToString(prefix: String) =
222+
"\${if (unknownFields.isEmpty()) \"\" else \"${prefix}unknownFields=\$unknownFields\"}"
223+
221224
private fun toStringLines(properties: List<PropertyInfo>) =
222-
properties.joinToString("\n") {
223-
" \"${it.name}=\$${it.name}, \" +"
225+
properties.joinToString(separator = ", \" +\n", postfix = "\" +") {
226+
" \"${it.name}=\$${it.name}"
224227
}.bindSpaces()
225228

226229
private fun suppressDeprecation() =

protokt-runtime/src/main/kotlin/com/toasttab/protokt/rt/UnknownFieldSet.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ private constructor(
2222
fun size() =
2323
unknownFields.entries.sumOf { (k, v) -> v.size(k) }
2424

25+
fun isEmpty() =
26+
unknownFields.isEmpty()
27+
2528
override fun equals(other: Any?) =
2629
other is UnknownFieldSet &&
2730
other.unknownFields == unknownFields

testing/runtime-tests/src/test/kotlin/com/toasttab/protokt/testing/rt/ToStringTest.kt

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,55 @@
1616
package com.toasttab.protokt.testing.rt
1717

1818
import com.google.common.truth.Truth.assertThat
19+
import com.toasttab.protokt.rt.UnknownField
20+
import com.toasttab.protokt.rt.UnknownFieldSet
1921
import org.junit.jupiter.api.Test
22+
import toasttab.protokt.testing.rt.Empty
2023
import toasttab.protokt.testing.rt.Test2
2124

2225
class ToStringTest {
2326
@Test
24-
fun `toString prints the correct format`() {
27+
fun `toString prints the correct format for empty message`() {
28+
assertThat(
29+
Empty { }.toString()
30+
).isEqualTo(
31+
"Empty()"
32+
)
33+
}
34+
35+
@Test
36+
fun `toString prints the correct format for empty message with unknown fields`() {
37+
assertThat(
38+
Empty {
39+
unknownFields = UnknownFieldSet.Builder().apply {
40+
add(UnknownField.fixed32(5, 10))
41+
}.build()
42+
}.toString()
43+
).isEqualTo(
44+
"Empty(unknownFields=UnknownFieldSet(unknownFields={5=Field(varint=[], fixed32=[Fixed32Val(value=Fixed32(value=10))], fixed64=[], lengthDelimited=[])}))"
45+
)
46+
}
47+
48+
@Test
49+
fun `toString omits unknown fields when empty`() {
2550
assertThat(
2651
Test2 { extra = "foo" }.toString()
2752
).isEqualTo(
28-
"Test2(`val`=[], extra=foo, unknownFields=UnknownFieldSet(unknownFields={}))"
53+
"Test2(`val`=[], extra=foo)"
54+
)
55+
}
56+
57+
@Test
58+
fun `toString prints the correct format with non-empty unknown fields`() {
59+
assertThat(
60+
Test2 {
61+
extra = "foo"
62+
unknownFields = UnknownFieldSet.Builder().apply {
63+
add(UnknownField.fixed32(5, 10))
64+
}.build()
65+
}.toString()
66+
).isEqualTo(
67+
"Test2(`val`=[], extra=foo, unknownFields=UnknownFieldSet(unknownFields={5=Field(varint=[], fixed32=[Fixed32Val(value=Fixed32(value=10))], fixed64=[], lengthDelimited=[])}))"
2968
)
3069
}
3170
}

0 commit comments

Comments
 (0)