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