diff --git a/release-notes/CREDITS-2.x b/release-notes/CREDITS-2.x index a233b47ea..8674e6210 100644 --- a/release-notes/CREDITS-2.x +++ b/release-notes/CREDITS-2.x @@ -13,6 +13,10 @@ Authors: Contributors: +Fedor Bobin (Fuud@github) +* #496, #45: Fix treeToValue extension function should not have type erasure + (2.13) + Mikhael Sokolov (sokomishalov@github) * #489: JsonNode, ArrayNode and ObjectNode extension functions diff --git a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/Extensions.kt b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/Extensions.kt index 9d5ab1986..730be8524 100644 --- a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/Extensions.kt +++ b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/Extensions.kt @@ -46,12 +46,12 @@ inline fun ObjectMapper.readValue(src: Reader): T = readValue(src, j inline fun ObjectMapper.readValue(src: InputStream): T = readValue(src, jacksonTypeRef()) inline fun ObjectMapper.readValue(src: ByteArray): T = readValue(src, jacksonTypeRef()) -inline fun ObjectMapper.treeToValue(n: TreeNode): T? = treeToValue(n, T::class.java) +inline fun ObjectMapper.treeToValue(n: TreeNode): T = readValue(this.treeAsTokens(n), jacksonTypeRef()) inline fun ObjectMapper.convertValue(from: Any): T = convertValue(from, jacksonTypeRef()) inline fun ObjectReader.readValueTyped(jp: JsonParser): T = readValue(jp, jacksonTypeRef()) inline fun ObjectReader.readValuesTyped(jp: JsonParser): Iterator = readValues(jp, jacksonTypeRef()) -inline fun ObjectReader.treeToValue(n: TreeNode): T? = treeToValue(n, T::class.java) +inline fun ObjectReader.treeToValue(n: TreeNode): T? = readValue(this.treeAsTokens(n), jacksonTypeRef()) operator fun ArrayNode.plus(element: Boolean) = Unit.apply { add(element) } operator fun ArrayNode.plus(element: Short) = Unit.apply { add(element) } diff --git a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/ExtensionMethodsTests.kt b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/ExtensionMethodsTests.kt index 963e86cb1..6ee5ec54e 100644 --- a/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/ExtensionMethodsTests.kt +++ b/src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/ExtensionMethodsTests.kt @@ -61,4 +61,19 @@ class TestExtensionMethods { (4 downTo 0).forEach { arrayNode -= it } assertThat(arrayNode.size(), `is`(0)) } + + @Test fun noTypeErasure(){ + data class Person(val name: String) + val source = """[ { "name" : "Neo" } ]""" + val tree = mapper.readTree(source) + + val readValueResult: List = mapper.readValue(source) + assertThat(readValueResult, `is`(listOf(Person("Neo")))) + + val treeToValueResult: List = mapper.treeToValue(tree) + assertThat(treeToValueResult, `is`(listOf(Person("Neo")))) + + val convertValueResult: List = mapper.convertValue(tree) + assertThat(convertValueResult, `is`(listOf(Person("Neo")))) + } } \ No newline at end of file