protected JsonDeserializer<Object> _findSubclassDeserializer(DeserializationContext ctxt,Object bean,TokenBuffer unknownTokens) throws IOException, JsonProcessingException {
  JsonDeserializer<Object> subDeser;
synchronized (this) {
    subDeser=(_subDeserializers == null) ? null : _subDeserializers.get(new ClassKey(bean.getClass()));
  }
  if (subDeser != null) {
    return subDeser;
  }
  DeserializerProvider deserProv=ctxt.getDeserializerProvider();
  if (deserProv != null) {
    JavaType type=ctxt.constructType(bean.getClass());
    subDeser=deserProv.findValueDeserializer(ctxt.getConfig(),type,_property);
    if (subDeser != null) {
synchronized (this) {
        if (_subDeserializers == null) {
          _subDeserializers=new HashMap<ClassKey,JsonDeserializer<Object>>();
          ;
        }
        _subDeserializers.put(new ClassKey(bean.getClass()),subDeser);
      }
    }
  }
  return subDeser;
}

protected JsonDeserializer < Object > _findSubclassDeserializer ( DeserializationContext ctxt , Object bean , TokenBuffer unknownTokens ) throws IOException , JsonProcessingException { JsonDeserializer < Object > subDeser ; synchronized ( this ) { subDeser = ( _subDeserializers == null ) ? null : _subDeserializers . get ( new ClassKey ( bean . getClass ( ) ) ) ; } if ( subDeser != null ) { return subDeser ; } DeserializerProvider deserProv = ctxt . getDeserializerProvider ( ) ; if ( deserProv != null ) { JavaType type = ctxt . constructType ( bean . getClass ( ) ) ; subDeser = deserProv . findValueDeserializer ( ctxt . getConfig ( ) , type , _property ) ; if ( subDeser != null ) { synchronized ( this ) { if ( _subDeserializers == null ) { _subDeserializers = new HashMap < ClassKey , JsonDeserializer < Object > > ( ) ; ; } _subDeserializers . put ( new ClassKey ( bean . getClass ( ) ) , subDeser ) ; } } } return subDeser ; }
helper method called to ( try to ) locate deserializer for given sub - type of type that this deserializer handles .
