diff --git a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/PropertyGenerator.kt b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/PropertyGenerator.kt index 13f46c4..07bf1bf 100644 --- a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/PropertyGenerator.kt +++ b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/PropertyGenerator.kt @@ -26,7 +26,7 @@ internal class PropertyGenerator( val isTransient: Boolean = false ) { val name = target.name - val jsonName = target.jsonName + val jsonName = target.jsonName ?: target.name val hasDefault = target.hasDefault lateinit var localName: String diff --git a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/TargetParameter.kt b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/TargetParameter.kt index b9e10bd..828f25c 100644 --- a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/TargetParameter.kt +++ b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/TargetParameter.kt @@ -22,6 +22,6 @@ internal data class TargetParameter( val name: String, val index: Int, val hasDefault: Boolean, - val jsonName: String = name, + val jsonName: String? = null, val qualifiers: Set? = null ) diff --git a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/TargetProperty.kt b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/TargetProperty.kt index 1c141d4..dab0178 100644 --- a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/TargetProperty.kt +++ b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/TargetProperty.kt @@ -24,7 +24,7 @@ internal data class TargetProperty( val propertySpec: PropertySpec, val parameter: TargetParameter?, val visibility: KModifier, - val jsonName: String + val jsonName: String? ) { val name: String get() = propertySpec.name val type: TypeName get() = propertySpec.type diff --git a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/metadata.kt b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/metadata.kt index ef1b832..4576462 100644 --- a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/metadata.kt +++ b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/metadata.kt @@ -77,7 +77,7 @@ internal fun primaryConstructor(kotlinApi: TypeSpec, elements: Elements): Target index = index, hasDefault = parameter.defaultValue != null, qualifiers = parameter.annotations.qualifiers(elements), - jsonName = parameter.annotations.jsonName() ?: name.escapeDollarSigns() + jsonName = parameter.annotations.jsonName() ) } 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 8260dd4..9466831 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 @@ -1126,14 +1126,32 @@ class GeneratedAdaptersTest { } @JsonClass(generateAdapter = true) - class InternalPropertyWithoutBackingField { + class InternalPropertyWithoutBackingField { @Transient private var foo: Int = 5 internal var bar get() = foo - set(f) { foo = f} + set(f) { + foo = f + } + } + + @JsonClass(generateAdapter = true) + data class ClassWithFieldJson( + @field:Json(name = "_links") val links: String + ) { + @field:Json(name = "_ids") var ids: String? = null + } + + // Regression test to ensure annotations with field site targets still use the right name + @Test fun classWithFieldJsonTargets() { + val moshi = Moshi.Builder().build() + val adapter = moshi.adapter() + //language=JSON + val instance = adapter.fromJson("""{"_links": "link", "_ids": "id" }""")!! + assertThat(instance).isEqualTo(ClassWithFieldJson("link").apply { ids = "id" }) } }