Added codegen support for inline classes (#923)

* Added codegen support for inline classes

* moved to DualKotlinTest

* added test class consuming inline class
This commit is contained in:
Burkhard Mittelbach
2019-10-17 00:17:23 +02:00
committed by Zac Sweers
parent ae8b62b3ee
commit b4e6715248
2 changed files with 33 additions and 0 deletions

View File

@@ -117,6 +117,7 @@
<args> <args>
<arg>-Werror</arg> <arg>-Werror</arg>
<arg>-Xuse-experimental=kotlin.ExperimentalStdlibApi</arg> <arg>-Xuse-experimental=kotlin.ExperimentalStdlibApi</arg>
<arg>-XXLanguage:+InlineClasses</arg>
</args> </args>
</configuration> </configuration>
</plugin> </plugin>

View File

@@ -252,4 +252,36 @@ class DualKotlinTest(useReflection: Boolean) {
assertThat(decoded.a).isEqualTo(null) assertThat(decoded.a).isEqualTo(null)
} }
@Test fun inlineClass() {
val adapter = moshi.adapter<InlineClass>()
val inline = InlineClass(5)
val expectedJson = """{"i":5}"""
assertThat(adapter.toJson(inline)).isEqualTo(expectedJson)
val testJson = """{"i":6}"""
val result = adapter.fromJson(testJson)!!
assertThat(result.i).isEqualTo(6)
} }
@JsonClass(generateAdapter = true)
data class InlineConsumer(val inline: InlineClass)
@Test fun inlineClassConsumer() {
val adapter = moshi.adapter<InlineConsumer>()
val consumer = InlineConsumer(InlineClass(23))
val expectedJson= """{"inline":{"i":23}}"""
assertThat(adapter.toJson(consumer)).isEqualTo(expectedJson)
val testJson = """{"inline":{"i":42}}"""
val result = adapter.fromJson(testJson)!!
assertThat(result.inline.i).isEqualTo(42)
}
}
// Has to be outside since inline classes are only allowed on top level
@JsonClass(generateAdapter = true)
inline class InlineClass(val i: Int)