Skip to content

Commit be07a10

Browse files
authored
Merge pull request #954 from k163377/remove-tri-state
Replace BooleanTriState with OptBoolean
2 parents c041932 + 4bd59e9 commit be07a10

File tree

3 files changed

+7
-24
lines changed

3 files changed

+7
-24
lines changed

release-notes/CREDITS-2.x

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Contributors:
1818
# 2.19.0 (not yet released)
1919

2020
WrongWrong (@k163377)
21+
* #954: Replace BooleanTriState with OptBoolean
2122
* #944: Fixed to use common util for Member accessibility override
2223
* #937: Added type match check to read functions
2324

release-notes/VERSION-2.x

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Co-maintainers:
1818

1919
2.19.0 (not yet released)
2020

21+
#954: Replaced `OptBoolean` of internal caching with a common implementation.
2122
#944: Common util is now used for member accessibility overrides.
2223
#937: For `readValue` and other shorthands for `ObjectMapper` deserialization methods,
2324
type consistency checks have been added.

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

+5-24
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.fasterxml.jackson.module.kotlin
22

3+
import com.fasterxml.jackson.annotation.OptBoolean
34
import com.fasterxml.jackson.databind.introspect.AnnotatedConstructor
45
import com.fasterxml.jackson.databind.introspect.AnnotatedMember
56
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod
@@ -22,32 +23,12 @@ import kotlin.reflect.jvm.kotlinFunction
2223
internal class ReflectionCache(reflectionCacheSize: Int) : Serializable {
2324
companion object {
2425
// Increment is required when properties that use LRUMap are changed.
25-
private const val serialVersionUID = 3L
26-
}
27-
28-
sealed class BooleanTriState(val value: Boolean?) {
29-
class True : BooleanTriState(true)
30-
class False : BooleanTriState(false)
31-
class Empty : BooleanTriState(null)
32-
33-
companion object {
34-
private val TRUE = True()
35-
private val FALSE = False()
36-
private val EMPTY = Empty()
37-
38-
fun fromBoolean(value: Boolean?): BooleanTriState {
39-
return when (value) {
40-
null -> EMPTY
41-
true -> TRUE
42-
false -> FALSE
43-
}
44-
}
45-
}
26+
private const val serialVersionUID = 4L
4627
}
4728

4829
private val javaExecutableToKotlin = LRUMap<Executable, KFunction<*>>(reflectionCacheSize, reflectionCacheSize)
4930
private val javaExecutableToValueCreator = LRUMap<Executable, ValueCreator<*>>(reflectionCacheSize, reflectionCacheSize)
50-
private val javaMemberIsRequired = LRUMap<AnnotatedMember, BooleanTriState?>(reflectionCacheSize, reflectionCacheSize)
31+
private val javaMemberIsRequired = LRUMap<AnnotatedMember, OptBoolean?>(reflectionCacheSize, reflectionCacheSize)
5132

5233
// Initial size is 0 because the value class is not always used
5334
private val valueClassReturnTypeCache: LRUMap<AnnotatedMethod, Optional<KClass<*>>> =
@@ -102,8 +83,8 @@ internal class ReflectionCache(reflectionCacheSize: Int) : Serializable {
10283
)
10384
} // we cannot reflect this method so do the default Java-ish behavior
10485

105-
fun javaMemberIsRequired(key: AnnotatedMember, calc: (AnnotatedMember) -> Boolean?): Boolean? = javaMemberIsRequired.get(key)?.value
106-
?: calc(key).let { javaMemberIsRequired.putIfAbsent(key, BooleanTriState.fromBoolean(it))?.value ?: it }
86+
fun javaMemberIsRequired(key: AnnotatedMember, calc: (AnnotatedMember) -> Boolean?): Boolean? = javaMemberIsRequired.get(key)?.asBoolean()
87+
?: calc(key).let { javaMemberIsRequired.putIfAbsent(key, OptBoolean.fromBoolean(it))?.asBoolean() ?: it }
10788

10889
private fun AnnotatedMethod.getValueClassReturnType(): KClass<*>? {
10990
val getter = this.member.apply {

0 commit comments

Comments
 (0)