Skip to content

Commit 48d9104

Browse files
authored
Merge pull request #497 from Fuud/fix_treeToValue
treeToValue extensions function should not have type erasure
2 parents 11807c9 + 55dd139 commit 48d9104

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

release-notes/CREDITS-2.x

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ Authors:
1313

1414
Contributors:
1515

16+
Fedor Bobin (Fuud@github)
17+
* #496, #45: Fix treeToValue extension function should not have type erasure
18+
(2.13)
19+
1620
Mikhael Sokolov (sokomishalov@github)
1721
* #489: JsonNode, ArrayNode and ObjectNode extension functions
1822

src/main/kotlin/com/fasterxml/jackson/module/kotlin/Extensions.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ inline fun <reified T> ObjectMapper.readValue(src: Reader): T = readValue(src, j
4646
inline fun <reified T> ObjectMapper.readValue(src: InputStream): T = readValue(src, jacksonTypeRef<T>())
4747
inline fun <reified T> ObjectMapper.readValue(src: ByteArray): T = readValue(src, jacksonTypeRef<T>())
4848

49-
inline fun <reified T> ObjectMapper.treeToValue(n: TreeNode): T? = treeToValue(n, T::class.java)
49+
inline fun <reified T> ObjectMapper.treeToValue(n: TreeNode): T = readValue(this.treeAsTokens(n), jacksonTypeRef<T>())
5050
inline fun <reified T> ObjectMapper.convertValue(from: Any): T = convertValue(from, jacksonTypeRef<T>())
5151

5252
inline fun <reified T> ObjectReader.readValueTyped(jp: JsonParser): T = readValue(jp, jacksonTypeRef<T>())
5353
inline fun <reified T> ObjectReader.readValuesTyped(jp: JsonParser): Iterator<T> = readValues(jp, jacksonTypeRef<T>())
54-
inline fun <reified T> ObjectReader.treeToValue(n: TreeNode): T? = treeToValue(n, T::class.java)
54+
inline fun <reified T> ObjectReader.treeToValue(n: TreeNode): T? = readValue(this.treeAsTokens(n), jacksonTypeRef<T>())
5555

5656
operator fun ArrayNode.plus(element: Boolean) = Unit.apply { add(element) }
5757
operator fun ArrayNode.plus(element: Short) = Unit.apply { add(element) }

src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/ExtensionMethodsTests.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,19 @@ class TestExtensionMethods {
6161
(4 downTo 0).forEach { arrayNode -= it }
6262
assertThat(arrayNode.size(), `is`(0))
6363
}
64+
65+
@Test fun noTypeErasure(){
66+
data class Person(val name: String)
67+
val source = """[ { "name" : "Neo" } ]"""
68+
val tree = mapper.readTree(source)
69+
70+
val readValueResult: List<Person> = mapper.readValue(source)
71+
assertThat(readValueResult, `is`(listOf(Person("Neo"))))
72+
73+
val treeToValueResult: List<Person> = mapper.treeToValue(tree)
74+
assertThat(treeToValueResult, `is`(listOf(Person("Neo"))))
75+
76+
val convertValueResult: List<Person> = mapper.convertValue(tree)
77+
assertThat(convertValueResult, `is`(listOf(Person("Neo"))))
78+
}
6479
}

0 commit comments

Comments
 (0)