PageRenderTime 33ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 1ms

/QingTingFanBianYi/src/com/alibaba/fastjson/parser/deserializer/MapDeserializer.java

https://gitlab.com/qt-prometheus/qt-prometheus
Java | 302 lines | 289 code | 9 blank | 4 comment | 80 complexity | 4016a874fde7db8788646138bb18618b MD5 | raw file
  1. package com.alibaba.fastjson.parser.deserializer;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONException;
  4. import com.alibaba.fastjson.parser.DefaultJSONParser;
  5. import com.alibaba.fastjson.parser.DefaultJSONParser.ResolveTask;
  6. import com.alibaba.fastjson.parser.Feature;
  7. import com.alibaba.fastjson.parser.JSONLexer;
  8. import com.alibaba.fastjson.parser.JSONToken;
  9. import com.alibaba.fastjson.parser.ParseContext;
  10. import com.alibaba.fastjson.parser.ParserConfig;
  11. import com.alibaba.fastjson.util.TypeUtils;
  12. import java.lang.reflect.ParameterizedType;
  13. import java.lang.reflect.Type;
  14. import java.util.HashMap;
  15. import java.util.Hashtable;
  16. import java.util.IdentityHashMap;
  17. import java.util.LinkedHashMap;
  18. import java.util.Map;
  19. import java.util.Properties;
  20. import java.util.SortedMap;
  21. import java.util.TreeMap;
  22. import java.util.concurrent.ConcurrentHashMap;
  23. import java.util.concurrent.ConcurrentMap;
  24. public class MapDeserializer
  25. implements ObjectDeserializer
  26. {
  27. public static final MapDeserializer instance = new MapDeserializer();
  28. public static Object parseMap(DefaultJSONParser paramDefaultJSONParser, Map<Object, Object> paramMap, Type paramType1, Type paramType2, Object paramObject)
  29. {
  30. JSONLexer localJSONLexer = paramDefaultJSONParser.getLexer();
  31. if ((localJSONLexer.token() != 12) && (localJSONLexer.token() != 16))
  32. throw new JSONException("syntax error, expect {, actual " + localJSONLexer.tokenName());
  33. ObjectDeserializer localObjectDeserializer1 = paramDefaultJSONParser.getConfig().getDeserializer(paramType1);
  34. ObjectDeserializer localObjectDeserializer2 = paramDefaultJSONParser.getConfig().getDeserializer(paramType2);
  35. localJSONLexer.nextToken(localObjectDeserializer1.getFastMatchToken());
  36. paramObject = paramDefaultJSONParser.getContext();
  37. while (true)
  38. {
  39. try
  40. {
  41. if (localJSONLexer.token() == 13)
  42. {
  43. localJSONLexer.nextToken(16);
  44. return paramMap;
  45. }
  46. if ((localJSONLexer.token() != 4) || (!localJSONLexer.isRef()))
  47. break label350;
  48. paramMap = null;
  49. localJSONLexer.nextTokenWithColon(4);
  50. if (localJSONLexer.token() != 4)
  51. break label297;
  52. paramType1 = localJSONLexer.stringVal();
  53. if ("..".equals(paramType1))
  54. {
  55. paramMap = paramObject.getParentContext().getObject();
  56. localJSONLexer.nextToken(13);
  57. if (localJSONLexer.token() == 13)
  58. break label333;
  59. throw new JSONException("illegal ref");
  60. }
  61. }
  62. finally
  63. {
  64. paramDefaultJSONParser.setContext(paramObject);
  65. }
  66. if ("$".equals(paramType1))
  67. {
  68. for (paramMap = paramObject; paramMap.getParentContext() != null; paramMap = paramMap.getParentContext());
  69. paramMap = paramMap.getObject();
  70. }
  71. else
  72. {
  73. paramDefaultJSONParser.addResolveTask(new DefaultJSONParser.ResolveTask(paramObject, paramType1));
  74. paramDefaultJSONParser.setResolveStatus(1);
  75. continue;
  76. label297: throw new JSONException("illegal ref, " + JSONToken.name(localJSONLexer.token()));
  77. label333: localJSONLexer.nextToken(16);
  78. paramDefaultJSONParser.setContext(paramObject);
  79. return paramMap;
  80. label350: if ((paramMap.size() == 0) && (localJSONLexer.token() == 4) && (JSON.DEFAULT_TYPE_KEY.equals(localJSONLexer.stringVal())))
  81. {
  82. localJSONLexer.nextTokenWithColon(4);
  83. localJSONLexer.nextToken(16);
  84. if (localJSONLexer.token() == 13)
  85. {
  86. localJSONLexer.nextToken();
  87. paramDefaultJSONParser.setContext(paramObject);
  88. return paramMap;
  89. }
  90. localJSONLexer.nextToken(localObjectDeserializer1.getFastMatchToken());
  91. }
  92. Object localObject = localObjectDeserializer1.deserialze(paramDefaultJSONParser, paramType1, null);
  93. if (localJSONLexer.token() != 17)
  94. throw new JSONException("syntax error, expect :, actual " + localJSONLexer.token());
  95. localJSONLexer.nextToken(localObjectDeserializer2.getFastMatchToken());
  96. paramMap.put(localObject, localObjectDeserializer2.deserialze(paramDefaultJSONParser, paramType2, localObject));
  97. if (localJSONLexer.token() == 16)
  98. localJSONLexer.nextToken(localObjectDeserializer1.getFastMatchToken());
  99. }
  100. }
  101. }
  102. public static Map parseMap(DefaultJSONParser paramDefaultJSONParser, Map<String, Object> paramMap, Type paramType, Object paramObject)
  103. {
  104. JSONLexer localJSONLexer = paramDefaultJSONParser.getLexer();
  105. if (localJSONLexer.token() != 12)
  106. throw new JSONException("syntax error, expect {, actual " + localJSONLexer.token());
  107. ParseContext localParseContext = paramDefaultJSONParser.getContext();
  108. int i;
  109. label440: label605:
  110. do
  111. {
  112. Object localObject1;
  113. do
  114. {
  115. int j;
  116. try
  117. {
  118. localJSONLexer.skipWhitespace();
  119. i = localJSONLexer.getCurrent();
  120. j = i;
  121. if (paramDefaultJSONParser.isEnabled(Feature.AllowArbitraryCommas))
  122. while (true)
  123. {
  124. j = i;
  125. if (i != 44)
  126. break;
  127. localJSONLexer.next();
  128. localJSONLexer.skipWhitespace();
  129. i = localJSONLexer.getCurrent();
  130. }
  131. if (j == 34)
  132. {
  133. localObject1 = localJSONLexer.scanSymbol(paramDefaultJSONParser.getSymbolTable(), '"');
  134. localJSONLexer.skipWhitespace();
  135. if (localJSONLexer.getCurrent() == ':')
  136. break label440;
  137. throw new JSONException("expect ':' at " + localJSONLexer.pos());
  138. }
  139. }
  140. finally
  141. {
  142. paramDefaultJSONParser.setContext(localParseContext);
  143. }
  144. if (j == 125)
  145. {
  146. localJSONLexer.next();
  147. localJSONLexer.resetStringPosition();
  148. localJSONLexer.nextToken(16);
  149. paramDefaultJSONParser.setContext(localParseContext);
  150. return paramMap;
  151. }
  152. if (j == 39)
  153. {
  154. if (!paramDefaultJSONParser.isEnabled(Feature.AllowSingleQuotes))
  155. throw new JSONException("syntax error");
  156. localObject1 = localJSONLexer.scanSymbol(paramDefaultJSONParser.getSymbolTable(), '\'');
  157. localJSONLexer.skipWhitespace();
  158. if (localJSONLexer.getCurrent() != ':')
  159. throw new JSONException("expect ':' at " + localJSONLexer.pos());
  160. }
  161. else
  162. {
  163. if (!paramDefaultJSONParser.isEnabled(Feature.AllowUnQuotedFieldNames))
  164. throw new JSONException("syntax error");
  165. localObject1 = localJSONLexer.scanSymbolUnQuoted(paramDefaultJSONParser.getSymbolTable());
  166. localJSONLexer.skipWhitespace();
  167. char c = localJSONLexer.getCurrent();
  168. if (c != ':')
  169. throw new JSONException("expect ':' at " + localJSONLexer.pos() + ", actual " + c);
  170. }
  171. localJSONLexer.next();
  172. localJSONLexer.skipWhitespace();
  173. localJSONLexer.getCurrent();
  174. localJSONLexer.resetStringPosition();
  175. if (localObject1 != JSON.DEFAULT_TYPE_KEY)
  176. break label605;
  177. localObject1 = TypeUtils.loadClass(localJSONLexer.scanSymbol(paramDefaultJSONParser.getSymbolTable(), '"'));
  178. if (localObject1 != paramMap.getClass())
  179. break;
  180. localJSONLexer.nextToken(16);
  181. }
  182. while (localJSONLexer.token() != 13);
  183. localJSONLexer.nextToken(16);
  184. paramDefaultJSONParser.setContext(localParseContext);
  185. return paramMap;
  186. paramMap = paramDefaultJSONParser.getConfig().getDeserializer((Type)localObject1);
  187. localJSONLexer.nextToken(16);
  188. paramDefaultJSONParser.setResolveStatus(2);
  189. if ((localParseContext != null) && (!(paramObject instanceof Integer)))
  190. paramDefaultJSONParser.popContext();
  191. paramMap = (Map)paramMap.deserialze(paramDefaultJSONParser, (Type)localObject1, paramObject);
  192. paramDefaultJSONParser.setContext(localParseContext);
  193. return paramMap;
  194. localJSONLexer.nextToken();
  195. Object localObject2;
  196. if (localJSONLexer.token() == 8)
  197. {
  198. localObject2 = null;
  199. localJSONLexer.nextToken();
  200. }
  201. while (true)
  202. {
  203. paramMap.put(localObject1, localObject2);
  204. paramDefaultJSONParser.checkMapResolve(paramMap, (String)localObject1);
  205. paramDefaultJSONParser.setContext(localParseContext, localObject2, localObject1);
  206. i = localJSONLexer.token();
  207. if ((i != 20) && (i != 15))
  208. break;
  209. paramDefaultJSONParser.setContext(localParseContext);
  210. return paramMap;
  211. localObject2 = paramDefaultJSONParser.parseObject(paramType);
  212. }
  213. }
  214. while (i != 13);
  215. localJSONLexer.nextToken();
  216. paramDefaultJSONParser.setContext(localParseContext);
  217. return paramMap;
  218. }
  219. protected Map<Object, Object> createMap(Type paramType)
  220. {
  221. if (paramType == Properties.class)
  222. return new Properties();
  223. if (paramType == Hashtable.class)
  224. return new Hashtable();
  225. if (paramType == IdentityHashMap.class)
  226. return new IdentityHashMap();
  227. if ((paramType == SortedMap.class) || (paramType == TreeMap.class))
  228. return new TreeMap();
  229. if ((paramType == ConcurrentMap.class) || (paramType == ConcurrentHashMap.class))
  230. return new ConcurrentHashMap();
  231. if ((paramType == Map.class) || (paramType == HashMap.class))
  232. return new HashMap();
  233. if (paramType == LinkedHashMap.class)
  234. return new LinkedHashMap();
  235. if ((paramType instanceof ParameterizedType))
  236. return createMap(((ParameterizedType)paramType).getRawType());
  237. Object localObject = (Class)paramType;
  238. if (((Class)localObject).isInterface())
  239. throw new JSONException("unsupport type " + paramType);
  240. try
  241. {
  242. localObject = (Map)((Class)localObject).newInstance();
  243. return localObject;
  244. }
  245. catch (Exception localException)
  246. {
  247. throw new JSONException("unsupport type " + paramType, localException);
  248. }
  249. }
  250. public <T> T deserialze(DefaultJSONParser paramDefaultJSONParser, Type paramType, Object paramObject)
  251. {
  252. Object localObject = paramDefaultJSONParser.getLexer();
  253. if (((JSONLexer)localObject).token() == 8)
  254. {
  255. ((JSONLexer)localObject).nextToken(16);
  256. return null;
  257. }
  258. Map localMap = createMap(paramType);
  259. localObject = paramDefaultJSONParser.getContext();
  260. try
  261. {
  262. paramDefaultJSONParser.setContext((ParseContext)localObject, localMap, paramObject);
  263. paramType = deserialze(paramDefaultJSONParser, paramType, paramObject, localMap);
  264. return paramType;
  265. }
  266. finally
  267. {
  268. paramDefaultJSONParser.setContext((ParseContext)localObject);
  269. }
  270. throw paramType;
  271. }
  272. protected Object deserialze(DefaultJSONParser paramDefaultJSONParser, Type paramType, Object paramObject, Map paramMap)
  273. {
  274. if ((paramType instanceof ParameterizedType))
  275. {
  276. Object localObject = (ParameterizedType)paramType;
  277. paramType = localObject.getActualTypeArguments()[0];
  278. localObject = localObject.getActualTypeArguments()[1];
  279. if (String.class == paramType)
  280. return parseMap(paramDefaultJSONParser, paramMap, (Type)localObject, paramObject);
  281. return parseMap(paramDefaultJSONParser, paramMap, paramType, (Type)localObject, paramObject);
  282. }
  283. return paramDefaultJSONParser.parseObject(paramMap, paramObject);
  284. }
  285. public int getFastMatchToken()
  286. {
  287. return 12;
  288. }
  289. }
  290. /* Location: C:\Users\User\dex2jar-2.0\dex\qting\classes-dex2jar.jar
  291. * Qualified Name: com.alibaba.fastjson.parser.deserializer.MapDeserializer
  292. * JD-Core Version: 0.6.2
  293. */