Skip to content

Commit 9cd0539

Browse files
committed
refactor scala object deserialization
1 parent da17299 commit 9cd0539

File tree

2 files changed

+10
-14
lines changed

2 files changed

+10
-14
lines changed

src/main/scala/com/fasterxml/jackson/module/scala/deser/ScalaObjectDeserializerModule.scala

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,15 @@ import com.fasterxml.jackson.module.scala.util.ClassW
1010
import scala.languageFeature.postfixOps
1111
import scala.util.control.NonFatal
1212

13-
private class ScalaObjectDeserializer(clazz: Class[_]) extends StdDeserializer[Any](classOf[Any]) {
14-
override def deserialize(p: JsonParser, ctxt: DeserializationContext): Any = {
15-
try {
16-
clazz.getField("MODULE$").get(null)
17-
} catch {
18-
case NonFatal(_) => null
19-
}
20-
}
13+
private class ScalaObjectDeserializer(value: Any) extends StdDeserializer[Any](classOf[Any]) {
14+
override def deserialize(p: JsonParser, ctxt: DeserializationContext): Any = value
2115
}
2216

2317
private object ScalaObjectDeserializerResolver extends Deserializers.Base {
2418
override def findBeanDeserializer(javaType: JavaType, config: DeserializationConfig, beanDesc: BeanDescription): JsonDeserializer[_] = {
25-
val clazz = javaType.getRawClass
26-
if (ClassW(clazz).isScalaObject)
27-
new ScalaObjectDeserializer(clazz)
28-
else null
19+
ClassW(javaType.getRawClass).getModuleField.flatMap { field =>
20+
Option(field.get(null))
21+
}.map(new ScalaObjectDeserializer(_)).orNull
2922
}
3023
}
3124

src/main/scala/com/fasterxml/jackson/module/scala/util/Classes.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.fasterxml.jackson.module.scala.util
22

3+
import java.lang.reflect.Field
34
import scala.annotation.tailrec
45
import scala.language.implicitConversions
56
import scala.reflect.{ScalaLongSignature, ScalaSignature}
@@ -28,8 +29,10 @@ trait ClassW extends PimpedType[Class[_]] {
2829
hasSigHelper(value)
2930
}
3031

31-
def isScalaObject: Boolean = {
32-
Try(value.getField("MODULE$")).isSuccess
32+
def isScalaObject: Boolean = getModuleField.nonEmpty
33+
34+
def getModuleField: Option[Field] = {
35+
Try(value.getField("MODULE$")).toOption
3336
}
3437
}
3538

0 commit comments

Comments
 (0)