PageRenderTime 57ms CodeModel.GetById 21ms RepoModel.GetById 1ms 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

Large files files are truncated, but you can click here to view the full 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);

Large files files are truncated, but you can click here to view the full file