|
1 | 1 | package com.fasterxml.jackson.module.scala.introspect
|
2 | 2 |
|
3 | 3 | import com.fasterxml.jackson.annotation.JsonCreator
|
4 |
| -import com.fasterxml.jackson.databind.`type`.ClassKey |
| 4 | +import com.fasterxml.jackson.databind.`type`.{ClassKey, ReferenceType, SimpleType} |
5 | 5 | import com.fasterxml.jackson.databind.annotation.JsonDeserialize
|
6 | 6 | import com.fasterxml.jackson.databind.cfg.MapperConfig
|
7 | 7 | import com.fasterxml.jackson.databind.deser.std.StdValueInstantiator
|
8 | 8 | import com.fasterxml.jackson.databind.deser._
|
9 | 9 | import com.fasterxml.jackson.databind.introspect._
|
10 | 10 | 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} |
12 | 12 | import com.fasterxml.jackson.module.scala.JacksonModule
|
13 | 13 | import com.fasterxml.jackson.module.scala.util.Implicits._
|
14 | 14 |
|
@@ -265,7 +265,22 @@ private case class WrappedCreatorProperty(creatorProperty: CreatorProperty, refC
|
265 | 265 | result.orNull.asInstanceOf[A]
|
266 | 266 | }
|
267 | 267 |
|
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() = { |
269 | 284 | new JsonDeserialize() {
|
270 | 285 | override def contentAs: Class[_] = refClass
|
271 | 286 | override def annotationType: Class[JsonDeserialize] = classOf[JsonDeserialize]
|
|
0 commit comments