content: package com.alibaba.fastjson.parser.deserializer;
  
  import java.lang.reflect.Type;
  import java.util.Map;
  
  import com.alibaba.fastjson.parser.DefaultJSONParser;
  import com.alibaba.fastjson.parser.DefaultJSONParser.ResolveTask;
  import com.alibaba.fastjson.parser.JSONToken;
  import com.alibaba.fastjson.parser.ParserConfig;
  import com.alibaba.fastjson.util.FieldInfo;
  
  public class DefaultFieldDeserializer extends FieldDeserializer {
  
      private ObjectDeserializer fieldValueDeserilizer;
  
      public DefaultFieldDeserializer(ParserConfig mapping, Class<?> clazz, FieldInfo fieldInfo){
          super(clazz, fieldInfo);
      }
  
      @Override
      public void parseField(DefaultJSONParser parser, Object object, Type objectType, Map<String, Object> fieldValues) {
          if (fieldValueDeserilizer == null) {
              fieldValueDeserilizer = parser.getConfig().getDeserializer(fieldInfo);
          }
  
          Object value = fieldValueDeserilizer.deserialze(parser, getFieldType(), fieldInfo.getName());
          if (parser.getResolveStatus() == DefaultJSONParser.NeedToResolve) {
              ResolveTask task = parser.getLastResolveTask();
              task.setFieldDeserializer(this);
              task.setOwnerContext(parser.getContext());
              parser.setResolveStatus(DefaultJSONParser.NONE);
          } else {
              if (object == null) {
                  fieldValues.put(fieldInfo.getName(), value);
              } else {
                  setValue(object, value);
              }
          }
      }
  
      public int getFastMatchToken() {
          if (fieldValueDeserilizer != null) {
              return fieldValueDeserilizer.getFastMatchToken();
          }
  
          return JSONToken.LITERAL_INT;
      }
  }
  