From 8727022e03b1b1c2eae33d42ca48fc8daf3386db Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sun, 12 Jul 2020 18:20:03 +0200 Subject: [PATCH] try to get ScalaAnnotationIntrospector to ignore non-Scala classes --- .../ScalaAnnotationIntrospectorModule.scala | 12 ++++++------ .../jackson/module/scala/util/Classes.scala | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/scala/com/fasterxml/jackson/module/scala/introspect/ScalaAnnotationIntrospectorModule.scala b/src/main/scala/com/fasterxml/jackson/module/scala/introspect/ScalaAnnotationIntrospectorModule.scala index aa66658a1..6d9e0cbfe 100644 --- a/src/main/scala/com/fasterxml/jackson/module/scala/introspect/ScalaAnnotationIntrospectorModule.scala +++ b/src/main/scala/com/fasterxml/jackson/module/scala/introspect/ScalaAnnotationIntrospectorModule.scala @@ -3,23 +3,21 @@ package com.fasterxml.jackson.module.scala.introspect import java.lang.annotation.Annotation import com.fasterxml.jackson.annotation.JsonCreator -import com.fasterxml.jackson.databind.{BeanDescription, DeserializationConfig, DeserializationContext} import com.fasterxml.jackson.databind.`type`.ClassKey -import com.fasterxml.jackson.databind.deser.{CreatorProperty, NullValueProvider, SettableBeanProperty, ValueInstantiator, ValueInstantiators} import com.fasterxml.jackson.databind.deser.std.StdValueInstantiator +import com.fasterxml.jackson.databind.deser._ import com.fasterxml.jackson.databind.introspect._ import com.fasterxml.jackson.databind.util.{AccessPattern, LRUMap} +import com.fasterxml.jackson.databind.{BeanDescription, DeserializationConfig, DeserializationContext} import com.fasterxml.jackson.module.scala.JacksonModule import com.fasterxml.jackson.module.scala.util.Implicits._ object ScalaAnnotationIntrospector extends NopAnnotationIntrospector with ValueInstantiators { private [this] val _descriptorCache = new LRUMap[ClassKey, BeanDescriptor](16, 100) + private val productClass = classOf[Product] private def _descriptorFor(clz: Class[_]): Option[BeanDescriptor] = { - if (clz.getName.startsWith("io.swagger.models")) { - //ignore swagger model java classes -- https://github.com/FasterXML/jackson-module-scala/issues/454 - None - } else { + if (clz.hasSignature || productClass.isAssignableFrom(clz)) { val key = new ClassKey(clz) Option(_descriptorCache.get(key)) match { case Some(result) => Some(result) @@ -29,6 +27,8 @@ object ScalaAnnotationIntrospector extends NopAnnotationIntrospector with ValueI Some(introspector) } } + } else { + None } } 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 b83ec1dad..72295f512 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 @@ -4,6 +4,7 @@ import scala.language.implicitConversions import scala.reflect.{ScalaLongSignature, ScalaSignature} trait ClassW extends PimpedType[Class[_]] { + def hasSignature: Boolean = { def hasSigHelper(clazz: Class[_]): Boolean = { if (clazz == null) false