mirror of
https://github.com/fankes/moshi.git
synced 2025-10-19 16:09:21 +08:00
Handle non-property parameters in kotlin code gen (#982)
* Add parameter-only param in multi-masks test * Add type to target parameters for later reference * Ensure parameters are ordered * Reword AdapterGenerator fromJson logic to use sealed FromJsonComponent This allows us to handle parameter-only types separately (needed for mask index calculation). Resolves #979 * Add more tests
This commit is contained in:
@@ -327,6 +327,7 @@ class DualKotlinTest(useReflection: Boolean) {
|
||||
@Test fun multipleConstructors() {
|
||||
val adapter = moshi.adapter<MultipleConstructorsB>()
|
||||
|
||||
//language=JSON
|
||||
assertThat(adapter.toJson(MultipleConstructorsB(6))).isEqualTo("""{"f":{"f":6},"b":6}""")
|
||||
|
||||
@Language("JSON")
|
||||
@@ -342,6 +343,59 @@ class DualKotlinTest(useReflection: Boolean) {
|
||||
class MultipleConstructorsB(val f: MultipleConstructorsA = MultipleConstructorsA(5), val b: Int) {
|
||||
constructor(f: Int, b: Int = 6): this(MultipleConstructorsA(f), b)
|
||||
}
|
||||
|
||||
@Test fun `multiple non-property parameters`() {
|
||||
val adapter = moshi.adapter<MultipleNonPropertyParameters>()
|
||||
|
||||
@Language("JSON")
|
||||
val testJson = """{"prop":7}"""
|
||||
|
||||
assertThat(adapter.toJson(MultipleNonPropertyParameters(7))).isEqualTo(testJson)
|
||||
|
||||
val result = adapter.fromJson(testJson)!!
|
||||
assertThat(result.prop).isEqualTo(7)
|
||||
}
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
class MultipleNonPropertyParameters(
|
||||
val prop: Int,
|
||||
param1: Int = 1,
|
||||
param2: Int = 2
|
||||
) {
|
||||
init {
|
||||
// Ensure the params always uses their default value
|
||||
require(param1 == 1)
|
||||
require(param2 == 2)
|
||||
}
|
||||
}
|
||||
|
||||
// Tests the case of multiple parameters with no parameter properties.
|
||||
@Test fun `only multiple non-property parameters`() {
|
||||
val adapter = moshi.adapter<OnlyMultipleNonPropertyParameters>()
|
||||
|
||||
@Language("JSON")
|
||||
val testJson = """{"prop":7}"""
|
||||
|
||||
assertThat(adapter.toJson(OnlyMultipleNonPropertyParameters().apply { prop = 7 }))
|
||||
.isEqualTo(testJson)
|
||||
|
||||
val result = adapter.fromJson(testJson)!!
|
||||
assertThat(result.prop).isEqualTo(7)
|
||||
}
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
class OnlyMultipleNonPropertyParameters(
|
||||
param1: Int = 1,
|
||||
param2: Int = 2
|
||||
) {
|
||||
init {
|
||||
// Ensure the params always uses their default value
|
||||
require(param1 == 1)
|
||||
require(param2 == 2)
|
||||
}
|
||||
|
||||
var prop: Int = 0
|
||||
}
|
||||
}
|
||||
|
||||
// Has to be outside since inline classes are only allowed on top level
|
||||
|
@@ -75,7 +75,7 @@ class MultipleMasks(
|
||||
val arg17: Long = 17,
|
||||
val arg18: Long = 18,
|
||||
val arg19: Long = 19,
|
||||
val arg20: Long = 20,
|
||||
@Suppress("UNUSED_PARAMETER") arg20: Long = 20,
|
||||
val arg21: Long = 21,
|
||||
val arg22: Long = 22,
|
||||
val arg23: Long = 23,
|
||||
|
Reference in New Issue
Block a user