From a3bdc087a86312aae59cfb8982affa6ed22fdccf Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 13 Apr 2025 00:28:04 +0900 Subject: [PATCH 1/2] Fixed to use common util for Member accessibility override The part related to KFunction is not modified because common util cannot be applied. --- .../kotlin/com/fasterxml/jackson/module/kotlin/Converters.kt | 3 ++- .../com/fasterxml/jackson/module/kotlin/KotlinDeserializers.kt | 3 ++- .../fasterxml/jackson/module/kotlin/KotlinKeyDeserializers.kt | 3 ++- .../com/fasterxml/jackson/module/kotlin/MethodValueCreator.kt | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/Converters.kt b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/Converters.kt index e1416426d..c284fb8c3 100644 --- a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/Converters.kt +++ b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/Converters.kt @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.JavaType import com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer import com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer import com.fasterxml.jackson.databind.type.TypeFactory +import com.fasterxml.jackson.databind.util.ClassUtil import com.fasterxml.jackson.databind.util.StdConverter import kotlin.reflect.KClass import kotlin.time.toJavaDuration @@ -51,7 +52,7 @@ internal class ValueClassBoxConverter( val boxedClass: KClass ) : StdConverter() { private val boxMethod = boxedClass.java.getDeclaredMethod("box-impl", unboxedClass).apply { - if (!this.isAccessible) this.isAccessible = true + ClassUtil.checkAndFixAccess(this, false) } @Suppress("UNCHECKED_CAST") diff --git a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinDeserializers.kt b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinDeserializers.kt index 4d8057ee6..09dd7e022 100644 --- a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinDeserializers.kt +++ b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinDeserializers.kt @@ -11,6 +11,7 @@ import com.fasterxml.jackson.databind.JsonDeserializer import com.fasterxml.jackson.databind.deser.Deserializers import com.fasterxml.jackson.databind.deser.std.StdDeserializer import com.fasterxml.jackson.databind.exc.InvalidDefinitionException +import com.fasterxml.jackson.databind.util.ClassUtil import java.lang.reflect.Method import java.lang.reflect.Modifier import kotlin.reflect.full.primaryConstructor @@ -106,7 +107,7 @@ internal class WrapsNullableValueClassBoxDeserializer( private val inputType: Class<*> = creator.parameterTypes[0] init { - creator.apply { if (!this.isAccessible) this.isAccessible = true } + ClassUtil.checkAndFixAccess(creator, false) } // Cache the result of wrapping null, since the result is always expected to be the same. diff --git a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinKeyDeserializers.kt b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinKeyDeserializers.kt index e9f4e222e..8658747a8 100644 --- a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinKeyDeserializers.kt +++ b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/KotlinKeyDeserializers.kt @@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.* import com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer import com.fasterxml.jackson.databind.deser.std.StdKeyDeserializers import com.fasterxml.jackson.databind.exc.InvalidDefinitionException +import com.fasterxml.jackson.databind.util.ClassUtil import java.lang.reflect.Method import kotlin.reflect.KClass import kotlin.reflect.full.primaryConstructor @@ -78,7 +79,7 @@ internal class ValueClassKeyDeserializer( private val unboxedClass: Class<*> = creator.parameterTypes[0] init { - creator.apply { if (!this.isAccessible) this.isAccessible = true } + ClassUtil.checkAndFixAccess(creator, false) } // Based on databind error diff --git a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/MethodValueCreator.kt b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/MethodValueCreator.kt index ed7f68ecf..b6c8dafb9 100644 --- a/src/main/kotlin/com/fasterxml/jackson/module/kotlin/MethodValueCreator.kt +++ b/src/main/kotlin/com/fasterxml/jackson/module/kotlin/MethodValueCreator.kt @@ -1,5 +1,6 @@ package com.fasterxml.jackson.module.kotlin +import com.fasterxml.jackson.databind.util.ClassUtil import kotlin.reflect.KFunction import kotlin.reflect.full.extensionReceiverParameter import kotlin.reflect.full.instanceParameter @@ -39,7 +40,7 @@ internal class MethodValueCreator private constructor( possibleCompanion.java.enclosingClass.declaredFields .firstOrNull { it.type.kotlin.isCompanion } ?.let { - it.isAccessible = true + ClassUtil.checkAndFixAccess(it, false) // If the instance of the companion object cannot be obtained, accessibility will always be false it.get(null) to false From 5769ecd3730151575a963b9b91c0d87e54312b7a Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 13 Apr 2025 00:44:38 +0900 Subject: [PATCH 2/2] Update release notes wrt #944 --- release-notes/CREDITS-2.x | 1 + release-notes/VERSION-2.x | 1 + 2 files changed, 2 insertions(+) diff --git a/release-notes/CREDITS-2.x b/release-notes/CREDITS-2.x index e5f19416a..6af8dd08e 100644 --- a/release-notes/CREDITS-2.x +++ b/release-notes/CREDITS-2.x @@ -18,6 +18,7 @@ Contributors: # 2.19.0 (not yet released) WrongWrong (@k163377) +* #944: Fixed to use common util for Member accessibility override * #937: Added type match check to read functions Tatu Saloranta (@cowtowncoder) diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index 7cd03965c..6a4a5b577 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -18,6 +18,7 @@ Co-maintainers: 2.19.0 (not yet released) +#944: Common util is now used for member accessibility overrides. #937: For `readValue` and other shorthands for `ObjectMapper` deserialization methods, type consistency checks have been added. A `RuntimeJsonMappingException` will be thrown in case of inconsistency.