Skip to content

Commit

Permalink
refactor scala object deserialization
Browse files Browse the repository at this point in the history
  • Loading branch information
pjfanning committed Nov 30, 2023
1 parent da17299 commit 9cd0539
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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}
Expand Down Expand Up @@ -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
}
}

Expand Down

0 comments on commit 9cd0539

Please sign in to comment.