From 9cd05391ea8cc2e0d4b0597444a613e9bb2f65e6 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Thu, 30 Nov 2023 21:02:21 +0100 Subject: [PATCH] refactor scala object deserialization --- .../deser/ScalaObjectDeserializerModule.scala | 17 +++++------------ .../jackson/module/scala/util/Classes.scala | 7 +++++-- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/main/scala/com/fasterxml/jackson/module/scala/deser/ScalaObjectDeserializerModule.scala b/src/main/scala/com/fasterxml/jackson/module/scala/deser/ScalaObjectDeserializerModule.scala index fe061873a..b6908df6d 100644 --- a/src/main/scala/com/fasterxml/jackson/module/scala/deser/ScalaObjectDeserializerModule.scala +++ b/src/main/scala/com/fasterxml/jackson/module/scala/deser/ScalaObjectDeserializerModule.scala @@ -10,22 +10,15 @@ import com.fasterxml.jackson.module.scala.util.ClassW import scala.languageFeature.postfixOps import scala.util.control.NonFatal -private class ScalaObjectDeserializer(clazz: Class[_]) extends StdDeserializer[Any](classOf[Any]) { - override def deserialize(p: JsonParser, ctxt: DeserializationContext): Any = { - try { - clazz.getField("MODULE$").get(null) - } catch { - case NonFatal(_) => null - } - } +private class ScalaObjectDeserializer(value: Any) extends StdDeserializer[Any](classOf[Any]) { + override def deserialize(p: JsonParser, ctxt: DeserializationContext): Any = value } private object ScalaObjectDeserializerResolver extends Deserializers.Base { override def findBeanDeserializer(javaType: JavaType, config: DeserializationConfig, beanDesc: BeanDescription): JsonDeserializer[_] = { - val clazz = javaType.getRawClass - if (ClassW(clazz).isScalaObject) - new ScalaObjectDeserializer(clazz) - else null + ClassW(javaType.getRawClass).getModuleField.flatMap { field => + Option(field.get(null)) + }.map(new ScalaObjectDeserializer(_)).orNull } } diff --git a/src/main/scala/com/fasterxml/jackson/module/scala/util/Classes.scala b/src/main/scala/com/fasterxml/jackson/module/scala/util/Classes.scala index c0aaf2f70..5fff77042 100644 --- a/src/main/scala/com/fasterxml/jackson/module/scala/util/Classes.scala +++ b/src/main/scala/com/fasterxml/jackson/module/scala/util/Classes.scala @@ -1,5 +1,6 @@ package com.fasterxml.jackson.module.scala.util +import java.lang.reflect.Field import scala.annotation.tailrec import scala.language.implicitConversions import scala.reflect.{ScalaLongSignature, ScalaSignature} @@ -28,8 +29,10 @@ trait ClassW extends PimpedType[Class[_]] { hasSigHelper(value) } - def isScalaObject: Boolean = { - Try(value.getField("MODULE$")).isSuccess + def isScalaObject: Boolean = getModuleField.nonEmpty + + def getModuleField: Option[Field] = { + Try(value.getField("MODULE$")).toOption } }