Skip to content

Commit c5da203

Browse files
authored
Merge pull request #8 from ProjectMapK/refactors
Refactors.
2 parents 9ae3b53 + e7141a8 commit c5da203

File tree

4 files changed

+22
-42
lines changed

4 files changed

+22
-42
lines changed

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ internal fun JsonMappingException.wrapWithPath(refFrom: Any?, index: Int) = Json
1111
internal fun Int.toBitSet(): BitSet {
1212
var i = this
1313
var index = 0
14-
val bits = BitSet(32)
14+
val bits = BitSet(Int.SIZE_BITS)
1515
while (i != 0) {
1616
if (i % 2 != 0) {
1717
bits.set(index)
@@ -22,10 +22,7 @@ internal fun Int.toBitSet(): BitSet {
2222
return bits
2323
}
2424

25-
// In the future, value classes without @JvmInline will be available, and unboxing may not be able to handle it.
26-
// https://github.com/FasterXML/jackson-module-kotlin/issues/464
27-
// The JvmInline annotation can be added to Java classes,
28-
// so the isKotlinClass decision is necessary (the order is preferable in terms of possible frequency).
29-
internal fun Class<*>.isUnboxableValueClass() = annotations.any { it is JvmInline } && this.isKotlinClass()
25+
internal fun Class<*>.isKotlinClass(): Boolean = declaredAnnotations.any { it is Metadata }
26+
internal fun Class<*>.isUnboxableValueClass() = annotations.any { it is JvmInline }
3027

3128
internal fun KType.erasedType(): Class<out Any> = this.jvmErasure.java

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,6 @@ import com.fasterxml.jackson.module.kotlin.ser.serializers.KotlinSerializers
1717
import java.util.*
1818
import kotlin.reflect.KClass
1919

20-
private const val metadataFqName = "kotlin.Metadata"
21-
22-
fun Class<*>.isKotlinClass(): Boolean {
23-
return declaredAnnotations.any { it.annotationClass.java.name == metadataFqName }
24-
}
25-
2620
/**
2721
* @param reflectionCacheSize Default: 512. Size, in items, of the caches used for mapping objects.
2822
* @param nullToEmptyCollection Default: false. Whether to deserialize null values for collection properties as

src/main/kotlin/com/fasterxml/jackson/module/kotlin/deser/singleton_support/KotlinBeanDeserializerModifier.kt

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,19 @@ import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier
77
import com.fasterxml.jackson.module.kotlin.isKotlinClass
88

99
// [module-kotlin#225]: keep Kotlin singletons as singletons
10-
object KotlinBeanDeserializerModifier : BeanDeserializerModifier() {
10+
internal object KotlinBeanDeserializerModifier : BeanDeserializerModifier() {
1111
override fun modifyDeserializer(
1212
config: DeserializationConfig,
1313
beanDesc: BeanDescription,
1414
deserializer: JsonDeserializer<*>
1515
): JsonDeserializer<out Any> {
1616
val modifiedFromParent = super.modifyDeserializer(config, beanDesc, deserializer)
1717

18-
val objectSingletonInstance = objectSingletonInstance(beanDesc.beanClass)
19-
return if (objectSingletonInstance != null) {
20-
KotlinObjectSingletonDeserializer(objectSingletonInstance, modifiedFromParent)
21-
} else {
22-
modifiedFromParent
23-
}
18+
return objectSingletonInstance(beanDesc.beanClass)
19+
?.let { KotlinObjectSingletonDeserializer(it, modifiedFromParent) }
20+
?: modifiedFromParent
2421
}
2522
}
2623

27-
private fun objectSingletonInstance(beanClass: Class<*>): Any? = if (!beanClass.isKotlinClass()) {
28-
null
29-
} else {
30-
beanClass.kotlin.objectInstance
31-
}
24+
private fun objectSingletonInstance(beanClass: Class<*>): Any? = beanClass.takeIf { beanClass.isKotlinClass() }
25+
?.let { it.kotlin.objectInstance }

src/main/kotlin/com/fasterxml/jackson/module/kotlin/deser/singleton_support/KotlinObjectSingletonDeserializer.kt

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,35 +8,30 @@ import com.fasterxml.jackson.databind.deser.ContextualDeserializer
88
import com.fasterxml.jackson.databind.deser.ResolvableDeserializer
99

1010
internal fun JsonDeserializer<*>.asSingletonDeserializer(singleton: Any) =
11-
KotlinObjectSingletonDeserializer(singleton, this)
11+
KotlinObjectSingletonDeserializer(singleton, this)
1212

1313
/** deserialize as normal, but return the canonical singleton instance. */
1414
internal class KotlinObjectSingletonDeserializer(
15-
private val singletonInstance: Any,
16-
private val defaultDeserializer: JsonDeserializer<*>
15+
private val singletonInstance: Any,
16+
private val defaultDeserializer: JsonDeserializer<*>
1717
) : JsonDeserializer<Any>(),
18-
// Additional interfaces of a specific 'JsonDeserializer' must be supported
19-
// Kotlin objectInstances are currently handled by a BeanSerializer which
20-
// implements 'ContextualDeserializer' and 'ResolvableDeserializer'.
21-
ContextualDeserializer,
22-
ResolvableDeserializer {
18+
// Additional interfaces of a specific 'JsonDeserializer' must be supported
19+
// Kotlin objectInstances are currently handled by a BeanSerializer which
20+
// implements 'ContextualDeserializer' and 'ResolvableDeserializer'.
21+
ContextualDeserializer,
22+
ResolvableDeserializer {
2323

2424
override fun resolve(ctxt: DeserializationContext?) {
25-
if (defaultDeserializer is ResolvableDeserializer) {
26-
defaultDeserializer.resolve(ctxt)
27-
}
25+
if (defaultDeserializer is ResolvableDeserializer) defaultDeserializer.resolve(ctxt)
2826
}
2927

3028
override fun createContextual(ctxt: DeserializationContext?, property: BeanProperty?): JsonDeserializer<*> =
31-
if (defaultDeserializer is ContextualDeserializer) {
32-
defaultDeserializer.createContextual(ctxt, property)
33-
.asSingletonDeserializer(singletonInstance)
34-
} else {
35-
this
36-
}
29+
(defaultDeserializer as? ContextualDeserializer)
30+
?.let { it.createContextual(ctxt, property).asSingletonDeserializer(singletonInstance) }
31+
?: this
3732

3833
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Any {
3934
defaultDeserializer.deserialize(p, ctxt)
4035
return singletonInstance
4136
}
42-
}
37+
}

0 commit comments

Comments
 (0)