PageRenderTime 49ms CodeModel.GetById 31ms app.highlight 15ms RepoModel.GetById 1ms app.codeStats 0ms

/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
 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}