diff --git a/src/main/kotlin/tools/jackson/module/kotlin/ConstructorValueCreator.kt b/src/main/kotlin/tools/jackson/module/kotlin/ConstructorValueCreator.kt index fc586356..2fde3e66 100644 --- a/src/main/kotlin/tools/jackson/module/kotlin/ConstructorValueCreator.kt +++ b/src/main/kotlin/tools/jackson/module/kotlin/ConstructorValueCreator.kt @@ -3,7 +3,7 @@ package tools.jackson.module.kotlin import kotlin.reflect.KFunction import kotlin.reflect.jvm.isAccessible -internal class ConstructorValueCreator(override val callable: KFunction) : tools.jackson.module.kotlin.ValueCreator() { +internal class ConstructorValueCreator(override val callable: KFunction) : ValueCreator() { override val accessible: Boolean = callable.isAccessible init { diff --git a/src/main/kotlin/tools/jackson/module/kotlin/Extensions.kt b/src/main/kotlin/tools/jackson/module/kotlin/Extensions.kt index aeb064f2..c0af907a 100644 --- a/src/main/kotlin/tools/jackson/module/kotlin/Extensions.kt +++ b/src/main/kotlin/tools/jackson/module/kotlin/Extensions.kt @@ -36,9 +36,7 @@ fun jsonMapper(initializer: JsonMapper.Builder.() -> Unit = {}): JsonMapper { } //TODO: causing java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 -fun jacksonObjectMapper(): ObjectMapper = - jsonMapper { addModule(kotlinModule()) } - +fun jacksonObjectMapper(): ObjectMapper = jsonMapper { addModule(kotlinModule()) } fun jacksonMapperBuilder(): JsonMapper.Builder = JsonMapper.builder().addModule(kotlinModule()) // 22-Jul-2019, tatu: Can not be implemented same way as in 2.x, addition via mapper.builder(): @@ -46,8 +44,8 @@ fun jacksonMapperBuilder(): JsonMapper.Builder = JsonMapper.builder().addModule( inline fun jacksonTypeRef(): TypeReference = object : TypeReference() {} -inline fun ObjectMapper.readValue(p: JsonParser): T = readValue(p, jacksonTypeRef()) -inline fun ObjectMapper.readValues(p: JsonParser): MappingIterator = readValues(p, jacksonTypeRef()) +inline fun ObjectMapper.readValue(jp: JsonParser): T = readValue(jp, jacksonTypeRef()) +inline fun ObjectMapper.readValues(jp: JsonParser): MappingIterator = readValues(jp, jacksonTypeRef()) inline fun ObjectMapper.readValue(src: File): T = readValue(src, jacksonTypeRef()) inline fun ObjectMapper.readValue(src: URL): T = readValue(src, jacksonTypeRef()) @@ -59,9 +57,9 @@ inline fun ObjectMapper.readValue(src: ByteArray): T = readValue(src 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(p: JsonParser): T = forType(jacksonTypeRef()).readValue(p) -inline fun ObjectReader.readValuesTyped(p: JsonParser): Iterator = readValues(p, jacksonTypeRef()) -inline fun ObjectReader.treeToValue(n: TreeNode): T? = forType(jacksonTypeRef()).readValue(this.treeAsTokens(n)) +inline fun ObjectReader.readValueTyped(jp: JsonParser): T = forType(jacksonTypeRef()).readValue(jp) +inline fun ObjectReader.readValuesTyped(jp: JsonParser): Iterator = readValues(jp, jacksonTypeRef()) +inline fun ObjectReader.treeToValue(jp: TreeNode): T? = forType(jacksonTypeRef()).readValue(this.treeAsTokens(jp)) inline fun JsonMapper.Builder.addMixIn(): JsonMapper.Builder = this.addMixIn(T::class.java, U::class.java) diff --git a/src/main/kotlin/tools/jackson/module/kotlin/KotlinAnnotationIntrospector.kt b/src/main/kotlin/tools/jackson/module/kotlin/KotlinAnnotationIntrospector.kt index bc1dcbc6..d30b1980 100644 --- a/src/main/kotlin/tools/jackson/module/kotlin/KotlinAnnotationIntrospector.kt +++ b/src/main/kotlin/tools/jackson/module/kotlin/KotlinAnnotationIntrospector.kt @@ -134,16 +134,14 @@ internal class KotlinAnnotationIntrospector( * Subclasses can be detected automatically for sealed classes, since all possible subclasses are known * at compile-time to Kotlin. This makes [com.fasterxml.jackson.annotation.JsonSubTypes] redundant. */ - override fun findSubtypes(cfg : MapperConfig<*>, a: Annotated): MutableList? { - return a.rawType - .takeIf { it.isKotlinClass() } - ?.let { rawType -> - rawType.kotlin.sealedSubclasses - .map { NamedType(it.java) } - .toMutableList() - .ifEmpty { null } - } - } + override fun findSubtypes(cfg : MapperConfig<*>, a: Annotated): MutableList? = a.rawType + .takeIf { it.isKotlinClass() } + ?.let { rawType -> + rawType.kotlin.sealedSubclasses + .map { NamedType(it.java) } + .toMutableList() + .ifEmpty { null } + } private fun AnnotatedField.hasRequiredMarker(): Boolean? { val byAnnotation = (member as Field).isRequiredByAnnotation() diff --git a/src/main/kotlin/tools/jackson/module/kotlin/KotlinDeserializers.kt b/src/main/kotlin/tools/jackson/module/kotlin/KotlinDeserializers.kt index ee6457be..47ede187 100644 --- a/src/main/kotlin/tools/jackson/module/kotlin/KotlinDeserializers.kt +++ b/src/main/kotlin/tools/jackson/module/kotlin/KotlinDeserializers.kt @@ -42,16 +42,6 @@ object RegexDeserializer : StdDeserializer(Regex::class.java) { } } -/* -internal class KotlinDeserializers: Deserializers.Base() { - override fun findBeanDeserializer(type: JavaType, config: DeserializationConfig?, beanDesc: BeanDescription?): ValueDeserializer<*>? { - return if (type.isInterface && type.rawClass == Sequence::class.java) { - SequenceDeserializer - } else if (type.rawClass == Regex::class.java) { - RegexDeserializer - } else { - null -*/ object UByteDeserializer : StdDeserializer(UByte::class.java) { override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = p.shortValue.asUByte() ?: throw InputCoercionException( @@ -98,7 +88,7 @@ internal class KotlinDeserializers( override fun findBeanDeserializer( type: JavaType, config: DeserializationConfig?, - beanDesc: BeanDescription? + beanDesc: BeanDescription?, ): ValueDeserializer<*>? { return when { type.isInterface && type.rawClass == Sequence::class.java -> SequenceDeserializer diff --git a/src/main/kotlin/tools/jackson/module/kotlin/KotlinKeyDeserializers.kt b/src/main/kotlin/tools/jackson/module/kotlin/KotlinKeyDeserializers.kt index 39731430..14bed8c9 100644 --- a/src/main/kotlin/tools/jackson/module/kotlin/KotlinKeyDeserializers.kt +++ b/src/main/kotlin/tools/jackson/module/kotlin/KotlinKeyDeserializers.kt @@ -61,7 +61,7 @@ internal object KotlinKeyDeserializers : JDKKeyDeserializers() { override fun findKeyDeserializer( type: JavaType, config: DeserializationConfig?, - beanDesc: BeanDescription? + beanDesc: BeanDescription?, ): KeyDeserializer? = when (type.rawClass) { UByte::class.java -> UByteKeyDeserializer UShort::class.java -> UShortKeyDeserializer diff --git a/src/main/kotlin/tools/jackson/module/kotlin/KotlinSerializers.kt b/src/main/kotlin/tools/jackson/module/kotlin/KotlinSerializers.kt index 3dcf4452..5f24cc3c 100644 --- a/src/main/kotlin/tools/jackson/module/kotlin/KotlinSerializers.kt +++ b/src/main/kotlin/tools/jackson/module/kotlin/KotlinSerializers.kt @@ -117,20 +117,3 @@ internal class KotlinSerializers : Serializers.Base() { } } } - -// This serializer is used to properly serialize the value class. -// The getter generated for the value class is special, -// so this class will not work properly when added to the Serializers -// (it is configured from KotlinAnnotationIntrospector.findSerializer). -internal class ValueClassBoxSerializer( - private val outerClazz: Class, innerClazz: Class -) : StdSerializer(innerClazz) { - private val boxMethod = outerClazz.getMethod("box-impl", innerClazz) - - override fun serialize(value: T?, gen: JsonGenerator, provider: SerializerProvider) { - // Values retrieved from getter are considered validated and constructor-impl is not executed. - val boxed = boxMethod.invoke(null, value) - - provider.findValueSerializer(outerClazz).serialize(boxed, gen, provider) - } -} diff --git a/src/main/kotlin/tools/jackson/module/kotlin/KotlinValueInstantiator.kt b/src/main/kotlin/tools/jackson/module/kotlin/KotlinValueInstantiator.kt index bb9b36fc..5f6f024d 100644 --- a/src/main/kotlin/tools/jackson/module/kotlin/KotlinValueInstantiator.kt +++ b/src/main/kotlin/tools/jackson/module/kotlin/KotlinValueInstantiator.kt @@ -140,7 +140,7 @@ internal class KotlinValueInstantiator( numCallableParameters++ } - return if (numCallableParameters == jsonParamValueList.size && valueCreator is tools.jackson.module.kotlin.ConstructorValueCreator) { + return if (numCallableParameters == jsonParamValueList.size && valueCreator is ConstructorValueCreator) { // we didn't do anything special with default parameters, do a normal call super.createFromObjectWith(ctxt, jsonParamValueList) } else { diff --git a/src/main/kotlin/tools/jackson/module/kotlin/ValueCreator.kt b/src/main/kotlin/tools/jackson/module/kotlin/ValueCreator.kt index da6bba31..5c54d042 100644 --- a/src/main/kotlin/tools/jackson/module/kotlin/ValueCreator.kt +++ b/src/main/kotlin/tools/jackson/module/kotlin/ValueCreator.kt @@ -29,7 +29,7 @@ internal sealed class ValueCreator { // @see #584 val valueParameters: List get() = callable.valueParameters -/** + /** * Checking process to see if access from context is possible. * @throws IllegalAccessException */