protected DeserializationContext(
      DeserializationContext src,
      DeserializationConfig config,
      JsonParser jp,
      InjectableValues injectableValues) {
    _cache = src._cache;
    _factory = src._factory;

    _config = config;
    _featureFlags = config.getDeserializationFeatures();
    _view = config.getActiveView();
    _parser = jp;
    _injectableValues = injectableValues;
  }
 protected DateFormat getDateFormat() {
   if (_dateFormat != null) {
     return _dateFormat;
   }
   /* 24-Feb-2012, tatu: At this point, all timezone configuration
    *    should have occured, with respect to default dateformat
    *    and timezone configuration. But we still better clone
    *    an instance as formatters may be stateful.
    */
   DateFormat df = _config.getDateFormat();
   _dateFormat = df = (DateFormat) df.clone();
   return df;
 }
 /**
  * Method deserializers can call to inform configured {@link DeserializationProblemHandler}s of an
  * unrecognized property.
  */
 public boolean handleUnknownProperty(
     JsonParser jp, JsonDeserializer<?> deser, Object instanceOrClass, String propName)
     throws IOException, JsonProcessingException {
   LinkedNode<DeserializationProblemHandler> h = _config.getProblemHandlers();
   if (h != null) {
     while (h != null) {
       // Can bail out if it's handled
       if (h.value().handleUnknownProperty(this, jp, deser, instanceOrClass, propName)) {
         return true;
       }
       h = h.next();
     }
   }
   return false;
 }
 @Override
 public List<BeanPropertyDefinition> updateProperties(
     DeserializationConfig config,
     BeanDescription beanDesc,
     List<BeanPropertyDefinition> propDefs) {
   final AnnotationIntrospector intr = config.getAnnotationIntrospector();
   int changed = 0;
   for (int i = 0, len = propDefs.size(); i < len; ++i) {
     BeanPropertyDefinition prop = propDefs.get(i);
     AnnotatedMember acc = prop.getAccessor();
     // should not be null, but just in case:
     if (acc == null) {
       continue;
     }
     // first: do we need to handle wrapping (for Lists)?
     QName wrapperName = AnnotationUtil.findWrapperName(intr, acc);
     if (wrapperName != null) {
       String localName = wrapperName.getLocalPart();
       if ((localName != null && localName.length() >= 0) && !localName.equals(prop.getName())) {
         // make copy-on-write as necessary
         if (changed == 0) {
           propDefs = new ArrayList<BeanPropertyDefinition>(propDefs);
         }
         ++changed;
         propDefs.set(i, prop.withName(localName));
         continue;
       }
     } else {
       /* If not, how about "as text" unwrapping? Such properties
        * are exposed as values of 'unnamed' fields; so one way to
        * map them is to rename property to have name ""... (and
        * hope this does not break other parts...)
        */
       Boolean b = AnnotationUtil.findIsTextAnnotation(intr, acc);
       if (b != null && b.booleanValue()) {
         // unwrapped properties will appear as 'unnamed' (empty String)
         propDefs.set(i, prop.withName(""));
         continue;
       }
     }
   }
   return propDefs;
 }
 /**
  * Convenience method, functionally equivalent to:
  *
  * <pre>
  *  getConfig().constructType(cls);
  * </pre>
  */
 public final JavaType constructType(Class<?> cls) {
   return _config.constructType(cls);
 }
 /**
  * Method for accessing default TimeZone to use: convenience method for
  *
  * <pre>
  *   getConfig().getTimeZone();
  * </pre>
  */
 public TimeZone getTimeZone() {
   return _config.getTimeZone();
 }
 /**
  * Method for accessing default Locale to use: convenience method for
  *
  * <pre>
  *   getConfig().getLocale();
  * </pre>
  */
 public Locale getLocale() {
   return _config.getLocale();
 }
 /**
  * Convenience method, functionally equivalent to:
  *
  * <pre>
  *  getConfig().getTypeFactory();
  * </pre>
  */
 public final TypeFactory getTypeFactory() {
   return _config.getTypeFactory();
 }
 /**
  * Convenience method, functionally equivalent to:
  *
  * <pre>
  *  getConfig().getNodeFactory();
  * </pre>
  */
 public final JsonNodeFactory getNodeFactory() {
   return _config.getNodeFactory();
 }
 /**
  * Convenience method for accessing the default Base64 encoding used for decoding base64 encoded
  * binary content. Same as calling:
  *
  * <pre>
  *  getConfig().getBase64Variant();
  * </pre>
  */
 public final Base64Variant getBase64Variant() {
   return _config.getBase64Variant();
 }
 /**
  * Convenience method, functionally equivalent to:
  *
  * <pre>
  *  getConfig().canOverrideAccessModifiers();
  * </pre>
  */
 public final boolean canOverrideAccessModifiers() {
   return _config.canOverrideAccessModifiers();
 }
 public final AnnotationIntrospector getAnnotationIntrospector() {
   return _config.getAnnotationIntrospector();
 }
 public final boolean isEnabled(MapperFeature feat) {
   return _config.isEnabled(feat);
 }