/src/main/java/com/alibaba/fastjson/parser/deserializer/ListResolveFieldDeserializer.java

https://bitbucket.org/xiejuntao/xdesktop · Java · 63 lines · 50 code · 13 blank · 0 comment · 7 complexity · 1f2c7a5f3e7d3614fc269f083958a304 MD5 · raw file

  1. package com.alibaba.fastjson.parser.deserializer;
  2. import java.lang.reflect.Array;
  3. import java.lang.reflect.Type;
  4. import java.util.List;
  5. import java.util.Map;
  6. import com.alibaba.fastjson.JSONArray;
  7. import com.alibaba.fastjson.parser.DefaultJSONParser;
  8. import com.alibaba.fastjson.util.TypeUtils;
  9. @SuppressWarnings("rawtypes")
  10. public final class ListResolveFieldDeserializer extends FieldDeserializer {
  11. private final int index;
  12. private final List list;
  13. private final DefaultJSONParser parser;
  14. public ListResolveFieldDeserializer(DefaultJSONParser parser, List list, int index){
  15. super(null, null);
  16. this.parser = parser;
  17. this.index = index;
  18. this.list = list;
  19. }
  20. @SuppressWarnings("unchecked")
  21. public void setValue(Object object, Object value) {
  22. list.set(index, value);
  23. if (list instanceof JSONArray) {
  24. JSONArray jsonArray = (JSONArray) list;
  25. Object array = jsonArray.getRelatedArray();
  26. if (array != null) {
  27. int arrayLength = Array.getLength(array);
  28. if (arrayLength > index) {
  29. Object item;
  30. if (jsonArray.getComponentType() != null) {
  31. item = TypeUtils.cast(value, jsonArray.getComponentType(), parser.getConfig());
  32. } else {
  33. item = value;
  34. }
  35. Array.set(array, index, item);
  36. }
  37. }
  38. }
  39. }
  40. public DefaultJSONParser getParser() {
  41. return parser;
  42. }
  43. @Override
  44. public void parseField(DefaultJSONParser parser, Object object, Type objectType, Map<String, Object> fieldValues) {
  45. }
  46. @Override
  47. public int getFastMatchToken() {
  48. return 0;
  49. }
  50. }