PageRenderTime 31ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

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

https://gitlab.com/qt-prometheus/qt-prometheus
Java | 1230 lines | 1185 code | 41 blank | 4 comment | 179 complexity | d737fd2b3f0c4f32a5791f9c7009dfc0 MD5 | raw file
  1. package com.alibaba.fastjson.parser.deserializer;
  2. import com.alibaba.fastjson.asm.ASMException;
  3. import com.alibaba.fastjson.asm.ClassWriter;
  4. import com.alibaba.fastjson.asm.FieldVisitor;
  5. import com.alibaba.fastjson.asm.Label;
  6. import com.alibaba.fastjson.asm.MethodVisitor;
  7. import com.alibaba.fastjson.asm.Opcodes;
  8. import com.alibaba.fastjson.parser.DefaultJSONParser;
  9. import com.alibaba.fastjson.parser.DefaultJSONParser.ResolveTask;
  10. import com.alibaba.fastjson.parser.Feature;
  11. import com.alibaba.fastjson.parser.JSONLexer;
  12. import com.alibaba.fastjson.parser.JSONLexerBase;
  13. import com.alibaba.fastjson.parser.JSONToken;
  14. import com.alibaba.fastjson.parser.ParseContext;
  15. import com.alibaba.fastjson.parser.ParserConfig;
  16. import com.alibaba.fastjson.parser.SymbolTable;
  17. import com.alibaba.fastjson.util.ASMClassLoader;
  18. import com.alibaba.fastjson.util.ASMUtils;
  19. import com.alibaba.fastjson.util.DeserializeBeanInfo;
  20. import com.alibaba.fastjson.util.FieldInfo;
  21. import java.lang.reflect.Constructor;
  22. import java.lang.reflect.Field;
  23. import java.lang.reflect.Method;
  24. import java.lang.reflect.Modifier;
  25. import java.lang.reflect.ParameterizedType;
  26. import java.util.ArrayList;
  27. import java.util.Collection;
  28. import java.util.Collections;
  29. import java.util.HashMap;
  30. import java.util.HashSet;
  31. import java.util.Iterator;
  32. import java.util.LinkedList;
  33. import java.util.List;
  34. import java.util.Map;
  35. import java.util.TreeSet;
  36. import java.util.concurrent.atomic.AtomicLong;
  37. public class ASMDeserializerFactory
  38. implements Opcodes
  39. {
  40. private static final ASMDeserializerFactory instance = new ASMDeserializerFactory();
  41. private ASMClassLoader classLoader = new ASMClassLoader();
  42. private final AtomicLong seed = new AtomicLong();
  43. private void _batchSet(Context paramContext, MethodVisitor paramMethodVisitor)
  44. {
  45. _batchSet(paramContext, paramMethodVisitor, true);
  46. }
  47. private void _batchSet(Context paramContext, MethodVisitor paramMethodVisitor, boolean paramBoolean)
  48. {
  49. int i = 0;
  50. int j = paramContext.getFieldInfoList().size();
  51. while (i < j)
  52. {
  53. Label localLabel = new Label();
  54. if (paramBoolean)
  55. _isFlag(paramMethodVisitor, paramContext, i, localLabel);
  56. _loadAndSet(paramContext, paramMethodVisitor, (FieldInfo)paramContext.getFieldInfoList().get(i));
  57. if (paramBoolean)
  58. paramMethodVisitor.visitLabel(localLabel);
  59. i += 1;
  60. }
  61. }
  62. private void _createInstance(ClassWriter paramClassWriter, Context paramContext)
  63. {
  64. paramClassWriter = paramClassWriter.visitMethod(1, "createInstance", "(" + ASMUtils.getDesc(DefaultJSONParser.class) + ASMUtils.getDesc(java.lang.reflect.Type.class) + ")Ljava/lang/Object;", null, null);
  65. paramClassWriter.visitTypeInsn(187, ASMUtils.getType(paramContext.getClazz()));
  66. paramClassWriter.visitInsn(89);
  67. paramClassWriter.visitMethodInsn(183, ASMUtils.getType(paramContext.getClazz()), "<init>", "()V");
  68. paramClassWriter.visitInsn(176);
  69. paramClassWriter.visitMaxs(3, 3);
  70. paramClassWriter.visitEnd();
  71. }
  72. private void _createInstance(Context paramContext, MethodVisitor paramMethodVisitor)
  73. {
  74. if (Modifier.isPublic(paramContext.getBeanInfo().getDefaultConstructor().getModifiers()))
  75. {
  76. paramMethodVisitor.visitTypeInsn(187, ASMUtils.getType(paramContext.getClazz()));
  77. paramMethodVisitor.visitInsn(89);
  78. paramMethodVisitor.visitMethodInsn(183, ASMUtils.getType(paramContext.getClazz()), "<init>", "()V");
  79. paramMethodVisitor.visitVarInsn(58, paramContext.var("instance"));
  80. return;
  81. }
  82. paramMethodVisitor.visitVarInsn(25, 0);
  83. paramMethodVisitor.visitVarInsn(25, 1);
  84. paramMethodVisitor.visitMethodInsn(183, ASMUtils.getType(ASMJavaBeanDeserializer.class), "createInstance", "(" + ASMUtils.getDesc(DefaultJSONParser.class) + ")Ljava/lang/Object;");
  85. paramMethodVisitor.visitTypeInsn(192, ASMUtils.getType(paramContext.getClazz()));
  86. paramMethodVisitor.visitVarInsn(58, paramContext.var("instance"));
  87. }
  88. private void _deserObject(Context paramContext, MethodVisitor paramMethodVisitor, FieldInfo paramFieldInfo, Class<?> paramClass)
  89. {
  90. _getFieldDeser(paramContext, paramMethodVisitor, paramFieldInfo);
  91. paramMethodVisitor.visitVarInsn(25, 1);
  92. if ((paramFieldInfo.getFieldType() instanceof Class))
  93. paramMethodVisitor.visitLdcInsn(com.alibaba.fastjson.asm.Type.getType(ASMUtils.getDesc(paramFieldInfo.getFieldClass())));
  94. while (true)
  95. {
  96. paramMethodVisitor.visitLdcInsn(paramFieldInfo.getName());
  97. paramMethodVisitor.visitMethodInsn(185, ASMUtils.getType(ObjectDeserializer.class), "deserialze", "(" + ASMUtils.getDesc(DefaultJSONParser.class) + ASMUtils.getDesc(java.lang.reflect.Type.class) + "Ljava/lang/Object;)Ljava/lang/Object;");
  98. paramMethodVisitor.visitTypeInsn(192, ASMUtils.getType(paramClass));
  99. paramMethodVisitor.visitVarInsn(58, paramContext.var(paramFieldInfo.getName() + "_asm"));
  100. return;
  101. paramMethodVisitor.visitVarInsn(25, 0);
  102. paramMethodVisitor.visitLdcInsn(paramFieldInfo.getName());
  103. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(ASMJavaBeanDeserializer.class), "getFieldType", "(Ljava/lang/String;)Ljava/lang/reflect/Type;");
  104. }
  105. }
  106. private void _deserialize_endCheck(Context paramContext, MethodVisitor paramMethodVisitor, Label paramLabel)
  107. {
  108. Label localLabel = new Label();
  109. paramMethodVisitor.visitIntInsn(21, paramContext.var("matchedCount"));
  110. paramMethodVisitor.visitJumpInsn(158, paramLabel);
  111. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  112. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "token", "()I");
  113. paramMethodVisitor.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "RBRACE", "I");
  114. paramMethodVisitor.visitJumpInsn(160, paramLabel);
  115. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  116. paramMethodVisitor.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "COMMA", "I");
  117. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "nextToken", "(I)V");
  118. paramMethodVisitor.visitLabel(localLabel);
  119. }
  120. private void _deserialze_list_obj(Context paramContext, MethodVisitor paramMethodVisitor, Label paramLabel, FieldInfo paramFieldInfo, Class<?> paramClass1, Class<?> paramClass2, int paramInt)
  121. {
  122. Label localLabel2 = new Label();
  123. Label localLabel1 = new Label();
  124. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "matchField", "([C)Z");
  125. paramMethodVisitor.visitJumpInsn(154, localLabel2);
  126. paramMethodVisitor.visitInsn(1);
  127. paramMethodVisitor.visitVarInsn(58, paramContext.var(paramFieldInfo.getName() + "_asm"));
  128. paramMethodVisitor.visitJumpInsn(167, localLabel1);
  129. paramMethodVisitor.visitLabel(localLabel2);
  130. _setFlag(paramMethodVisitor, paramContext, paramInt);
  131. localLabel2 = new Label();
  132. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  133. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "token", "()I");
  134. paramMethodVisitor.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "NULL", "I");
  135. paramMethodVisitor.visitJumpInsn(160, localLabel2);
  136. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  137. paramMethodVisitor.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "COMMA", "I");
  138. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "nextToken", "(I)V");
  139. paramMethodVisitor.visitInsn(1);
  140. paramMethodVisitor.visitTypeInsn(192, ASMUtils.getType(paramClass1));
  141. paramMethodVisitor.visitVarInsn(58, paramContext.var(paramFieldInfo.getName() + "_asm"));
  142. paramMethodVisitor.visitLabel(localLabel2);
  143. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  144. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "token", "()I");
  145. paramMethodVisitor.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "LBRACKET", "I");
  146. paramMethodVisitor.visitJumpInsn(160, paramLabel);
  147. _getCollectionFieldItemDeser(paramContext, paramMethodVisitor, paramFieldInfo, paramClass2);
  148. paramMethodVisitor.visitMethodInsn(185, ASMUtils.getType(ObjectDeserializer.class), "getFastMatchToken", "()I");
  149. paramMethodVisitor.visitVarInsn(54, paramContext.var("fastMatchToken"));
  150. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  151. paramMethodVisitor.visitVarInsn(21, paramContext.var("fastMatchToken"));
  152. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "nextToken", "(I)V");
  153. _newCollection(paramMethodVisitor, paramClass1);
  154. paramMethodVisitor.visitVarInsn(58, paramContext.var(paramFieldInfo.getName() + "_asm"));
  155. paramMethodVisitor.visitVarInsn(25, 1);
  156. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "getContext", "()" + ASMUtils.getDesc(ParseContext.class));
  157. paramMethodVisitor.visitVarInsn(58, paramContext.var("listContext"));
  158. paramMethodVisitor.visitVarInsn(25, 1);
  159. paramMethodVisitor.visitVarInsn(25, paramContext.var(paramFieldInfo.getName() + "_asm"));
  160. paramMethodVisitor.visitLdcInsn(paramFieldInfo.getName());
  161. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "setContext", "(Ljava/lang/Object;Ljava/lang/Object;)" + ASMUtils.getDesc(ParseContext.class));
  162. paramMethodVisitor.visitInsn(87);
  163. localLabel2 = new Label();
  164. Label localLabel3 = new Label();
  165. paramMethodVisitor.visitInsn(3);
  166. paramMethodVisitor.visitVarInsn(54, paramContext.var("i"));
  167. paramMethodVisitor.visitLabel(localLabel2);
  168. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  169. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "token", "()I");
  170. paramMethodVisitor.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "RBRACKET", "I");
  171. paramMethodVisitor.visitJumpInsn(159, localLabel3);
  172. paramMethodVisitor.visitVarInsn(25, 0);
  173. paramMethodVisitor.visitFieldInsn(180, paramContext.getClassName(), paramFieldInfo.getName() + "_asm_list_item_deser__", ASMUtils.getDesc(ObjectDeserializer.class));
  174. paramMethodVisitor.visitVarInsn(25, 1);
  175. paramMethodVisitor.visitLdcInsn(com.alibaba.fastjson.asm.Type.getType(ASMUtils.getDesc(paramClass2)));
  176. paramMethodVisitor.visitVarInsn(21, paramContext.var("i"));
  177. paramMethodVisitor.visitMethodInsn(184, ASMUtils.getType(Integer.class), "valueOf", "(I)Ljava/lang/Integer;");
  178. paramMethodVisitor.visitMethodInsn(185, ASMUtils.getType(ObjectDeserializer.class), "deserialze", "(" + ASMUtils.getDesc(DefaultJSONParser.class) + "Ljava/lang/reflect/Type;Ljava/lang/Object;)Ljava/lang/Object;");
  179. paramMethodVisitor.visitVarInsn(58, paramContext.var("list_item_value"));
  180. paramMethodVisitor.visitIincInsn(paramContext.var("i"), 1);
  181. paramMethodVisitor.visitVarInsn(25, paramContext.var(paramFieldInfo.getName() + "_asm"));
  182. paramMethodVisitor.visitVarInsn(25, paramContext.var("list_item_value"));
  183. if (paramClass1.isInterface())
  184. paramMethodVisitor.visitMethodInsn(185, ASMUtils.getType(paramClass1), "add", "(Ljava/lang/Object;)Z");
  185. while (true)
  186. {
  187. paramMethodVisitor.visitInsn(87);
  188. paramMethodVisitor.visitVarInsn(25, 1);
  189. paramMethodVisitor.visitVarInsn(25, paramContext.var(paramFieldInfo.getName() + "_asm"));
  190. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "checkListResolve", "(Ljava/util/Collection;)V");
  191. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  192. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "token", "()I");
  193. paramMethodVisitor.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "COMMA", "I");
  194. paramMethodVisitor.visitJumpInsn(160, localLabel2);
  195. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  196. paramMethodVisitor.visitVarInsn(21, paramContext.var("fastMatchToken"));
  197. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "nextToken", "(I)V");
  198. paramMethodVisitor.visitJumpInsn(167, localLabel2);
  199. paramMethodVisitor.visitLabel(localLabel3);
  200. paramMethodVisitor.visitVarInsn(25, 1);
  201. paramMethodVisitor.visitVarInsn(25, paramContext.var("listContext"));
  202. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "setContext", "(" + ASMUtils.getDesc(ParseContext.class) + ")V");
  203. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  204. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "token", "()I");
  205. paramMethodVisitor.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "RBRACKET", "I");
  206. paramMethodVisitor.visitJumpInsn(160, paramLabel);
  207. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  208. paramMethodVisitor.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "COMMA", "I");
  209. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "nextToken", "(I)V");
  210. paramMethodVisitor.visitLabel(localLabel1);
  211. return;
  212. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(paramClass1), "add", "(Ljava/lang/Object;)Z");
  213. }
  214. }
  215. private void _deserialze_obj(Context paramContext, MethodVisitor paramMethodVisitor, Label paramLabel, FieldInfo paramFieldInfo, Class<?> paramClass, int paramInt)
  216. {
  217. paramLabel = new Label();
  218. Label localLabel = new Label();
  219. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  220. paramMethodVisitor.visitVarInsn(25, 0);
  221. paramMethodVisitor.visitFieldInsn(180, paramContext.getClassName(), paramFieldInfo.getName() + "_asm_prefix__", "[C");
  222. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "matchField", "([C)Z");
  223. paramMethodVisitor.visitJumpInsn(154, paramLabel);
  224. paramMethodVisitor.visitInsn(1);
  225. paramMethodVisitor.visitVarInsn(58, paramContext.var(paramFieldInfo.getName() + "_asm"));
  226. paramMethodVisitor.visitJumpInsn(167, localLabel);
  227. paramMethodVisitor.visitLabel(paramLabel);
  228. _setFlag(paramMethodVisitor, paramContext, paramInt);
  229. paramMethodVisitor.visitVarInsn(21, paramContext.var("matchedCount"));
  230. paramMethodVisitor.visitInsn(4);
  231. paramMethodVisitor.visitInsn(96);
  232. paramMethodVisitor.visitVarInsn(54, paramContext.var("matchedCount"));
  233. _deserObject(paramContext, paramMethodVisitor, paramFieldInfo, paramClass);
  234. paramMethodVisitor.visitVarInsn(25, 1);
  235. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "getResolveStatus", "()I");
  236. paramMethodVisitor.visitFieldInsn(178, ASMUtils.getType(DefaultJSONParser.class), "NeedToResolve", "I");
  237. paramMethodVisitor.visitJumpInsn(160, localLabel);
  238. paramMethodVisitor.visitVarInsn(25, 1);
  239. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "getLastResolveTask", "()" + ASMUtils.getDesc(DefaultJSONParser.ResolveTask.class));
  240. paramMethodVisitor.visitVarInsn(58, paramContext.var("resolveTask"));
  241. paramMethodVisitor.visitVarInsn(25, paramContext.var("resolveTask"));
  242. paramMethodVisitor.visitVarInsn(25, 1);
  243. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "getContext", "()" + ASMUtils.getDesc(ParseContext.class));
  244. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.ResolveTask.class), "setOwnerContext", "(" + ASMUtils.getDesc(ParseContext.class) + ")V");
  245. paramMethodVisitor.visitVarInsn(25, paramContext.var("resolveTask"));
  246. paramMethodVisitor.visitVarInsn(25, 0);
  247. paramMethodVisitor.visitLdcInsn(paramFieldInfo.getName());
  248. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(ASMJavaBeanDeserializer.class), "getFieldDeserializer", "(Ljava/lang/String;)" + ASMUtils.getDesc(FieldDeserializer.class));
  249. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.ResolveTask.class), "setFieldDeserializer", "(" + ASMUtils.getDesc(FieldDeserializer.class) + ")V");
  250. paramMethodVisitor.visitVarInsn(25, 1);
  251. paramMethodVisitor.visitFieldInsn(178, ASMUtils.getType(DefaultJSONParser.class), "NONE", "I");
  252. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "setResolveStatus", "(I)V");
  253. paramMethodVisitor.visitLabel(localLabel);
  254. }
  255. private void _getCollectionFieldItemDeser(Context paramContext, MethodVisitor paramMethodVisitor, FieldInfo paramFieldInfo, Class<?> paramClass)
  256. {
  257. Label localLabel = new Label();
  258. paramMethodVisitor.visitVarInsn(25, 0);
  259. paramMethodVisitor.visitFieldInsn(180, paramContext.getClassName(), paramFieldInfo.getName() + "_asm_list_item_deser__", ASMUtils.getDesc(ObjectDeserializer.class));
  260. paramMethodVisitor.visitJumpInsn(199, localLabel);
  261. paramMethodVisitor.visitVarInsn(25, 0);
  262. paramMethodVisitor.visitVarInsn(25, 1);
  263. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "getConfig", "()" + ASMUtils.getDesc(ParserConfig.class));
  264. paramMethodVisitor.visitLdcInsn(com.alibaba.fastjson.asm.Type.getType(ASMUtils.getDesc(paramClass)));
  265. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(ParserConfig.class), "getDeserializer", "(" + ASMUtils.getDesc(java.lang.reflect.Type.class) + ")" + ASMUtils.getDesc(ObjectDeserializer.class));
  266. paramMethodVisitor.visitFieldInsn(181, paramContext.getClassName(), paramFieldInfo.getName() + "_asm_list_item_deser__", ASMUtils.getDesc(ObjectDeserializer.class));
  267. paramMethodVisitor.visitLabel(localLabel);
  268. paramMethodVisitor.visitVarInsn(25, 0);
  269. paramMethodVisitor.visitFieldInsn(180, paramContext.getClassName(), paramFieldInfo.getName() + "_asm_list_item_deser__", ASMUtils.getDesc(ObjectDeserializer.class));
  270. }
  271. private void _getFieldDeser(Context paramContext, MethodVisitor paramMethodVisitor, FieldInfo paramFieldInfo)
  272. {
  273. Label localLabel = new Label();
  274. paramMethodVisitor.visitVarInsn(25, 0);
  275. paramMethodVisitor.visitFieldInsn(180, paramContext.getClassName(), paramFieldInfo.getName() + "_asm_deser__", ASMUtils.getDesc(ObjectDeserializer.class));
  276. paramMethodVisitor.visitJumpInsn(199, localLabel);
  277. paramMethodVisitor.visitVarInsn(25, 0);
  278. paramMethodVisitor.visitVarInsn(25, 1);
  279. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "getConfig", "()" + ASMUtils.getDesc(ParserConfig.class));
  280. paramMethodVisitor.visitLdcInsn(com.alibaba.fastjson.asm.Type.getType(ASMUtils.getDesc(paramFieldInfo.getFieldClass())));
  281. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(ParserConfig.class), "getDeserializer", "(" + ASMUtils.getDesc(java.lang.reflect.Type.class) + ")" + ASMUtils.getDesc(ObjectDeserializer.class));
  282. paramMethodVisitor.visitFieldInsn(181, paramContext.getClassName(), paramFieldInfo.getName() + "_asm_deser__", ASMUtils.getDesc(ObjectDeserializer.class));
  283. paramMethodVisitor.visitLabel(localLabel);
  284. paramMethodVisitor.visitVarInsn(25, 0);
  285. paramMethodVisitor.visitFieldInsn(180, paramContext.getClassName(), paramFieldInfo.getName() + "_asm_deser__", ASMUtils.getDesc(ObjectDeserializer.class));
  286. }
  287. private void _init(ClassWriter paramClassWriter, Context paramContext)
  288. {
  289. int i = 0;
  290. int j = paramContext.getFieldInfoList().size();
  291. FieldInfo localFieldInfo;
  292. while (i < j)
  293. {
  294. localFieldInfo = (FieldInfo)paramContext.getFieldInfoList().get(i);
  295. paramClassWriter.visitField(1, localFieldInfo.getName() + "_asm_prefix__", "[C").visitEnd();
  296. i += 1;
  297. }
  298. i = 0;
  299. j = paramContext.getFieldInfoList().size();
  300. if (i < j)
  301. {
  302. localFieldInfo = (FieldInfo)paramContext.getFieldInfoList().get(i);
  303. Class localClass = localFieldInfo.getFieldClass();
  304. if (localClass.isPrimitive());
  305. while (true)
  306. {
  307. i += 1;
  308. break;
  309. if (!localClass.isEnum())
  310. if (Collection.class.isAssignableFrom(localClass))
  311. paramClassWriter.visitField(1, localFieldInfo.getName() + "_asm_list_item_deser__", ASMUtils.getDesc(ObjectDeserializer.class)).visitEnd();
  312. else
  313. paramClassWriter.visitField(1, localFieldInfo.getName() + "_asm_deser__", ASMUtils.getDesc(ObjectDeserializer.class)).visitEnd();
  314. }
  315. }
  316. paramClassWriter = paramClassWriter.visitMethod(1, "<init>", "(" + ASMUtils.getDesc(ParserConfig.class) + ASMUtils.getDesc(Class.class) + ")V", null, null);
  317. paramClassWriter.visitVarInsn(25, 0);
  318. paramClassWriter.visitVarInsn(25, 1);
  319. paramClassWriter.visitVarInsn(25, 2);
  320. paramClassWriter.visitMethodInsn(183, ASMUtils.getType(ASMJavaBeanDeserializer.class), "<init>", "(" + ASMUtils.getDesc(ParserConfig.class) + ASMUtils.getDesc(Class.class) + ")V");
  321. paramClassWriter.visitVarInsn(25, 0);
  322. paramClassWriter.visitFieldInsn(180, ASMUtils.getType(ASMJavaBeanDeserializer.class), "serializer", ASMUtils.getDesc(ASMJavaBeanDeserializer.InnerJavaBeanDeserializer.class));
  323. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JavaBeanDeserializer.class), "getFieldDeserializerMap", "()" + ASMUtils.getDesc(Map.class));
  324. paramClassWriter.visitInsn(87);
  325. i = 0;
  326. j = paramContext.getFieldInfoList().size();
  327. while (i < j)
  328. {
  329. localFieldInfo = (FieldInfo)paramContext.getFieldInfoList().get(i);
  330. paramClassWriter.visitVarInsn(25, 0);
  331. paramClassWriter.visitLdcInsn("\"" + localFieldInfo.getName() + "\":");
  332. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(String.class), "toCharArray", "()" + ASMUtils.getDesc([C.class));
  333. paramClassWriter.visitFieldInsn(181, paramContext.getClassName(), localFieldInfo.getName() + "_asm_prefix__", "[C");
  334. i += 1;
  335. }
  336. paramClassWriter.visitInsn(177);
  337. paramClassWriter.visitMaxs(4, 4);
  338. paramClassWriter.visitEnd();
  339. }
  340. private void _isEnable(Context paramContext, MethodVisitor paramMethodVisitor, Feature paramFeature)
  341. {
  342. paramMethodVisitor.visitVarInsn(25, paramContext.var("lexer"));
  343. paramMethodVisitor.visitFieldInsn(178, ASMUtils.getType(Feature.class), paramFeature.name(), "L" + ASMUtils.getType(Feature.class) + ";");
  344. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "isEnabled", "(L" + ASMUtils.getType(Feature.class) + ";" + ")Z");
  345. }
  346. private void _loadAndSet(Context paramContext, MethodVisitor paramMethodVisitor, FieldInfo paramFieldInfo)
  347. {
  348. Class localClass = paramFieldInfo.getFieldClass();
  349. java.lang.reflect.Type localType = paramFieldInfo.getFieldType();
  350. if (localClass == Boolean.TYPE)
  351. {
  352. paramMethodVisitor.visitVarInsn(25, paramContext.var("instance"));
  353. paramMethodVisitor.visitVarInsn(21, paramContext.var(paramFieldInfo.getName() + "_asm"));
  354. _set(paramContext, paramMethodVisitor, paramFieldInfo);
  355. }
  356. do
  357. {
  358. return;
  359. if ((localClass == Byte.TYPE) || (localClass == Short.TYPE) || (localClass == Integer.TYPE) || (localClass == Character.TYPE))
  360. {
  361. paramMethodVisitor.visitVarInsn(25, paramContext.var("instance"));
  362. paramMethodVisitor.visitVarInsn(21, paramContext.var(paramFieldInfo.getName() + "_asm"));
  363. _set(paramContext, paramMethodVisitor, paramFieldInfo);
  364. return;
  365. }
  366. if (localClass != Long.TYPE)
  367. break label314;
  368. paramMethodVisitor.visitVarInsn(25, paramContext.var("instance"));
  369. paramMethodVisitor.visitVarInsn(22, paramContext.var(paramFieldInfo.getName() + "_asm", 2));
  370. if (paramFieldInfo.getMethod() == null)
  371. break;
  372. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(paramContext.getClazz()), paramFieldInfo.getMethod().getName(), ASMUtils.getDesc(paramFieldInfo.getMethod()));
  373. }
  374. while (paramFieldInfo.getMethod().getReturnType().equals(Void.TYPE));
  375. paramMethodVisitor.visitInsn(87);
  376. return;
  377. paramMethodVisitor.visitFieldInsn(181, ASMUtils.getType(paramFieldInfo.getDeclaringClass()), paramFieldInfo.getField().getName(), ASMUtils.getDesc(paramFieldInfo.getFieldClass()));
  378. return;
  379. label314: if (localClass == Float.TYPE)
  380. {
  381. paramMethodVisitor.visitVarInsn(25, paramContext.var("instance"));
  382. paramMethodVisitor.visitVarInsn(23, paramContext.var(paramFieldInfo.getName() + "_asm"));
  383. _set(paramContext, paramMethodVisitor, paramFieldInfo);
  384. return;
  385. }
  386. if (localClass == Double.TYPE)
  387. {
  388. paramMethodVisitor.visitVarInsn(25, paramContext.var("instance"));
  389. paramMethodVisitor.visitVarInsn(24, paramContext.var(paramFieldInfo.getName() + "_asm", 2));
  390. _set(paramContext, paramMethodVisitor, paramFieldInfo);
  391. return;
  392. }
  393. if (localClass == String.class)
  394. {
  395. paramMethodVisitor.visitVarInsn(25, paramContext.var("instance"));
  396. paramMethodVisitor.visitVarInsn(25, paramContext.var(paramFieldInfo.getName() + "_asm"));
  397. _set(paramContext, paramMethodVisitor, paramFieldInfo);
  398. return;
  399. }
  400. if (localClass.isEnum())
  401. {
  402. paramMethodVisitor.visitVarInsn(25, paramContext.var("instance"));
  403. paramMethodVisitor.visitVarInsn(25, paramContext.var(paramFieldInfo.getName() + "_asm"));
  404. _set(paramContext, paramMethodVisitor, paramFieldInfo);
  405. return;
  406. }
  407. if (Collection.class.isAssignableFrom(localClass))
  408. {
  409. paramMethodVisitor.visitVarInsn(25, paramContext.var("instance"));
  410. if (getCollectionItemClass(localType) == String.class)
  411. {
  412. paramMethodVisitor.visitVarInsn(25, paramContext.var(paramFieldInfo.getName() + "_asm"));
  413. paramMethodVisitor.visitTypeInsn(192, ASMUtils.getType(localClass));
  414. }
  415. while (true)
  416. {
  417. _set(paramContext, paramMethodVisitor, paramFieldInfo);
  418. return;
  419. paramMethodVisitor.visitVarInsn(25, paramContext.var(paramFieldInfo.getName() + "_asm"));
  420. }
  421. }
  422. paramMethodVisitor.visitVarInsn(25, paramContext.var("instance"));
  423. paramMethodVisitor.visitVarInsn(25, paramContext.var(paramFieldInfo.getName() + "_asm"));
  424. _set(paramContext, paramMethodVisitor, paramFieldInfo);
  425. }
  426. private void _newCollection(MethodVisitor paramMethodVisitor, Class<?> paramClass)
  427. {
  428. if (paramClass.isAssignableFrom(ArrayList.class))
  429. {
  430. paramMethodVisitor.visitTypeInsn(187, ASMUtils.getType(ArrayList.class));
  431. paramMethodVisitor.visitInsn(89);
  432. paramMethodVisitor.visitMethodInsn(183, ASMUtils.getType(ArrayList.class), "<init>", "()V");
  433. }
  434. while (true)
  435. {
  436. paramMethodVisitor.visitTypeInsn(192, ASMUtils.getType(paramClass));
  437. return;
  438. if (paramClass.isAssignableFrom(LinkedList.class))
  439. {
  440. paramMethodVisitor.visitTypeInsn(187, ASMUtils.getType(LinkedList.class));
  441. paramMethodVisitor.visitInsn(89);
  442. paramMethodVisitor.visitMethodInsn(183, ASMUtils.getType(LinkedList.class), "<init>", "()V");
  443. }
  444. else if (paramClass.isAssignableFrom(HashSet.class))
  445. {
  446. paramMethodVisitor.visitTypeInsn(187, ASMUtils.getType(HashSet.class));
  447. paramMethodVisitor.visitInsn(89);
  448. paramMethodVisitor.visitMethodInsn(183, ASMUtils.getType(HashSet.class), "<init>", "()V");
  449. }
  450. else if (paramClass.isAssignableFrom(TreeSet.class))
  451. {
  452. paramMethodVisitor.visitTypeInsn(187, ASMUtils.getType(TreeSet.class));
  453. paramMethodVisitor.visitInsn(89);
  454. paramMethodVisitor.visitMethodInsn(183, ASMUtils.getType(TreeSet.class), "<init>", "()V");
  455. }
  456. else
  457. {
  458. paramMethodVisitor.visitTypeInsn(187, ASMUtils.getType(paramClass));
  459. paramMethodVisitor.visitInsn(89);
  460. paramMethodVisitor.visitMethodInsn(183, ASMUtils.getType(paramClass), "<init>", "()V");
  461. }
  462. }
  463. }
  464. private void _set(Context paramContext, MethodVisitor paramMethodVisitor, FieldInfo paramFieldInfo)
  465. {
  466. if (paramFieldInfo.getMethod() != null)
  467. {
  468. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(paramFieldInfo.getDeclaringClass()), paramFieldInfo.getMethod().getName(), ASMUtils.getDesc(paramFieldInfo.getMethod()));
  469. if (!paramFieldInfo.getMethod().getReturnType().equals(Void.TYPE))
  470. paramMethodVisitor.visitInsn(87);
  471. return;
  472. }
  473. paramMethodVisitor.visitFieldInsn(181, ASMUtils.getType(paramFieldInfo.getDeclaringClass()), paramFieldInfo.getField().getName(), ASMUtils.getDesc(paramFieldInfo.getFieldClass()));
  474. }
  475. private void _setContext(Context paramContext, MethodVisitor paramMethodVisitor)
  476. {
  477. paramMethodVisitor.visitVarInsn(25, 1);
  478. paramMethodVisitor.visitVarInsn(25, paramContext.var("context"));
  479. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "setContext", "(" + ASMUtils.getDesc(ParseContext.class) + ")V");
  480. Label localLabel = new Label();
  481. paramMethodVisitor.visitVarInsn(25, paramContext.var("childContext"));
  482. paramMethodVisitor.visitJumpInsn(198, localLabel);
  483. paramMethodVisitor.visitVarInsn(25, paramContext.var("childContext"));
  484. paramMethodVisitor.visitVarInsn(25, paramContext.var("instance"));
  485. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(ParseContext.class), "setObject", "(Ljava/lang/Object;)V");
  486. paramMethodVisitor.visitLabel(localLabel);
  487. }
  488. private void defineVarLexer(Context paramContext, MethodVisitor paramMethodVisitor)
  489. {
  490. paramMethodVisitor.visitVarInsn(25, 1);
  491. paramMethodVisitor.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "getLexer", "()" + ASMUtils.getDesc(JSONLexer.class));
  492. paramMethodVisitor.visitTypeInsn(192, ASMUtils.getType(JSONLexerBase.class));
  493. paramMethodVisitor.visitVarInsn(58, paramContext.var("lexer"));
  494. }
  495. private Class<?> getCollectionItemClass(java.lang.reflect.Type paramType)
  496. {
  497. if ((paramType instanceof ParameterizedType))
  498. {
  499. paramType = ((ParameterizedType)paramType).getActualTypeArguments()[0];
  500. if ((paramType instanceof Class))
  501. {
  502. Class localClass = (Class)paramType;
  503. paramType = localClass;
  504. if (!Modifier.isPublic(localClass.getModifiers()))
  505. throw new ASMException("can not create ASMParser");
  506. }
  507. else
  508. {
  509. throw new ASMException("can not create ASMParser");
  510. }
  511. }
  512. else
  513. {
  514. paramType = Object.class;
  515. }
  516. return paramType;
  517. }
  518. public static final ASMDeserializerFactory getInstance()
  519. {
  520. return instance;
  521. }
  522. void _deserialze(ClassWriter paramClassWriter, Context paramContext)
  523. {
  524. if (paramContext.getFieldInfoList().size() == 0)
  525. return;
  526. Object localObject1 = paramContext.getFieldInfoList().iterator();
  527. while (true)
  528. {
  529. if (!((Iterator)localObject1).hasNext())
  530. break label105;
  531. localObject3 = (FieldInfo)((Iterator)localObject1).next();
  532. localObject2 = ((FieldInfo)localObject3).getFieldClass();
  533. localObject3 = ((FieldInfo)localObject3).getFieldType();
  534. if (localObject2 == Character.TYPE)
  535. break;
  536. if (Collection.class.isAssignableFrom((Class)localObject2))
  537. if ((!(localObject3 instanceof ParameterizedType)) || (!(((ParameterizedType)localObject3).getActualTypeArguments()[0] instanceof Class)))
  538. break;
  539. }
  540. label105: Collections.sort(paramContext.getFieldInfoList());
  541. paramClassWriter = paramClassWriter.visitMethod(1, "deserialze", "(" + ASMUtils.getDesc(DefaultJSONParser.class) + ASMUtils.getDesc(java.lang.reflect.Type.class) + "Ljava/lang/Object;)Ljava/lang/Object;", null, null);
  542. localObject1 = new Label();
  543. Object localObject2 = new Label();
  544. Object localObject3 = new Label();
  545. Label localLabel = new Label();
  546. defineVarLexer(paramContext, paramClassWriter);
  547. _isEnable(paramContext, paramClassWriter, Feature.SortFeidFastMatch);
  548. paramClassWriter.visitJumpInsn(153, (Label)localObject2);
  549. Object localObject4 = new Label();
  550. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  551. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "token", "()I");
  552. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "LBRACKET", "I");
  553. paramClassWriter.visitJumpInsn(160, (Label)localObject4);
  554. paramClassWriter.visitVarInsn(25, 0);
  555. paramClassWriter.visitVarInsn(25, 1);
  556. paramClassWriter.visitVarInsn(25, 2);
  557. paramClassWriter.visitVarInsn(25, 3);
  558. paramClassWriter.visitMethodInsn(183, paramContext.getClassName(), "deserialzeArrayMapping", "(" + ASMUtils.getDesc(DefaultJSONParser.class) + ASMUtils.getDesc(java.lang.reflect.Type.class) + "Ljava/lang/Object;)Ljava/lang/Object;");
  559. paramClassWriter.visitInsn(176);
  560. paramClassWriter.visitLabel((Label)localObject4);
  561. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  562. paramClassWriter.visitLdcInsn(paramContext.getClazz().getName());
  563. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanType", "(Ljava/lang/String;)I");
  564. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONLexerBase.class), "NOT_MATCH", "I");
  565. paramClassWriter.visitJumpInsn(159, (Label)localObject2);
  566. paramClassWriter.visitVarInsn(25, 1);
  567. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "getContext", "()Lcom/alibaba/fastjson/parser/ParseContext;");
  568. paramClassWriter.visitVarInsn(58, paramContext.var("mark_context"));
  569. paramClassWriter.visitInsn(3);
  570. paramClassWriter.visitVarInsn(54, paramContext.var("matchedCount"));
  571. _createInstance(paramContext, paramClassWriter);
  572. paramClassWriter.visitVarInsn(25, 1);
  573. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "getContext", "()" + ASMUtils.getDesc(ParseContext.class));
  574. paramClassWriter.visitVarInsn(58, paramContext.var("context"));
  575. paramClassWriter.visitVarInsn(25, 1);
  576. paramClassWriter.visitVarInsn(25, paramContext.var("context"));
  577. paramClassWriter.visitVarInsn(25, paramContext.var("instance"));
  578. paramClassWriter.visitVarInsn(25, 3);
  579. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "setContext", "(" + ASMUtils.getDesc(ParseContext.class) + "Ljava/lang/Object;Ljava/lang/Object;)" + ASMUtils.getDesc(ParseContext.class));
  580. paramClassWriter.visitVarInsn(58, paramContext.var("childContext"));
  581. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  582. paramClassWriter.visitFieldInsn(180, ASMUtils.getType(JSONLexerBase.class), "matchStat", "I");
  583. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONLexerBase.class), "END", "I");
  584. paramClassWriter.visitJumpInsn(159, (Label)localObject3);
  585. paramClassWriter.visitInsn(3);
  586. paramClassWriter.visitIntInsn(54, paramContext.var("matchStat"));
  587. int j = paramContext.getFieldInfoList().size();
  588. int i = 0;
  589. while (i < j)
  590. {
  591. paramClassWriter.visitInsn(3);
  592. paramClassWriter.visitVarInsn(54, paramContext.var("_asm_flag_" + i / 32));
  593. i += 32;
  594. }
  595. i = 0;
  596. Object localObject5;
  597. label1165: Object localObject6;
  598. if (i < j)
  599. {
  600. localObject4 = (FieldInfo)paramContext.getFieldInfoList().get(i);
  601. localObject5 = ((FieldInfo)localObject4).getFieldClass();
  602. if ((localObject5 == Boolean.TYPE) || (localObject5 == Byte.TYPE) || (localObject5 == Short.TYPE) || (localObject5 == Integer.TYPE))
  603. {
  604. paramClassWriter.visitInsn(3);
  605. paramClassWriter.visitVarInsn(54, paramContext.var(((FieldInfo)localObject4).getName() + "_asm"));
  606. }
  607. while (true)
  608. {
  609. i += 1;
  610. break;
  611. if (localObject5 == Long.TYPE)
  612. {
  613. paramClassWriter.visitInsn(9);
  614. paramClassWriter.visitVarInsn(55, paramContext.var(((FieldInfo)localObject4).getName() + "_asm", 2));
  615. }
  616. else if (localObject5 == Float.TYPE)
  617. {
  618. paramClassWriter.visitInsn(11);
  619. paramClassWriter.visitVarInsn(56, paramContext.var(((FieldInfo)localObject4).getName() + "_asm"));
  620. }
  621. else
  622. {
  623. if (localObject5 != Double.TYPE)
  624. break label1165;
  625. paramClassWriter.visitInsn(14);
  626. paramClassWriter.visitVarInsn(57, paramContext.var(((FieldInfo)localObject4).getName() + "_asm", 2));
  627. }
  628. }
  629. if (localObject5 == String.class)
  630. {
  631. localObject6 = new Label();
  632. _isEnable(paramContext, paramClassWriter, Feature.InitStringFieldAsEmpty);
  633. paramClassWriter.visitJumpInsn(153, (Label)localObject6);
  634. _setFlag(paramClassWriter, paramContext, i);
  635. paramClassWriter.visitLabel((Label)localObject6);
  636. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  637. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "stringDefaultValue", "()Ljava/lang/String;");
  638. }
  639. while (true)
  640. {
  641. paramClassWriter.visitTypeInsn(192, ASMUtils.getType((Class)localObject5));
  642. paramClassWriter.visitVarInsn(58, paramContext.var(((FieldInfo)localObject4).getName() + "_asm"));
  643. break;
  644. paramClassWriter.visitInsn(1);
  645. }
  646. }
  647. i = 0;
  648. if (i < j)
  649. {
  650. localObject5 = (FieldInfo)paramContext.getFieldInfoList().get(i);
  651. localObject6 = ((FieldInfo)localObject5).getFieldClass();
  652. Object localObject7 = ((FieldInfo)localObject5).getFieldType();
  653. localObject4 = new Label();
  654. if (localObject6 == Boolean.TYPE)
  655. {
  656. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  657. paramClassWriter.visitVarInsn(25, 0);
  658. paramClassWriter.visitFieldInsn(180, paramContext.getClassName(), ((FieldInfo)localObject5).getName() + "_asm_prefix__", "[C");
  659. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanFieldBoolean", "([C)Z");
  660. paramClassWriter.visitVarInsn(54, paramContext.var(((FieldInfo)localObject5).getName() + "_asm"));
  661. label1488: paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  662. paramClassWriter.visitFieldInsn(180, ASMUtils.getType(JSONLexerBase.class), "matchStat", "I");
  663. localObject5 = new Label();
  664. paramClassWriter.visitJumpInsn(158, (Label)localObject5);
  665. _setFlag(paramClassWriter, paramContext, i);
  666. paramClassWriter.visitLabel((Label)localObject5);
  667. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  668. paramClassWriter.visitFieldInsn(180, ASMUtils.getType(JSONLexerBase.class), "matchStat", "I");
  669. paramClassWriter.visitInsn(89);
  670. paramClassWriter.visitVarInsn(54, paramContext.var("matchStat"));
  671. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONLexerBase.class), "NOT_MATCH", "I");
  672. paramClassWriter.visitJumpInsn(159, (Label)localObject1);
  673. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  674. paramClassWriter.visitFieldInsn(180, ASMUtils.getType(JSONLexerBase.class), "matchStat", "I");
  675. paramClassWriter.visitJumpInsn(158, (Label)localObject4);
  676. paramClassWriter.visitVarInsn(21, paramContext.var("matchedCount"));
  677. paramClassWriter.visitInsn(4);
  678. paramClassWriter.visitInsn(96);
  679. paramClassWriter.visitVarInsn(54, paramContext.var("matchedCount"));
  680. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  681. paramClassWriter.visitFieldInsn(180, ASMUtils.getType(JSONLexerBase.class), "matchStat", "I");
  682. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONLexerBase.class), "END", "I");
  683. paramClassWriter.visitJumpInsn(159, localLabel);
  684. paramClassWriter.visitLabel((Label)localObject4);
  685. if (i == j - 1)
  686. {
  687. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  688. paramClassWriter.visitFieldInsn(180, ASMUtils.getType(JSONLexerBase.class), "matchStat", "I");
  689. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONLexerBase.class), "END", "I");
  690. paramClassWriter.visitJumpInsn(160, (Label)localObject1);
  691. }
  692. }
  693. while (true)
  694. {
  695. i += 1;
  696. break;
  697. if (localObject6 == Byte.TYPE)
  698. {
  699. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  700. paramClassWriter.visitVarInsn(25, 0);
  701. paramClassWriter.visitFieldInsn(180, paramContext.getClassName(), ((FieldInfo)localObject5).getName() + "_asm_prefix__", "[C");
  702. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanFieldInt", "([C)I");
  703. paramClassWriter.visitVarInsn(54, paramContext.var(((FieldInfo)localObject5).getName() + "_asm"));
  704. break label1488;
  705. }
  706. if (localObject6 == Short.TYPE)
  707. {
  708. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  709. paramClassWriter.visitVarInsn(25, 0);
  710. paramClassWriter.visitFieldInsn(180, paramContext.getClassName(), ((FieldInfo)localObject5).getName() + "_asm_prefix__", "[C");
  711. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanFieldInt", "([C)I");
  712. paramClassWriter.visitVarInsn(54, paramContext.var(((FieldInfo)localObject5).getName() + "_asm"));
  713. break label1488;
  714. }
  715. if (localObject6 == Integer.TYPE)
  716. {
  717. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  718. paramClassWriter.visitVarInsn(25, 0);
  719. paramClassWriter.visitFieldInsn(180, paramContext.getClassName(), ((FieldInfo)localObject5).getName() + "_asm_prefix__", "[C");
  720. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanFieldInt", "([C)I");
  721. paramClassWriter.visitVarInsn(54, paramContext.var(((FieldInfo)localObject5).getName() + "_asm"));
  722. break label1488;
  723. }
  724. if (localObject6 == Long.TYPE)
  725. {
  726. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  727. paramClassWriter.visitVarInsn(25, 0);
  728. paramClassWriter.visitFieldInsn(180, paramContext.getClassName(), ((FieldInfo)localObject5).getName() + "_asm_prefix__", "[C");
  729. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanFieldLong", "([C)J");
  730. paramClassWriter.visitVarInsn(55, paramContext.var(((FieldInfo)localObject5).getName() + "_asm", 2));
  731. break label1488;
  732. }
  733. if (localObject6 == Float.TYPE)
  734. {
  735. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  736. paramClassWriter.visitVarInsn(25, 0);
  737. paramClassWriter.visitFieldInsn(180, paramContext.getClassName(), ((FieldInfo)localObject5).getName() + "_asm_prefix__", "[C");
  738. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanFieldFloat", "([C)F");
  739. paramClassWriter.visitVarInsn(56, paramContext.var(((FieldInfo)localObject5).getName() + "_asm"));
  740. break label1488;
  741. }
  742. if (localObject6 == Double.TYPE)
  743. {
  744. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  745. paramClassWriter.visitVarInsn(25, 0);
  746. paramClassWriter.visitFieldInsn(180, paramContext.getClassName(), ((FieldInfo)localObject5).getName() + "_asm_prefix__", "[C");
  747. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanFieldDouble", "([C)D");
  748. paramClassWriter.visitVarInsn(57, paramContext.var(((FieldInfo)localObject5).getName() + "_asm", 2));
  749. break label1488;
  750. }
  751. if (localObject6 == String.class)
  752. {
  753. localObject6 = new Label();
  754. paramClassWriter.visitIntInsn(21, paramContext.var("matchStat"));
  755. paramClassWriter.visitInsn(7);
  756. paramClassWriter.visitJumpInsn(160, (Label)localObject6);
  757. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  758. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "stringDefaultValue", "()Ljava/lang/String;");
  759. paramClassWriter.visitVarInsn(58, paramContext.var(((FieldInfo)localObject5).getName() + "_asm"));
  760. paramClassWriter.visitJumpInsn(167, (Label)localObject4);
  761. paramClassWriter.visitLabel((Label)localObject6);
  762. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  763. paramClassWriter.visitVarInsn(25, 0);
  764. paramClassWriter.visitFieldInsn(180, paramContext.getClassName(), ((FieldInfo)localObject5).getName() + "_asm_prefix__", "[C");
  765. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanFieldString", "([C)Ljava/lang/String;");
  766. paramClassWriter.visitVarInsn(58, paramContext.var(((FieldInfo)localObject5).getName() + "_asm"));
  767. break label1488;
  768. }
  769. if (((Class)localObject6).isEnum())
  770. {
  771. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  772. paramClassWriter.visitVarInsn(25, 0);
  773. paramClassWriter.visitFieldInsn(180, paramContext.getClassName(), ((FieldInfo)localObject5).getName() + "_asm_prefix__", "[C");
  774. localObject7 = new Label();
  775. paramClassWriter.visitInsn(1);
  776. paramClassWriter.visitTypeInsn(192, ASMUtils.getType((Class)localObject6));
  777. paramClassWriter.visitVarInsn(58, paramContext.var(((FieldInfo)localObject5).getName() + "_asm"));
  778. paramClassWriter.visitVarInsn(25, 1);
  779. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "getSymbolTable", "()" + ASMUtils.getDesc(SymbolTable.class));
  780. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanFieldSymbol", "([C" + ASMUtils.getDesc(SymbolTable.class) + ")Ljava/lang/String;");
  781. paramClassWriter.visitInsn(89);
  782. paramClassWriter.visitVarInsn(58, paramContext.var(((FieldInfo)localObject5).getName() + "_asm_enumName"));
  783. paramClassWriter.visitJumpInsn(198, (Label)localObject7);
  784. paramClassWriter.visitVarInsn(25, paramContext.var(((FieldInfo)localObject5).getName() + "_asm_enumName"));
  785. paramClassWriter.visitMethodInsn(184, ASMUtils.getType((Class)localObject6), "valueOf", "(Ljava/lang/String;)" + ASMUtils.getDesc((Class)localObject6));
  786. paramClassWriter.visitVarInsn(58, paramContext.var(((FieldInfo)localObject5).getName() + "_asm"));
  787. paramClassWriter.visitLabel((Label)localObject7);
  788. break label1488;
  789. }
  790. if (Collection.class.isAssignableFrom((Class)localObject6))
  791. {
  792. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  793. paramClassWriter.visitVarInsn(25, 0);
  794. paramClassWriter.visitFieldInsn(180, paramContext.getClassName(), ((FieldInfo)localObject5).getName() + "_asm_prefix__", "[C");
  795. localObject7 = getCollectionItemClass((java.lang.reflect.Type)localObject7);
  796. if (localObject7 == String.class)
  797. {
  798. paramClassWriter.visitLdcInsn(com.alibaba.fastjson.asm.Type.getType(ASMUtils.getDesc((Class)localObject6)));
  799. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanFieldStringArray", "([CLjava/lang/Class;)" + ASMUtils.getDesc(Collection.class));
  800. paramClassWriter.visitVarInsn(58, paramContext.var(((FieldInfo)localObject5).getName() + "_asm"));
  801. break label1488;
  802. }
  803. _deserialze_list_obj(paramContext, paramClassWriter, (Label)localObject1, (FieldInfo)localObject5, (Class)localObject6, (Class)localObject7, i);
  804. if (i != j - 1)
  805. continue;
  806. _deserialize_endCheck(paramContext, paramClassWriter, (Label)localObject1);
  807. continue;
  808. }
  809. _deserialze_obj(paramContext, paramClassWriter, (Label)localObject1, (FieldInfo)localObject5, (Class)localObject6, i);
  810. if (i == j - 1)
  811. _deserialize_endCheck(paramContext, paramClassWriter, (Label)localObject1);
  812. }
  813. }
  814. paramClassWriter.visitLabel(localLabel);
  815. if ((!paramContext.getClazz().isInterface()) && (!Modifier.isAbstract(paramContext.getClazz().getModifiers())))
  816. _batchSet(paramContext, paramClassWriter);
  817. paramClassWriter.visitLabel((Label)localObject3);
  818. _setContext(paramContext, paramClassWriter);
  819. paramClassWriter.visitVarInsn(25, paramContext.var("instance"));
  820. paramClassWriter.visitInsn(176);
  821. paramClassWriter.visitLabel((Label)localObject1);
  822. _batchSet(paramContext, paramClassWriter);
  823. paramClassWriter.visitVarInsn(25, 0);
  824. paramClassWriter.visitVarInsn(25, 1);
  825. paramClassWriter.visitVarInsn(25, 2);
  826. paramClassWriter.visitVarInsn(25, 3);
  827. paramClassWriter.visitVarInsn(25, paramContext.var("instance"));
  828. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(ASMJavaBeanDeserializer.class), "parseRest", "(" + ASMUtils.getDesc(DefaultJSONParser.class) + ASMUtils.getDesc(java.lang.reflect.Type.class) + "Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
  829. paramClassWriter.visitTypeInsn(192, ASMUtils.getType(paramContext.getClazz()));
  830. paramClassWriter.visitInsn(176);
  831. paramClassWriter.visitLabel((Label)localObject2);
  832. paramClassWriter.visitVarInsn(25, 0);
  833. paramClassWriter.visitVarInsn(25, 1);
  834. paramClassWriter.visitVarInsn(25, 2);
  835. paramClassWriter.visitVarInsn(25, 3);
  836. paramClassWriter.visitMethodInsn(183, ASMUtils.getType(ASMJavaBeanDeserializer.class), "deserialze", "(" + ASMUtils.getDesc(DefaultJSONParser.class) + ASMUtils.getDesc(java.lang.reflect.Type.class) + "Ljava/lang/Object;)Ljava/lang/Object;");
  837. paramClassWriter.visitInsn(176);
  838. paramClassWriter.visitMaxs(5, paramContext.getVariantCount());
  839. paramClassWriter.visitEnd();
  840. }
  841. void _deserialzeArrayMapping(ClassWriter paramClassWriter, Context paramContext)
  842. {
  843. paramClassWriter = paramClassWriter.visitMethod(1, "deserialzeArrayMapping", "(" + ASMUtils.getDesc(DefaultJSONParser.class) + ASMUtils.getDesc(java.lang.reflect.Type.class) + "Ljava/lang/Object;)Ljava/lang/Object;", null, null);
  844. defineVarLexer(paramContext, paramClassWriter);
  845. _createInstance(paramContext, paramClassWriter);
  846. List localList = paramContext.getBeanInfo().getSortedFieldList();
  847. int m = localList.size();
  848. int i = 0;
  849. if (i < m)
  850. {
  851. int j;
  852. label97: int k;
  853. label106: FieldInfo localFieldInfo;
  854. Class localClass;
  855. Object localObject;
  856. if (i == m - 1)
  857. {
  858. j = 1;
  859. if (j == 0)
  860. break label251;
  861. k = 93;
  862. localFieldInfo = (FieldInfo)localList.get(i);
  863. localClass = localFieldInfo.getFieldClass();
  864. localObject = localFieldInfo.getFieldType();
  865. if ((localClass != Byte.TYPE) && (localClass != Short.TYPE) && (localClass != Integer.TYPE))
  866. break label258;
  867. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  868. paramClassWriter.visitVarInsn(16, k);
  869. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanInt", "(C)I");
  870. paramClassWriter.visitVarInsn(54, paramContext.var(localFieldInfo.getName() + "_asm"));
  871. }
  872. while (true)
  873. {
  874. i += 1;
  875. break;
  876. j = 0;
  877. break label97;
  878. label251: k = 44;
  879. break label106;
  880. label258: if (localClass == Long.TYPE)
  881. {
  882. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  883. paramClassWriter.visitVarInsn(16, k);
  884. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanLong", "(C)J");
  885. paramClassWriter.visitVarInsn(55, paramContext.var(localFieldInfo.getName() + "_asm", 2));
  886. }
  887. else if (localClass == Boolean.TYPE)
  888. {
  889. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  890. paramClassWriter.visitVarInsn(16, k);
  891. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanBoolean", "(C)Z");
  892. paramClassWriter.visitVarInsn(54, paramContext.var(localFieldInfo.getName() + "_asm"));
  893. }
  894. else if (localClass == Float.TYPE)
  895. {
  896. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  897. paramClassWriter.visitVarInsn(16, k);
  898. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanFloat", "(C)F");
  899. paramClassWriter.visitVarInsn(56, paramContext.var(localFieldInfo.getName() + "_asm"));
  900. }
  901. else if (localClass == Double.TYPE)
  902. {
  903. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  904. paramClassWriter.visitVarInsn(16, k);
  905. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanDouble", "(C)D");
  906. paramClassWriter.visitVarInsn(57, paramContext.var(localFieldInfo.getName() + "_asm", 2));
  907. }
  908. else if (localClass == Character.TYPE)
  909. {
  910. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  911. paramClassWriter.visitVarInsn(16, k);
  912. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanString", "(C)Ljava/lang/String;");
  913. paramClassWriter.visitInsn(3);
  914. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(String.class), "charAt", "(I)C");
  915. paramClassWriter.visitVarInsn(54, paramContext.var(localFieldInfo.getName() + "_asm"));
  916. }
  917. else if (localClass == String.class)
  918. {
  919. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  920. paramClassWriter.visitVarInsn(16, k);
  921. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanString", "(C)Ljava/lang/String;");
  922. paramClassWriter.visitVarInsn(58, paramContext.var(localFieldInfo.getName() + "_asm"));
  923. }
  924. else if (localClass.isEnum())
  925. {
  926. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  927. paramClassWriter.visitLdcInsn(com.alibaba.fastjson.asm.Type.getType(ASMUtils.getDesc(localClass)));
  928. paramClassWriter.visitVarInsn(25, 1);
  929. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "getSymbolTable", "()" + ASMUtils.getDesc(SymbolTable.class));
  930. paramClassWriter.visitVarInsn(16, k);
  931. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanEnum", "(Ljava/lang/Class;" + ASMUtils.getDesc(SymbolTable.class) + "C)Ljava/lang/Enum;");
  932. paramClassWriter.visitTypeInsn(192, ASMUtils.getType(localClass));
  933. paramClassWriter.visitVarInsn(58, paramContext.var(localFieldInfo.getName() + "_asm"));
  934. }
  935. else
  936. {
  937. if (!Collection.class.isAssignableFrom(localClass))
  938. break label1389;
  939. localObject = getCollectionItemClass((java.lang.reflect.Type)localObject);
  940. if (localObject != String.class)
  941. break label1148;
  942. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  943. paramClassWriter.visitLdcInsn(com.alibaba.fastjson.asm.Type.getType(ASMUtils.getDesc(localClass)));
  944. paramClassWriter.visitVarInsn(16, k);
  945. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "scanStringArray", "(Ljava/lang/Class;C)Ljava/util/Collection;");
  946. paramClassWriter.visitVarInsn(58, paramContext.var(localFieldInfo.getName() + "_asm"));
  947. }
  948. }
  949. label1148: paramClassWriter.visitVarInsn(25, 1);
  950. if (i == 0)
  951. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "LBRACKET", "I");
  952. while (true)
  953. {
  954. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "LBRACKET", "I");
  955. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "accept", "(II)V");
  956. _newCollection(paramClassWriter, localClass);
  957. paramClassWriter.visitInsn(89);
  958. paramClassWriter.visitVarInsn(58, paramContext.var(localFieldInfo.getName() + "_asm"));
  959. _getCollectionFieldItemDeser(paramContext, paramClassWriter, localFieldInfo, (Class)localObject);
  960. paramClassWriter.visitVarInsn(25, 1);
  961. paramClassWriter.visitLdcInsn(com.alibaba.fastjson.asm.Type.getType(ASMUtils.getDesc((Class)localObject)));
  962. paramClassWriter.visitVarInsn(25, 3);
  963. paramClassWriter.visitMethodInsn(184, ASMUtils.getType(ASMUtils.class), "parseArray", "(Ljava/util/Collection;" + ASMUtils.getDesc(ObjectDeserializer.class) + ASMUtils.getDesc(DefaultJSONParser.class) + "Ljava/lang/reflect/Type;Ljava/lang/Object;)V");
  964. break;
  965. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "COMMA", "I");
  966. }
  967. label1389: paramClassWriter.visitVarInsn(25, 1);
  968. if (i == 0)
  969. {
  970. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "LBRACKET", "I");
  971. label1421: paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "LBRACKET", "I");
  972. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "accept", "(II)V");
  973. _deserObject(paramContext, paramClassWriter, localFieldInfo, localClass);
  974. paramClassWriter.visitVarInsn(25, 1);
  975. if (j != 0)
  976. break label1563;
  977. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "COMMA", "I");
  978. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "LBRACKET", "I");
  979. }
  980. while (true)
  981. {
  982. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(DefaultJSONParser.class), "accept", "(II)V");
  983. break;
  984. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "COMMA", "I");
  985. break label1421;
  986. label1563: paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "RBRACKET", "I");
  987. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "EOF", "I");
  988. }
  989. }
  990. _batchSet(paramContext, paramClassWriter, false);
  991. paramClassWriter.visitVarInsn(25, paramContext.var("lexer"));
  992. paramClassWriter.visitFieldInsn(178, ASMUtils.getType(JSONToken.class), "COMMA", "I");
  993. paramClassWriter.visitMethodInsn(182, ASMUtils.getType(JSONLexerBase.class), "nextToken", "(I)V");
  994. paramClassWriter.visitVarInsn(25, paramContext.var("instance"));
  995. paramClassWriter.visitInsn(176);
  996. paramClassWriter.visitMaxs(5, paramContext.getVariantCount());
  997. paramClassWriter.visitEnd();
  998. }
  999. void _isFlag(MethodVisitor paramMethodVisitor, Context paramContext, int paramInt, Label paramLabel)
  1000. {
  1001. paramMethodVisitor.visitVarInsn(21, paramContext.var("_asm_flag_" + paramInt / 32));
  1002. paramMethodVisitor.visitLdcInsn(Integer.valueOf(1 << paramInt));
  1003. paramMethodVisitor.visitInsn(126);
  1004. paramMethodVisitor.visitJumpInsn(153, paramLabel);
  1005. }
  1006. void _setFlag(MethodVisitor paramMethodVisitor, Context paramContext, int paramInt)
  1007. {
  1008. String str = "_asm_flag_" + paramInt / 32;
  1009. paramMethodVisitor.visitVarInsn(21, paramContext.var(str));
  1010. paramMethodVisitor.visitLdcInsn(Integer.valueOf(1 << paramInt));
  1011. paramMethodVisitor.visitInsn(128);
  1012. paramMethodVisitor.visitVarInsn(54, paramContext.var(str));
  1013. }
  1014. public FieldDeserializer createFieldDeserializer(ParserConfig paramParserConfig, Class<?> paramClass, FieldInfo paramFieldInfo)
  1015. throws Exception
  1016. {
  1017. Class localClass = paramFieldInfo.getFieldClass();
  1018. if ((localClass == Integer.TYPE) || (localClass == Long.TYPE) || (localClass == String.class))
  1019. return createStringFieldDeserializer(paramParserConfig, paramClass, paramFieldInfo);
  1020. return paramParserConfig.createFieldDeserializerWithoutASM(paramParserConfig, paramClass, paramFieldInfo);
  1021. }
  1022. public ObjectDeserializer createJavaBeanDeserializer(ParserConfig paramParserConfig, Class<?> paramClass, java.lang.reflect.Type paramType)
  1023. throws Exception
  1024. {
  1025. if (paramClass.isPrimitive())
  1026. throw new IllegalArgumentException("not support type :" + paramClass.getName());
  1027. String str = getGenClassName(paramClass);
  1028. ClassWriter localClassWriter = new ClassWriter();
  1029. localClassWriter.visit(49, 33, str, ASMUtils.getType(ASMJavaBeanDeserializer.class), null);
  1030. paramType = DeserializeBeanInfo.computeSetters(paramClass, paramType);
  1031. _init(localClassWriter, new Context(str, paramParserConfig, paramType, 3));
  1032. _createInstance(localClassWriter, new Context(str, paramParserConfig, paramType, 3));
  1033. _deserialze(localClassWriter, new Context(str, paramParserConfig, paramType, 4));
  1034. _deserialzeArrayMapping(localClassWriter, new Context(str, paramParserConfig, paramType, 4));
  1035. paramType = localClassWriter.toByteArray();
  1036. return (ObjectDeserializer)this.classLoader.defineClassPublic(str, paramType, 0, paramType.length).getConstructor(new Class[] { ParserConfig.class, Class.class }).newInstance(new Object[] { paramParserConfig, paramClass });
  1037. }
  1038. public FieldDeserializer createStringFieldDeserializer(ParserConfig paramParserConfig, Class<?> paramClass, FieldInfo paramFieldInfo)
  1039. throws Exception
  1040. {
  1041. Class localClass = paramFieldInfo.getFieldClass();
  1042. Method localMethod = paramFieldInfo.getMethod();
  1043. String str = getGenFieldDeserializer(paramClass, paramFieldInfo);
  1044. ClassWriter localClassWriter = new ClassWriter();
  1045. Object localObject;
  1046. int i;
  1047. if (localClass == Integer.TYPE)
  1048. {
  1049. localObject = IntegerFieldDeserializer.class;
  1050. if (!paramClass.isInterface())
  1051. break label497;
  1052. i = 185;
  1053. label54: localClassWriter.visit(49, 33, str, ASMUtils.getType((Class)localObject), null);
  1054. MethodVisitor localMethodVisitor = localClassWriter.visitMethod(1, "<init>", "(" + ASMUtils.getDesc(ParserConfig.class) + ASMUtils.getDesc(Class.class) + ASMUtils.getDesc(FieldInfo.class) + ")V", null, null);
  1055. localMethodVisitor.visitVarInsn(25, 0);
  1056. localMethodVisitor.visitVarInsn(25, 1);
  1057. localMethodVisitor.visitVarInsn(25, 2);
  1058. localMethodVisitor.visitVarInsn(25, 3);
  1059. localMethodVisitor.visitMethodInsn(183, ASMUtils.getType((Class)localObject), "<init>", "(" + ASMUtils.getDesc(ParserConfig.class) + ASMUtils.getDesc(Class.class) + ASMUtils.getDesc(FieldInfo.class) + ")V");
  1060. localMethodVisitor.visitInsn(177);
  1061. localMethodVisitor.visitMaxs(4, 6);
  1062. localMethodVisitor.visitEnd();
  1063. if (localMethod != null)
  1064. {
  1065. if (localClass != Integer.TYPE)
  1066. break label505;
  1067. localObject = localClassWriter.visitMethod(1, "setValue", "(" + ASMUtils.getDesc(Object.class) + "I)V", null, null);
  1068. ((MethodVisitor)localObject).visitVarInsn(25, 1);
  1069. ((MethodVisitor)localObject).visitTypeInsn(192, ASMUtils.getType(localMethod.getDeclaringClass()));
  1070. ((MethodVisitor)localObject).visitVarInsn(21, 2);
  1071. ((MethodVisitor)localObject).visitMethodInsn(i, ASMUtils.getType(localMethod.getDeclaringClass()), localMethod.getName(), ASMUtils.getDesc(localMethod));
  1072. ((MethodVisitor)localObject).visitInsn(177);
  1073. ((MethodVisitor)localObject).visitMaxs(3, 3);
  1074. ((MethodVisitor)localObject).visitEnd();
  1075. }
  1076. }
  1077. while (true)
  1078. {
  1079. localObject = localClassWriter.toByteArray();
  1080. return (FieldDeserializer)this.classLoader.defineClassPublic(str, (byte[])localObject, 0, localObject.length).getConstructor(new Class[] { ParserConfig.class, Class.class, FieldInfo.class }).newInstance(new Object[] { paramParserConfig, paramClass, paramFieldInfo });
  1081. if (localClass == Long.TYPE)
  1082. {
  1083. localObject = LongFieldDeserializer.class;
  1084. break;
  1085. }
  1086. localObject = StringFieldDeserializer.class;
  1087. break;
  1088. label497: i = 182;
  1089. break label54;
  1090. label505: if (localClass == Long.TYPE)
  1091. {
  1092. localObject = localClassWriter.visitMethod(1, "setValue", "(" + ASMUtils.getDesc(Object.class) + "J)V", null, null);
  1093. ((MethodVisitor)localObject).visitVarInsn(25, 1);
  1094. ((MethodVisitor)localObject).visitTypeInsn(192, ASMUtils.getType(localMethod.getDeclaringClass()));
  1095. ((MethodVisitor)localObject).visitVarInsn(22, 2);
  1096. ((MethodVisitor)localObject).visitMethodInsn(i, ASMUtils.getType(localMethod.getDeclaringClass()), localMethod.getName(), ASMUtils.getDesc(localMethod));
  1097. ((MethodVisitor)localObject).visitInsn(177);
  1098. ((MethodVisitor)localObject).visitMaxs(3, 4);
  1099. ((MethodVisitor)localObject).visitEnd();
  1100. }
  1101. else
  1102. {
  1103. localObject = localClassWriter.visitMethod(1, "setValue", "(" + ASMUtils.getDesc(Object.class) + ASMUtils.getDesc(Object.class) + ")V", null, null);
  1104. ((MethodVisitor)localObject).visitVarInsn(25, 1);
  1105. ((MethodVisitor)localObject).visitTypeInsn(192, ASMUtils.getType(localMethod.getDeclaringClass()));
  1106. ((MethodVisitor)localObject).visitVarInsn(25, 2);
  1107. ((MethodVisitor)localObject).visitTypeInsn(192, ASMUtils.getType(localClass));
  1108. ((MethodVisitor)localObject).visitMethodInsn(i, ASMUtils.getType(localMethod.getDeclaringClass()), localMethod.getName(), ASMUtils.getDesc(localMethod));
  1109. ((MethodVisitor)localObject).visitInsn(177);
  1110. ((MethodVisitor)localObject).visitMaxs(3, 3);
  1111. ((MethodVisitor)localObject).visitEnd();
  1112. }
  1113. }
  1114. }
  1115. public String getGenClassName(Class<?> paramClass)
  1116. {
  1117. return "Fastjson_ASM_" + paramClass.getSimpleName() + "_" + this.seed.incrementAndGet();
  1118. }
  1119. public String getGenFieldDeserializer(Class<?> paramClass, FieldInfo paramFieldInfo)
  1120. {
  1121. paramClass = "Fastjson_ASM__Field_" + paramClass.getSimpleName();
  1122. return paramClass + "_" + paramFieldInfo.getName() + "_" + this.seed.incrementAndGet();
  1123. }
  1124. public boolean isExternalClass(Class<?> paramClass)
  1125. {
  1126. return this.classLoader.isExternalClass(paramClass);
  1127. }
  1128. static class Context
  1129. {
  1130. private final DeserializeBeanInfo beanInfo;
  1131. private String className;
  1132. private Class<?> clazz;
  1133. private List<FieldInfo> fieldInfoList;
  1134. private int variantIndex = 5;
  1135. private Map<String, Integer> variants = new HashMap();
  1136. public Context(String paramString, ParserConfig paramParserConfig, DeserializeBeanInfo paramDeserializeBeanInfo, int paramInt)
  1137. {
  1138. this.className = paramString;
  1139. this.clazz = paramDeserializeBeanInfo.getClazz();
  1140. this.variantIndex = paramInt;
  1141. this.beanInfo = paramDeserializeBeanInfo;
  1142. this.fieldInfoList = new ArrayList(paramDeserializeBeanInfo.getFieldList());
  1143. }
  1144. public DeserializeBeanInfo getBeanInfo()
  1145. {
  1146. return this.beanInfo;
  1147. }
  1148. public String getClassName()
  1149. {
  1150. return this.className;
  1151. }
  1152. public Class<?> getClazz()
  1153. {
  1154. return this.clazz;
  1155. }
  1156. public List<FieldInfo> getFieldInfoList()
  1157. {
  1158. return this.fieldInfoList;
  1159. }
  1160. public int getVariantCount()
  1161. {
  1162. return this.variantIndex;
  1163. }
  1164. public int var(String paramString)
  1165. {
  1166. if ((Integer)this.variants.get(paramString) == null)
  1167. {
  1168. Map localMap = this.variants;
  1169. int i = this.variantIndex;
  1170. this.variantIndex = (i + 1);
  1171. localMap.put(paramString, Integer.valueOf(i));
  1172. }
  1173. return ((Integer)this.variants.get(paramString)).intValue();
  1174. }
  1175. public int var(String paramString, int paramInt)
  1176. {
  1177. if ((Integer)this.variants.get(paramString) == null)
  1178. {
  1179. this.variants.put(paramString, Integer.valueOf(this.variantIndex));
  1180. this.variantIndex += paramInt;
  1181. }
  1182. return ((Integer)this.variants.get(paramString)).intValue();
  1183. }
  1184. }
  1185. }
  1186. /* Location: C:\Users\User\dex2jar-2.0\dex\qting\classes-dex2jar.jar
  1187. * Qualified Name: com.alibaba.fastjson.parser.deserializer.ASMDeserializerFactory
  1188. * JD-Core Version: 0.6.2
  1189. */