From 40a829ef181e7097087ec0e95cdcf3e3fbba3156 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Thu, 12 Dec 2019 02:53:25 -0500 Subject: [PATCH] Don't linebreak keys with spaces (#1053) * Don't linebreak keys with spaces Resolves #1052 * Update kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/AdapterGenerator.kt --- .../moshi/kotlin/codegen/api/AdapterGenerator.kt | 15 +++++++++++---- .../moshi/kotlin/codegen/GeneratedAdaptersTest.kt | 12 ++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/AdapterGenerator.kt b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/AdapterGenerator.kt index 6b6f4b3..1cfef3f 100644 --- a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/AdapterGenerator.kt +++ b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/AdapterGenerator.kt @@ -121,10 +121,17 @@ internal class AdapterGenerator( private val optionsProperty = PropertySpec.builder( nameAllocator.newName("options"), JsonReader.Options::class.asTypeName(), KModifier.PRIVATE) - .initializer("%T.of(${nonTransientProperties.joinToString(", ") { - // We manually put in quotes because we know the jsonName is already escaped - CodeBlock.of("\"%L\"", it.jsonName).toString() - }})", JsonReader.Options::class.asTypeName()) + .initializer( + "%T.of(%L)", + JsonReader.Options::class.asTypeName(), + nonTransientProperties + .map { + // We manually put in quotes because we know the jsonName is already escaped. + val whitespaceSafeName = it.jsonName.replace(" ", "ยท") + CodeBlock.of("\"$whitespaceSafeName\"") + } + .joinToCode(", ") + ) .build() private val constructorProperty = PropertySpec.builder( diff --git a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codegen/GeneratedAdaptersTest.kt b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codegen/GeneratedAdaptersTest.kt index d4ff515..e491eba 100644 --- a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codegen/GeneratedAdaptersTest.kt +++ b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codegen/GeneratedAdaptersTest.kt @@ -1216,6 +1216,18 @@ internal data class MismatchParentAndNestedClassVisibility( ) } +// Regression test for https://github.com/square/moshi/issues/1052 +// Compile-only test +@JsonClass(generateAdapter = true) +data class KeysWithSpaces( + @Json(name = "1. Information") val information: String, + @Json(name = "2. Symbol") val symbol: String, + @Json(name = "3. Last Refreshed") val lastRefreshed: String, + @Json(name = "4. Interval") val interval: String, + @Json(name = "5. Output Size") val size: String, + @Json(name = "6. Time Zone") val timeZone: String +) + // Has to be outside to avoid Types seeing an owning class @JsonClass(generateAdapter = true) data class NullableTypeParams(