com.fasterxml.jackson.databind.deser.BeanDeserializerBase.java Source code

Java tutorial

Introduction

Here is the source code for com.fasterxml.jackson.databind.deser.BeanDeserializerBase.java

Source

  package com.fasterxml.jackson.databind.deser;

  import com.fasterxml.jackson.annotation.JsonFormat.Shape;
  import com.fasterxml.jackson.annotation.JsonFormat.Value;
  import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
  import com.fasterxml.jackson.annotation.ObjectIdGenerator;
  import com.fasterxml.jackson.annotation.ObjectIdGenerators.PropertyGenerator;
  import com.fasterxml.jackson.core.JsonParser;
  import com.fasterxml.jackson.core.JsonToken;
  import com.fasterxml.jackson.databind.AnnotationIntrospector;
  import com.fasterxml.jackson.databind.BeanDescription;
  import com.fasterxml.jackson.databind.BeanProperty;
  import com.fasterxml.jackson.databind.BeanProperty.Std;
  import com.fasterxml.jackson.databind.DeserializationConfig;
  import com.fasterxml.jackson.databind.DeserializationContext;
  import com.fasterxml.jackson.databind.DeserializationFeature;
  import com.fasterxml.jackson.databind.JavaType;
  import com.fasterxml.jackson.databind.JsonDeserializer;
  import com.fasterxml.jackson.databind.JsonMappingException;
  import com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap;
  import com.fasterxml.jackson.databind.deser.impl.ExternalTypeHandler;
  import com.fasterxml.jackson.databind.deser.impl.ExternalTypeHandler.Builder;
  import com.fasterxml.jackson.databind.deser.impl.InnerClassProperty;
  import com.fasterxml.jackson.databind.deser.impl.ManagedReferenceProperty;
  import com.fasterxml.jackson.databind.deser.impl.ObjectIdReader;
  import com.fasterxml.jackson.databind.deser.impl.ObjectIdValueProperty;
  import com.fasterxml.jackson.databind.deser.impl.PropertyBasedCreator;
  import com.fasterxml.jackson.databind.deser.impl.PropertyBasedObjectIdGenerator;
  import com.fasterxml.jackson.databind.deser.impl.ReadableObjectId;
  import com.fasterxml.jackson.databind.deser.impl.UnwrappedPropertyHandler;
  import com.fasterxml.jackson.databind.deser.impl.ValueInjector;
  import com.fasterxml.jackson.databind.deser.std.ContainerDeserializerBase;
  import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
  import com.fasterxml.jackson.databind.introspect.Annotated;
  import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
  import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
  import com.fasterxml.jackson.databind.introspect.AnnotatedWithParams;
  import com.fasterxml.jackson.databind.introspect.ObjectIdInfo;
  import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
  import com.fasterxml.jackson.databind.type.ClassKey;
  import com.fasterxml.jackson.databind.util.Annotations;
  import com.fasterxml.jackson.databind.util.ArrayBuilders;
  import com.fasterxml.jackson.databind.util.ClassUtil;
  import com.fasterxml.jackson.databind.util.NameTransformer;
  import com.fasterxml.jackson.databind.util.TokenBuffer;
  import java.io.IOException;
  import java.io.Serializable;
  import java.lang.reflect.Constructor;
  import java.lang.reflect.InvocationTargetException;
  import java.util.ArrayList;
  import java.util.Collection;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;

  public abstract class BeanDeserializerBase extends StdDeserializer<Object>
          implements ContextualDeserializer, ResolvableDeserializer, Serializable {
      protected SettableAnyProperty _anySetter;
      protected final Map<String, SettableBeanProperty> _backRefs;
      protected final BeanPropertyMap _beanProperties;
      protected final JavaType _beanType;
      private final transient Annotations _classAnnotations;
      protected JsonDeserializer<Object> _delegateDeserializer;
      protected ExternalTypeHandler _externalTypeIdHandler;
      protected final HashSet<String> _ignorableProps;
      protected final boolean _ignoreAllUnknown;
      protected final ValueInjector[] _injectables;
      protected final boolean _needViewProcesing;
      protected boolean _nonStandardCreation;
      protected final ObjectIdReader _objectIdReader;
      protected PropertyBasedCreator _propertyBasedCreator;
      protected final JsonFormat.Shape _serializationShape;
      protected transient HashMap<ClassKey, JsonDeserializer<Object>> _subDeserializers;
      protected UnwrappedPropertyHandler _unwrappedPropertyHandler;
      protected final ValueInstantiator _valueInstantiator;
      protected boolean _vanillaProcessing;

      protected BeanDeserializerBase(BeanDeserializerBase paramBeanDeserializerBase) {
          this(paramBeanDeserializerBase, paramBeanDeserializerBase._ignoreAllUnknown);
      }

      public BeanDeserializerBase(BeanDeserializerBase paramBeanDeserializerBase,
              ObjectIdReader paramObjectIdReader) {
          super(paramBeanDeserializerBase._beanType);
          this._classAnnotations = paramBeanDeserializerBase._classAnnotations;
          this._beanType = paramBeanDeserializerBase._beanType;
          this._valueInstantiator = paramBeanDeserializerBase._valueInstantiator;
          this._delegateDeserializer = paramBeanDeserializerBase._delegateDeserializer;
          this._propertyBasedCreator = paramBeanDeserializerBase._propertyBasedCreator;
          this._backRefs = paramBeanDeserializerBase._backRefs;
          this._ignorableProps = paramBeanDeserializerBase._ignorableProps;
          this._ignoreAllUnknown = paramBeanDeserializerBase._ignoreAllUnknown;
          this._anySetter = paramBeanDeserializerBase._anySetter;
          this._injectables = paramBeanDeserializerBase._injectables;
          this._nonStandardCreation = paramBeanDeserializerBase._nonStandardCreation;
          this._unwrappedPropertyHandler = paramBeanDeserializerBase._unwrappedPropertyHandler;
          this._needViewProcesing = paramBeanDeserializerBase._needViewProcesing;
          this._serializationShape = paramBeanDeserializerBase._serializationShape;
          this._vanillaProcessing = paramBeanDeserializerBase._vanillaProcessing;
          this._objectIdReader = paramObjectIdReader;
          if (paramObjectIdReader == null) {
              this._beanProperties = paramBeanDeserializerBase._beanProperties;
              return;
          }
          this._beanProperties = paramBeanDeserializerBase._beanProperties
                  .withProperty(new ObjectIdValueProperty(paramObjectIdReader));
      }

      protected BeanDeserializerBase(BeanDeserializerBase paramBeanDeserializerBase,
              NameTransformer paramNameTransformer) {
          super(paramBeanDeserializerBase._beanType);
          this._classAnnotations = paramBeanDeserializerBase._classAnnotations;
          this._beanType = paramBeanDeserializerBase._beanType;
          this._valueInstantiator = paramBeanDeserializerBase._valueInstantiator;
          this._delegateDeserializer = paramBeanDeserializerBase._delegateDeserializer;
          this._propertyBasedCreator = paramBeanDeserializerBase._propertyBasedCreator;
          this._backRefs = paramBeanDeserializerBase._backRefs;
          this._ignorableProps = paramBeanDeserializerBase._ignorableProps;
          boolean bool;
          if ((paramNameTransformer != null) || (paramBeanDeserializerBase._ignoreAllUnknown)) {
              bool = true;
              this._ignoreAllUnknown = bool;
              this._anySetter = paramBeanDeserializerBase._anySetter;
              this._injectables = paramBeanDeserializerBase._injectables;
              this._objectIdReader = paramBeanDeserializerBase._objectIdReader;
              this._nonStandardCreation = paramBeanDeserializerBase._nonStandardCreation;
              this._unwrappedPropertyHandler = paramBeanDeserializerBase._unwrappedPropertyHandler;
              if (paramNameTransformer == null)
                  break label180;
              if (this._unwrappedPropertyHandler != null)
                  this._unwrappedPropertyHandler.renameAll(paramNameTransformer);
          }
          label180: for (this._beanProperties = paramBeanDeserializerBase._beanProperties.renameAll(
                  paramNameTransformer);; this._beanProperties = paramBeanDeserializerBase._beanProperties) {
              this._needViewProcesing = paramBeanDeserializerBase._needViewProcesing;
              this._serializationShape = paramBeanDeserializerBase._serializationShape;
              this._vanillaProcessing = false;
              return;
              bool = false;
              break;
          }
      }

      public BeanDeserializerBase(BeanDeserializerBase paramBeanDeserializerBase, HashSet<String> paramHashSet) {
          super(paramBeanDeserializerBase._beanType);
          this._classAnnotations = paramBeanDeserializerBase._classAnnotations;
          this._beanType = paramBeanDeserializerBase._beanType;
          this._valueInstantiator = paramBeanDeserializerBase._valueInstantiator;
          this._delegateDeserializer = paramBeanDeserializerBase._delegateDeserializer;
          this._propertyBasedCreator = paramBeanDeserializerBase._propertyBasedCreator;
          this._backRefs = paramBeanDeserializerBase._backRefs;
          this._ignorableProps = paramHashSet;
          this._ignoreAllUnknown = paramBeanDeserializerBase._ignoreAllUnknown;
          this._anySetter = paramBeanDeserializerBase._anySetter;
          this._injectables = paramBeanDeserializerBase._injectables;
          this._nonStandardCreation = paramBeanDeserializerBase._nonStandardCreation;
          this._unwrappedPropertyHandler = paramBeanDeserializerBase._unwrappedPropertyHandler;
          this._needViewProcesing = paramBeanDeserializerBase._needViewProcesing;
          this._serializationShape = paramBeanDeserializerBase._serializationShape;
          this._vanillaProcessing = paramBeanDeserializerBase._vanillaProcessing;
          this._objectIdReader = paramBeanDeserializerBase._objectIdReader;
          this._beanProperties = paramBeanDeserializerBase._beanProperties;
      }

      protected BeanDeserializerBase(BeanDeserializerBase paramBeanDeserializerBase, boolean paramBoolean) {
          super(paramBeanDeserializerBase._beanType);
          this._classAnnotations = paramBeanDeserializerBase._classAnnotations;
          this._beanType = paramBeanDeserializerBase._beanType;
          this._valueInstantiator = paramBeanDeserializerBase._valueInstantiator;
          this._delegateDeserializer = paramBeanDeserializerBase._delegateDeserializer;
          this._propertyBasedCreator = paramBeanDeserializerBase._propertyBasedCreator;
          this._beanProperties = paramBeanDeserializerBase._beanProperties;
          this._backRefs = paramBeanDeserializerBase._backRefs;
          this._ignorableProps = paramBeanDeserializerBase._ignorableProps;
          this._ignoreAllUnknown = paramBoolean;
          this._anySetter = paramBeanDeserializerBase._anySetter;
          this._injectables = paramBeanDeserializerBase._injectables;
          this._objectIdReader = paramBeanDeserializerBase._objectIdReader;
          this._nonStandardCreation = paramBeanDeserializerBase._nonStandardCreation;
          this._unwrappedPropertyHandler = paramBeanDeserializerBase._unwrappedPropertyHandler;
          this._needViewProcesing = paramBeanDeserializerBase._needViewProcesing;
          this._serializationShape = paramBeanDeserializerBase._serializationShape;
          this._vanillaProcessing = paramBeanDeserializerBase._vanillaProcessing;
      }

protected BeanDeserializerBase(BeanDeserializerBuilder paramBeanDeserializerBuilder, BeanDescription paramBeanDescription, BeanPropertyMap paramBeanPropertyMap, Map<String, SettableBeanProperty> paramMap, HashSet<String> paramHashSet, boolean paramBoolean1, boolean paramBoolean2)
{
  super(paramBeanDescription.getType());
  this._classAnnotations = paramBeanDescription.getClassInfo().getAnnotations();
  this._beanType = paramBeanDescription.getType();
  this._valueInstantiator = paramBeanDeserializerBuilder.getValueInstantiator();
  this._beanProperties = paramBeanPropertyMap;
  this._backRefs = paramMap;
  this._ignorableProps = paramHashSet;
  this._ignoreAllUnknown = paramBoolean1;
  this._anySetter = paramBeanDeserializerBuilder.getAnySetter();
  List localList = paramBeanDeserializerBuilder.getInjectables();
  ValueInjector[] arrayOfValueInjector;
  boolean bool2;
  label148: JsonFormat.Value localValue;
  JsonFormat.Shape localShape;
  if ((localList == null) || (localList.isEmpty()))
  {
    arrayOfValueInjector = null;
    this._injectables = arrayOfValueInjector;
    this._objectIdReader = paramBeanDeserializerBuilder.getObjectIdReader();
    if ((this._unwrappedPropertyHandler == null) && (!this._valueInstantiator.canCreateUsingDelegate()) && (!this._valueInstantiator.canCreateFromObjectWith()) && (this._valueInstantiator.canCreateUsingDefault()))
      break label241;
    bool2 = bool1;
    this._nonStandardCreation = bool2;
    localValue = paramBeanDescription.findExpectedFormat(null);
    localShape = null;
    if (localValue != null)
      break label247;
    label169: this._serializationShape = localShape;
    this._needViewProcesing = paramBoolean2;
    if ((this._nonStandardCreation) || (this._injectables != null) || (this._needViewProcesing) || (this._objectIdReader == null))
      break label257;
  }
  while (true)
  {
    this._vanillaProcessing = bool1;
    return;
    arrayOfValueInjector = (ValueInjector[])localList.toArray(new ValueInjector[localList.size()]);
    break;
    label241: bool2 = false;
    break label148;
    label247: localShape = localValue.getShape();
    break label169;
    label257: bool1 = false;
  }
}

      protected JsonDeserializer<Object> _findSubclassDeserializer(DeserializationContext paramDeserializationContext,
              Object paramObject, TokenBuffer paramTokenBuffer) {
          try {
              if (this._subDeserializers == null)
                  ;
              for (Object localObject2 = null;; localObject2 = (JsonDeserializer) this._subDeserializers
                      .get(new ClassKey(paramObject.getClass()))) {
                  if (localObject2 == null)
                      break;
                  return localObject2;
              }
          } finally {
          }
          JsonDeserializer localJsonDeserializer = paramDeserializationContext
                  .findRootValueDeserializer(paramDeserializationContext.constructType(paramObject.getClass()));
          if (localJsonDeserializer != null)
              try {
                  if (this._subDeserializers == null)
                      this._subDeserializers = new HashMap();
                  this._subDeserializers.put(new ClassKey(paramObject.getClass()), localJsonDeserializer);
                  return localJsonDeserializer;
              } finally {
              }
          return localJsonDeserializer;
      }

      protected SettableBeanProperty _resolveInnerClassValuedProperty(
              DeserializationContext paramDeserializationContext, SettableBeanProperty paramSettableBeanProperty) {
          JsonDeserializer localJsonDeserializer = paramSettableBeanProperty.getValueDeserializer();
          Class localClass2;
          Constructor[] arrayOfConstructor;
          int i;
          if (((localJsonDeserializer instanceof BeanDeserializerBase))
                  && (!((BeanDeserializerBase) localJsonDeserializer).getValueInstantiator()
                          .canCreateUsingDefault())) {
              Class localClass1 = paramSettableBeanProperty.getType().getRawClass();
              localClass2 = ClassUtil.getOuterClass(localClass1);
              if ((localClass2 != null) && (localClass2 == this._beanType.getRawClass())) {
                  arrayOfConstructor = localClass1.getConstructors();
                  i = arrayOfConstructor.length;
              }
          }
          for (int j = 0;; j++)
              if (j < i) {
                  Constructor localConstructor = arrayOfConstructor[j];
                  Class[] arrayOfClass = localConstructor.getParameterTypes();
                  if ((arrayOfClass.length == 1) && (arrayOfClass[0] == localClass2)) {
                      if (paramDeserializationContext.getConfig().canOverrideAccessModifiers())
                          ClassUtil.checkAndFixAccess(localConstructor);
                      paramSettableBeanProperty = new InnerClassProperty(paramSettableBeanProperty, localConstructor);
                  }
              } else {
                  return paramSettableBeanProperty;
              }
      }

      protected SettableBeanProperty _resolveManagedReferenceProperty(
              DeserializationContext paramDeserializationContext, SettableBeanProperty paramSettableBeanProperty) {
          String str1 = paramSettableBeanProperty.getManagedReferenceName();
          if (str1 == null)
              return paramSettableBeanProperty;
          JsonDeserializer localJsonDeserializer1 = paramSettableBeanProperty.getValueDeserializer();
          boolean bool = false;
          SettableBeanProperty localSettableBeanProperty;
          if ((localJsonDeserializer1 instanceof BeanDeserializerBase))
              localSettableBeanProperty = ((BeanDeserializerBase) localJsonDeserializer1).findBackReference(str1);
          while (localSettableBeanProperty == null) {
              throw new IllegalArgumentException("Can not handle managed/back reference '" + str1
                      + "': no back reference property found from type " + paramSettableBeanProperty.getType());
              if ((localJsonDeserializer1 instanceof ContainerDeserializerBase)) {
                  JsonDeserializer localJsonDeserializer2 = ((ContainerDeserializerBase) localJsonDeserializer1)
                          .getContentDeserializer();
                  if (!(localJsonDeserializer2 instanceof BeanDeserializerBase)) {
                      if (localJsonDeserializer2 == null)
                          ;
                      for (String str2 = "NULL";; str2 = localJsonDeserializer2.getClass().getName())
                          throw new IllegalArgumentException("Can not handle managed/back reference '" + str1
                                  + "': value deserializer is of type ContainerDeserializerBase, but content type is not handled by a BeanDeserializer "
                                  + " (instead it's of type " + str2 + ")");
                  }
                  localSettableBeanProperty = ((BeanDeserializerBase) localJsonDeserializer2).findBackReference(str1);
                  bool = true;
              } else if ((localJsonDeserializer1 instanceof AbstractDeserializer)) {
                  localSettableBeanProperty = ((AbstractDeserializer) localJsonDeserializer1).findBackReference(str1);
                  bool = false;
              } else {
                  throw new IllegalArgumentException("Can not handle managed/back reference '" + str1
                          + "': type for value deserializer is not BeanDeserializer or ContainerDeserializerBase, but "
                          + localJsonDeserializer1.getClass().getName());
              }
          }
          JavaType localJavaType1 = this._beanType;
          JavaType localJavaType2 = localSettableBeanProperty.getType();
          if (!localJavaType2.getRawClass().isAssignableFrom(localJavaType1.getRawClass()))
              throw new IllegalArgumentException("Can not handle managed/back reference '" + str1
                      + "': back reference type (" + localJavaType2.getRawClass().getName()
                      + ") not compatible with managed type (" + localJavaType1.getRawClass().getName() + ")");
          return new ManagedReferenceProperty(paramSettableBeanProperty, str1, localSettableBeanProperty,
                  this._classAnnotations, bool);
      }

      protected SettableBeanProperty _resolveUnwrappedProperty(DeserializationContext paramDeserializationContext,
              SettableBeanProperty paramSettableBeanProperty) {
          AnnotatedMember localAnnotatedMember = paramSettableBeanProperty.getMember();
          if (localAnnotatedMember != null) {
              NameTransformer localNameTransformer = paramDeserializationContext.getAnnotationIntrospector()
                      .findUnwrappingNameTransformer(localAnnotatedMember);
              if (localNameTransformer != null) {
                  JsonDeserializer localJsonDeserializer1 = paramSettableBeanProperty.getValueDeserializer();
                  JsonDeserializer localJsonDeserializer2 = localJsonDeserializer1
                          .unwrappingDeserializer(localNameTransformer);
                  if ((localJsonDeserializer2 != localJsonDeserializer1) && (localJsonDeserializer2 != null))
                      return paramSettableBeanProperty.withValueDeserializer(localJsonDeserializer2);
              }
          }
          return null;
      }

      protected abstract BeanDeserializerBase asArrayDeserializer();

      public JsonDeserializer<?> createContextual(DeserializationContext paramDeserializationContext,
              BeanProperty paramBeanProperty) {
          ObjectIdReader localObjectIdReader1 = this._objectIdReader;
          AnnotationIntrospector localAnnotationIntrospector = paramDeserializationContext
                  .getAnnotationIntrospector();
          Object localObject1;
          if ((paramBeanProperty == null) || (localAnnotationIntrospector == null))
              localObject1 = null;
          String[] arrayOfString2;
          ObjectIdInfo localObjectIdInfo2;
          Class localClass;
          SettableBeanProperty localSettableBeanProperty;
          Object localObject3;
          Object localObject2;
          ObjectIdReader localObjectIdReader2;
          String[] arrayOfString1;
          while (true)
              if ((paramBeanProperty != null) && (localAnnotationIntrospector != null)) {
                  arrayOfString2 = localAnnotationIntrospector.findPropertiesToIgnore((Annotated) localObject1);
                  ObjectIdInfo localObjectIdInfo1 = localAnnotationIntrospector
                          .findObjectIdInfo((Annotated) localObject1);
                  if (localObjectIdInfo1 != null) {
                      localObjectIdInfo2 = localAnnotationIntrospector
                              .findObjectReferenceInfo((Annotated) localObject1, localObjectIdInfo1);
                      localClass = localObjectIdInfo2.getGeneratorType();
                      if (localClass == ObjectIdGenerators.PropertyGenerator.class) {
                          String str = localObjectIdInfo2.getPropertyName();
                          localSettableBeanProperty = findProperty(str);
                          if (localSettableBeanProperty == null) {
                              throw new IllegalArgumentException("Invalid Object Id definition for "
                                      + getBeanClass().getName() + ": can not find property with name '" + str + "'");
                              localObject1 = paramBeanProperty.getMember();
                              continue;
                          }
                          localObject3 = localSettableBeanProperty.getType();
                          localObject2 = new PropertyBasedObjectIdGenerator(localObjectIdInfo2.getScope());
                          JsonDeserializer localJsonDeserializer = paramDeserializationContext
                                  .findRootValueDeserializer((JavaType) localObject3);
                          localObjectIdReader2 = ObjectIdReader.construct((JavaType) localObject3,
                                  localObjectIdInfo2.getPropertyName(), (ObjectIdGenerator) localObject2,
                                  localJsonDeserializer, localSettableBeanProperty);
                          arrayOfString1 = arrayOfString2;
                      }
                  }
              }
          while (true) {
              if ((localObjectIdReader2 != null) && (localObjectIdReader2 != this._objectIdReader))
                  ;
              for (BeanDeserializerBase localBeanDeserializerBase = withObjectIdReader(
                      localObjectIdReader2);; localBeanDeserializerBase = this) {
                  if ((arrayOfString1 != null) && (arrayOfString1.length != 0))
                      localBeanDeserializerBase = localBeanDeserializerBase.withIgnorableProperties(
                              ArrayBuilders.setAndArray(localBeanDeserializerBase._ignorableProps, arrayOfString1));
                  JsonFormat.Value localValue;
                  if (localObject1 != null) {
                      localValue = localAnnotationIntrospector.findFormat((Annotated) localObject1);
                      if (localValue == null)
                          ;
                  }
                  for (JsonFormat.Shape localShape = localValue.getShape();; localShape = null) {
                      if (localShape == null)
                          localShape = this._serializationShape;
                      if (localShape == JsonFormat.Shape.ARRAY) {
                          return localBeanDeserializerBase.asArrayDeserializer();
                          JavaType localJavaType1 = paramDeserializationContext.constructType(localClass);
                          JavaType localJavaType2 = paramDeserializationContext.getTypeFactory()
                                  .findTypeParameters(localJavaType1, ObjectIdGenerator.class)[0];
                          localObject2 = paramDeserializationContext
                                  .objectIdGeneratorInstance((Annotated) localObject1, localObjectIdInfo2);
                          localObject3 = localJavaType2;
                          localSettableBeanProperty = null;
                          break;
                      }
                      return localBeanDeserializerBase;
                  }
              }
              localObjectIdReader2 = localObjectIdReader1;
              arrayOfString1 = arrayOfString2;
              continue;
              localObjectIdReader2 = localObjectIdReader1;
              arrayOfString1 = null;
          }
      }

      protected Object deserializeFromObjectId(JsonParser paramJsonParser,
              DeserializationContext paramDeserializationContext) {
          Object localObject1 = this._objectIdReader.deserializer.deserialize(paramJsonParser,
                  paramDeserializationContext);
          Object localObject2 = paramDeserializationContext.findObjectId(localObject1,
                  this._objectIdReader.generator).item;
          if (localObject2 == null)
              throw new IllegalStateException(
                      "Could not resolve Object Id [" + localObject1 + "] -- unresolved forward-reference?");
          return localObject2;
      }

      public final Object deserializeWithType(JsonParser paramJsonParser,
              DeserializationContext paramDeserializationContext, TypeDeserializer paramTypeDeserializer) {
          if (this._objectIdReader != null) {
              JsonToken localJsonToken = paramJsonParser.getCurrentToken();
              if ((localJsonToken != null) && (localJsonToken.isScalarValue()))
                  return deserializeFromObjectId(paramJsonParser, paramDeserializationContext);
          }
          return paramTypeDeserializer.deserializeTypedFromObject(paramJsonParser, paramDeserializationContext);
      }

      public SettableBeanProperty findBackReference(String paramString) {
          if (this._backRefs == null)
              return null;
          return (SettableBeanProperty) this._backRefs.get(paramString);
      }

      public SettableBeanProperty findProperty(String paramString) {
          if (this._beanProperties == null)
              ;
          for (SettableBeanProperty localSettableBeanProperty = null;; localSettableBeanProperty = this._beanProperties
                  .find(paramString)) {
              if ((localSettableBeanProperty == null) && (this._propertyBasedCreator != null))
                  localSettableBeanProperty = this._propertyBasedCreator.findCreatorProperty(paramString);
              return localSettableBeanProperty;
          }
      }

      public final Class<?> getBeanClass() {
          return this._beanType.getRawClass();
      }

      public Collection<Object> getKnownPropertyNames() {
          ArrayList localArrayList = new ArrayList();
          Iterator localIterator = this._beanProperties.iterator();
          while (localIterator.hasNext())
              localArrayList.add(((SettableBeanProperty) localIterator.next()).getName());
          return localArrayList;
      }

      public ObjectIdReader getObjectIdReader() {
          return this._objectIdReader;
      }

      public ValueInstantiator getValueInstantiator() {
          return this._valueInstantiator;
      }

      protected Object handleUnknownProperties(DeserializationContext paramDeserializationContext, Object paramObject,
              TokenBuffer paramTokenBuffer) {
          paramTokenBuffer.writeEndObject();
          JsonParser localJsonParser = paramTokenBuffer.asParser();
          while (localJsonParser.nextToken() != JsonToken.END_OBJECT) {
              String str = localJsonParser.getCurrentName();
              localJsonParser.nextToken();
              handleUnknownProperty(localJsonParser, paramDeserializationContext, paramObject, str);
          }
          return paramObject;
      }

      protected void handleUnknownProperty(JsonParser paramJsonParser,
              DeserializationContext paramDeserializationContext, Object paramObject, String paramString) {
          if ((this._ignoreAllUnknown)
                  || ((this._ignorableProps != null) && (this._ignorableProps.contains(paramString)))) {
              paramJsonParser.skipChildren();
              return;
          }
          super.handleUnknownProperty(paramJsonParser, paramDeserializationContext, paramObject, paramString);
      }

      protected void injectValues(DeserializationContext paramDeserializationContext, Object paramObject) {
          ValueInjector[] arrayOfValueInjector = this._injectables;
          int i = arrayOfValueInjector.length;
          for (int j = 0; j < i; j++)
              arrayOfValueInjector[j].inject(paramDeserializationContext, paramObject);
      }

      public boolean isCachable() {
          return true;
      }

public void resolve(DeserializationContext paramDeserializationContext)
{
  if (this._valueInstantiator.canCreateFromObjectWith())
  {
    SettableBeanProperty[] arrayOfSettableBeanProperty = this._valueInstantiator.getFromObjectArguments(paramDeserializationContext.getConfig());
    this._propertyBasedCreator = PropertyBasedCreator.construct(paramDeserializationContext, this._valueInstantiator, arrayOfSettableBeanProperty);
    Iterator localIterator2 = this._propertyBasedCreator.properties().iterator();
    localBuilder = null;
    while (localIterator2.hasNext())
    {
      SettableBeanProperty localSettableBeanProperty6 = (SettableBeanProperty)localIterator2.next();
      if (localSettableBeanProperty6.hasValueTypeDeserializer())
      {
        TypeDeserializer localTypeDeserializer2 = localSettableBeanProperty6.getValueTypeDeserializer();
        if (localTypeDeserializer2.getTypeInclusion() == JsonTypeInfo.As.EXTERNAL_PROPERTY)
        {
          if (localBuilder == null)
            localBuilder = new ExternalTypeHandler.Builder();
          localBuilder.addExternal(localSettableBeanProperty6, localTypeDeserializer2);
        }
      }
    }
  }
  ExternalTypeHandler.Builder localBuilder = null;
  Iterator localIterator1 = this._beanProperties.iterator();
  Object localObject1 = null;
  Object localObject2 = localBuilder;
  SettableBeanProperty localSettableBeanProperty1;
  SettableBeanProperty localSettableBeanProperty2;
  if (localIterator1.hasNext())
  {
    localSettableBeanProperty1 = (SettableBeanProperty)localIterator1.next();
    if (!localSettableBeanProperty1.hasValueDeserializer())
      localSettableBeanProperty2 = localSettableBeanProperty1.withValueDeserializer(findDeserializer(paramDeserializationContext, localSettableBeanProperty1.getType(), localSettableBeanProperty1));
  }
  while (true)
  {
    label187: SettableBeanProperty localSettableBeanProperty3 = _resolveManagedReferenceProperty(paramDeserializationContext, localSettableBeanProperty2);
    SettableBeanProperty localSettableBeanProperty4 = _resolveUnwrappedProperty(paramDeserializationContext, localSettableBeanProperty3);
    if (localSettableBeanProperty4 != null)
      if (localObject1 != null)
        break label616;
    label616: for (Object localObject4 = new UnwrappedPropertyHandler(); ; localObject4 = localObject1)
    {
      ((UnwrappedPropertyHandler)localObject4).addProperty(localSettableBeanProperty4);
      localObject1 = localObject4;
      break;
      JsonDeserializer localJsonDeserializer1 = localSettableBeanProperty1.getValueDeserializer();
      if (!(localJsonDeserializer1 instanceof ContextualDeserializer))
        break label623;
      JsonDeserializer localJsonDeserializer2 = ((ContextualDeserializer)localJsonDeserializer1).createContextual(paramDeserializationContext, localSettableBeanProperty1);
      if (localJsonDeserializer2 == localJsonDeserializer1)
        break label623;
      localSettableBeanProperty2 = localSettableBeanProperty1.withValueDeserializer(localJsonDeserializer2);
      break label187;
      SettableBeanProperty localSettableBeanProperty5 = _resolveInnerClassValuedProperty(paramDeserializationContext, localSettableBeanProperty3);
      if (localSettableBeanProperty5 != localSettableBeanProperty1)
        this._beanProperties.replace(localSettableBeanProperty5);
      if (!localSettableBeanProperty5.hasValueTypeDeserializer())
        break;
      TypeDeserializer localTypeDeserializer1 = localSettableBeanProperty5.getValueTypeDeserializer();
      if (localTypeDeserializer1.getTypeInclusion() != JsonTypeInfo.As.EXTERNAL_PROPERTY)
        break;
      if (localObject2 == null);
      for (Object localObject3 = new ExternalTypeHandler.Builder(); ; localObject3 = localObject2)
      {
        ((ExternalTypeHandler.Builder)localObject3).addExternal(localSettableBeanProperty5, localTypeDeserializer1);
        this._beanProperties.remove(localSettableBeanProperty5);
        localObject2 = localObject3;
        break;
        if ((this._anySetter != null) && (!this._anySetter.hasValueDeserializer()))
          this._anySetter = this._anySetter.withValueDeserializer(findDeserializer(paramDeserializationContext, this._anySetter.getType(), this._anySetter.getProperty()));
        if (this._valueInstantiator.canCreateUsingDelegate())
        {
          JavaType localJavaType = this._valueInstantiator.getDelegateType(paramDeserializationContext.getConfig());
          if (localJavaType == null)
            throw new IllegalArgumentException("Invalid delegate-creator definition for " + this._beanType + ": value instantiator (" + this._valueInstantiator.getClass().getName() + ") returned true for 'canCreateUsingDelegate()', but null for 'getDelegateType()'");
          AnnotatedWithParams localAnnotatedWithParams = this._valueInstantiator.getDelegateCreator();
          this._delegateDeserializer = findDeserializer(paramDeserializationContext, localJavaType, new BeanProperty.Std(null, localJavaType, this._classAnnotations, localAnnotatedWithParams));
        }
        if (localObject2 != null)
        {
          this._externalTypeIdHandler = ((ExternalTypeHandler.Builder)localObject2).build();
          this._nonStandardCreation = true;
        }
        this._unwrappedPropertyHandler = localObject1;
        if (localObject1 != null)
          this._nonStandardCreation = true;
        if ((this._vanillaProcessing) && (!this._nonStandardCreation));
        for (boolean bool = true; ; bool = false)
        {
          this._vanillaProcessing = bool;
          return;
        }
      }
    }
    label623: localSettableBeanProperty2 = localSettableBeanProperty1;
  }
}

      public abstract JsonDeserializer<Object> unwrappingDeserializer(NameTransformer paramNameTransformer);

      public abstract BeanDeserializerBase withIgnorableProperties(HashSet<String> paramHashSet);

      public abstract BeanDeserializerBase withObjectIdReader(ObjectIdReader paramObjectIdReader);

      public void wrapAndThrow(Throwable paramThrowable, Object paramObject, String paramString,
              DeserializationContext paramDeserializationContext) {
          for (Throwable localThrowable = paramThrowable; ((localThrowable instanceof InvocationTargetException))
                  && (localThrowable.getCause() != null); localThrowable = localThrowable.getCause())
              ;
          if ((localThrowable instanceof Error))
              throw ((Error) localThrowable);
          if ((paramDeserializationContext == null)
                  || (paramDeserializationContext.isEnabled(DeserializationFeature.WRAP_EXCEPTIONS)))
              ;
          for (int i = 1; (localThrowable instanceof IOException); i = 0) {
              if ((i != 0) && ((localThrowable instanceof JsonMappingException)))
                  break label114;
              throw ((IOException) localThrowable);
          }
          if ((i == 0) && ((localThrowable instanceof RuntimeException)))
              throw ((RuntimeException) localThrowable);
          label114: throw JsonMappingException.wrapWithPath(localThrowable, paramObject, paramString);
      }

      protected void wrapInstantiationProblem(Throwable paramThrowable,
              DeserializationContext paramDeserializationContext) {
          for (Throwable localThrowable = paramThrowable; ((localThrowable instanceof InvocationTargetException))
                  && (localThrowable.getCause() != null); localThrowable = localThrowable.getCause())
              ;
          if ((localThrowable instanceof Error))
              throw ((Error) localThrowable);
          if ((paramDeserializationContext == null)
                  || (paramDeserializationContext.isEnabled(DeserializationFeature.WRAP_EXCEPTIONS)))
              ;
          for (int i = 1; (localThrowable instanceof IOException); i = 0)
              throw ((IOException) localThrowable);
          if ((i == 0) && ((localThrowable instanceof RuntimeException)))
              throw ((RuntimeException) localThrowable);
          throw paramDeserializationContext.instantiationException(this._beanType.getRawClass(), localThrowable);
      }
  }

  /* Location:           /Users/dantheman/src/fffffffffattttt/basis/classes_dex2jar.jar
   * Qualified Name:     com.fasterxml.jackson.databind.deser.BeanDeserializerBase
   * JD-Core Version:    0.6.2
   */