11package com .fasterxml .jackson .databind .deser .std ;
22
33import java .io .IOException ;
4+ import java .util .Collection ;
45
56import com .fasterxml .jackson .core .JsonParser ;
67
910import com .fasterxml .jackson .databind .deser .ResolvableDeserializer ;
1011import com .fasterxml .jackson .databind .jsontype .TypeDeserializer ;
1112import com .fasterxml .jackson .databind .type .LogicalType ;
13+ import com .fasterxml .jackson .databind .util .AccessPattern ;
1214import com .fasterxml .jackson .databind .util .ClassUtil ;
1315import com .fasterxml .jackson .databind .util .Converter ;
1416
@@ -210,11 +212,6 @@ protected Object _handleIncompatibleUpdateValue(JsonParser p, DeserializationCon
210212 /**********************************************************
211213 */
212214
213- @ Override
214- public JsonDeserializer <?> getDelegatee () {
215- return _delegateDeserializer ;
216- }
217-
218215 @ Override
219216 public Class <?> handledType () {
220217 return _delegateDeserializer .handledType ();
@@ -224,7 +221,60 @@ public Class<?> handledType() {
224221 public LogicalType logicalType () {
225222 return _delegateDeserializer .logicalType ();
226223 }
227-
224+
225+ // Let's assume we should be cachable if delegate is
226+ @ Override
227+ public boolean isCachable () {
228+ return (_delegateDeserializer != null ) && _delegateDeserializer .isCachable ();
229+ }
230+
231+ @ Override
232+ public JsonDeserializer <?> getDelegatee () {
233+ return _delegateDeserializer ;
234+ }
235+
236+ @ Override
237+ public Collection <Object > getKnownPropertyNames () {
238+ return _delegateDeserializer .getKnownPropertyNames ();
239+ }
240+
241+ /*
242+ /**********************************************************
243+ /* Null/empty/absent accessors
244+ /**********************************************************
245+ */
246+
247+ @ Override
248+ public T getNullValue (DeserializationContext ctxt ) throws JsonMappingException {
249+ return _convertIfNonNull (_delegateDeserializer .getNullValue (ctxt ));
250+ }
251+
252+ @ Override
253+ public AccessPattern getNullAccessPattern () {
254+ return _delegateDeserializer .getNullAccessPattern ();
255+ }
256+
257+ @ Override
258+ public Object getAbsentValue (DeserializationContext ctxt ) throws JsonMappingException {
259+ return _convertIfNonNull (_delegateDeserializer .getAbsentValue (ctxt ));
260+ }
261+
262+ @ Override
263+ public Object getEmptyValue (DeserializationContext ctxt ) throws JsonMappingException {
264+ return _convertIfNonNull (_delegateDeserializer .getEmptyValue (ctxt ));
265+ }
266+
267+ @ Override
268+ public AccessPattern getEmptyAccessPattern () {
269+ return _delegateDeserializer .getEmptyAccessPattern ();
270+ }
271+
272+ /*
273+ /**********************************************************
274+ /* Other accessors
275+ /**********************************************************
276+ */
277+
228278 @ Override // since 2.9
229279 public Boolean supportsUpdate (DeserializationConfig config ) {
230280 return _delegateDeserializer .supportsUpdate (config );
@@ -251,4 +301,16 @@ public Boolean supportsUpdate(DeserializationConfig config) {
251301 protected T convertValue (Object delegateValue ) {
252302 return _converter .convert (delegateValue );
253303 }
304+
305+ /*
306+ /**********************************************************
307+ /* Helper methods
308+ /**********************************************************
309+ */
310+
311+ // @since 2.14.2
312+ protected T _convertIfNonNull (Object delegateValue ) {
313+ return (delegateValue == null ) ? null
314+ : _converter .convert (delegateValue );
315+ }
254316}
0 commit comments