Skip to content

Commit a357f15

Browse files
committed
Update ScalaAnnotationIntrospectorModule.scala
1 parent b02c1d8 commit a357f15

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

src/main/scala/com/fasterxml/jackson/module/scala/introspect/ScalaAnnotationIntrospectorModule.scala

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package com.fasterxml.jackson.module.scala.introspect
22

33
import com.fasterxml.jackson.annotation.JsonCreator
4-
import com.fasterxml.jackson.databind.`type`.ClassKey
4+
import com.fasterxml.jackson.databind.`type`.{ClassKey, ReferenceType, SimpleType}
55
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
66
import com.fasterxml.jackson.databind.cfg.MapperConfig
77
import com.fasterxml.jackson.databind.deser.std.StdValueInstantiator
88
import com.fasterxml.jackson.databind.deser._
99
import com.fasterxml.jackson.databind.introspect._
1010
import com.fasterxml.jackson.databind.util.{AccessPattern, Converter, LRUMap, LookupCache}
11-
import com.fasterxml.jackson.databind.{BeanDescription, DeserializationConfig, DeserializationContext, JsonDeserializer, KeyDeserializer, MapperFeature}
11+
import com.fasterxml.jackson.databind.{BeanDescription, DeserializationConfig, DeserializationContext, JavaType, JsonDeserializer, KeyDeserializer, MapperFeature}
1212
import com.fasterxml.jackson.module.scala.JacksonModule
1313
import com.fasterxml.jackson.module.scala.util.Implicits._
1414

@@ -265,7 +265,22 @@ private case class WrappedCreatorProperty(creatorProperty: CreatorProperty, refC
265265
result.orNull.asInstanceOf[A]
266266
}
267267

268-
private def getInstanceOfContentAsAnnotation(): JsonDeserialize = {
268+
override def getContextAnnotation[A <: Annotation](acls: Class[A]): A = {
269+
val result = Option(super.getContextAnnotation(acls)) match {
270+
case None if acls.isAssignableFrom(classOf[JsonDeserialize]) => Some(getInstanceOfContentAsAnnotation())
271+
case result => result
272+
}
273+
result.orNull.asInstanceOf[A]
274+
}
275+
276+
override def getType: JavaType = {
277+
super.getType match {
278+
case rt: ReferenceType => ReferenceType.upgradeFrom(rt, SimpleType.constructUnsafe(refClass))
279+
case other => other
280+
}
281+
}
282+
283+
private def getInstanceOfContentAsAnnotation() = {
269284
new JsonDeserialize() {
270285
override def contentAs: Class[_] = refClass
271286
override def annotationType: Class[JsonDeserialize] = classOf[JsonDeserialize]

0 commit comments

Comments
 (0)