/src/test/java/com/alibaba/json/test/codegen/DepartmentCodec.java

https://github.com/alibaba/fastjson · Java · 218 lines · 190 code · 27 blank · 1 comment · 70 complexity · 25839c72c275a7d8bed15554b1b6e3cf MD5 · raw file

  1. package com.alibaba.json.test.codegen;
  2. import java.lang.reflect.Type;
  3. import com.alibaba.fastjson.parser.DefaultJSONParser;
  4. import com.alibaba.fastjson.parser.DefaultJSONParser.ResolveTask;
  5. import com.alibaba.fastjson.parser.Feature;
  6. import com.alibaba.fastjson.parser.JSONLexerBase;
  7. import com.alibaba.fastjson.parser.JSONToken;
  8. import com.alibaba.fastjson.parser.ParseContext;
  9. import com.alibaba.fastjson.parser.ParserConfig;
  10. import com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer;
  11. import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
  12. public class DepartmentCodec extends JavaBeanDeserializer implements ObjectDeserializer {
  13. private char[] name_gen_prefix__ = "\"name\":".toCharArray();
  14. private char[] root_gen_prefix__ = "\"root\":".toCharArray();
  15. private char[] type_gen_prefix__ = "\"type\":".toCharArray();
  16. private char[] id_gen_prefix__ = "\"id\":".toCharArray();
  17. private char[] leader_gen_prefix__ = "\"leader\":".toCharArray();
  18. private char[] members_gen_prefix__ = "\"members\":".toCharArray();
  19. private ObjectDeserializer name_gen_deser__;
  20. private ObjectDeserializer leader_gen_deser__;
  21. private ObjectDeserializer members_gen_list_item_deser__;
  22. private Type members_gen_list_item_type__ = com.alibaba.json.test.codegen.Employee.class;
  23. private ObjectDeserializer type_gen_deser__;
  24. public DepartmentCodec (ParserConfig config, Class clazz) {
  25. super(config, clazz);
  26. type_gen_deser__ = config.getDeserializer(com.alibaba.json.test.codegen.DepartmentType.class);
  27. }
  28. public Object createInstance(DefaultJSONParser parser, Type type) {
  29. return new Department();
  30. }
  31. public Object deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
  32. JSONLexerBase lexer = (JSONLexerBase) parser.getLexer();
  33. if (lexer.isEnabled(Feature.SortFeidFastMatch)) {
  34. return super.deserialze(parser, type, fieldName);
  35. }
  36. if (lexer.isEnabled(Feature.SupportArrayToBean)) {
  37. // deserialzeArrayMapping
  38. }
  39. if (lexer.scanType("Department") == JSONLexerBase.NOT_MATCH) {
  40. return super.deserialze(parser, type, fieldName);
  41. }
  42. ParseContext mark_context = parser.getContext();
  43. int matchedCount = 0;
  44. Department instance = new Department();
  45. ParseContext context = parser.getContext();
  46. ParseContext childContext = parser.setContext(context, instance, fieldName);
  47. if (lexer.matchStat == JSONLexerBase.END) {
  48. return instance;
  49. }
  50. int matchStat = 0;
  51. int _asm_flag_0 = 0;
  52. int id_gen = 0;
  53. com.alibaba.json.test.codegen.Employee leader_gen = null;
  54. java.util.List members_gen = null;
  55. String name_gen;
  56. if (lexer.isEnabled(Feature.InitStringFieldAsEmpty)) {
  57. name_gen = lexer.stringDefaultValue();
  58. _asm_flag_0 |= 8;
  59. } else {
  60. name_gen = null;
  61. }
  62. boolean root_gen = false;
  63. com.alibaba.json.test.codegen.DepartmentType type_gen = null;
  64. boolean endFlag = false, restFlag = false;
  65. if ((!endFlag) && (!restFlag)) {
  66. id_gen = lexer.scanFieldInt(id_gen_prefix__);
  67. if(lexer.matchStat > 0) {
  68. _asm_flag_0 |= 1;
  69. matchedCount++;
  70. }
  71. if(lexer.matchStat == JSONLexerBase.NOT_MATCH) {
  72. restFlag = true;
  73. }
  74. if(lexer.matchStat == JSONLexerBase.END) {
  75. endFlag = true;
  76. }
  77. }
  78. if ((!endFlag) && (!restFlag)) {
  79. if (lexer.matchField(leader_gen_prefix__)) {
  80. _asm_flag_0 |= 2;
  81. matchedCount++;
  82. if(parser.getResolveStatus() == DefaultJSONParser.NeedToResolve) {
  83. ResolveTask resolveTask = parser.getLastResolveTask();
  84. resolveTask.ownerContext = parser.getContext();
  85. resolveTask.fieldDeserializer = this.getFieldDeserializer("leader");
  86. parser.setResolveStatus(DefaultJSONParser.NONE);
  87. }
  88. }
  89. if(lexer.matchStat > 0) {
  90. _asm_flag_0 |= 2;
  91. matchedCount++;
  92. }
  93. if(lexer.matchStat == JSONLexerBase.NOT_MATCH) {
  94. restFlag = true;
  95. }
  96. if(lexer.matchStat == JSONLexerBase.END) {
  97. endFlag = true;
  98. }
  99. }
  100. if ((!endFlag) && (!restFlag)) {
  101. if (lexer.matchField(members_gen_prefix__)) {
  102. _asm_flag_0 |= 4;
  103. if (lexer.token() == JSONToken.NULL) {
  104. lexer.nextToken(JSONToken.COMMA);
  105. } else {
  106. if (lexer.token() == JSONToken.LBRACKET) {
  107. if(members_gen_list_item_deser__ == null) {
  108. members_gen_list_item_deser__ = parser.getConfig().getDeserializer(com.alibaba.json.test.codegen.Employee.class);
  109. }
  110. final int fastMatchToken = members_gen_list_item_deser__.getFastMatchToken();
  111. lexer.nextToken(fastMatchToken);
  112. members_gen = new java.util.ArrayList();
  113. ParseContext listContext = parser.getContext();
  114. parser.setContext(members_gen, "members");
  115. for(int i = 0; ;++i) {
  116. if (lexer.token() == JSONToken.RBRACKET) {
  117. break;
  118. }
  119. com.alibaba.json.test.codegen.Employee itemValue = members_gen_list_item_deser__.deserialze(parser, members_gen_list_item_type__, i);
  120. members_gen.add(itemValue);
  121. parser.checkListResolve(members_gen);
  122. if (lexer.token() == JSONToken.COMMA) {
  123. lexer.nextToken(fastMatchToken);
  124. }
  125. }
  126. parser.setContext(listContext);
  127. if (lexer.token() != JSONToken.RBRACKET) {
  128. restFlag = true;
  129. }
  130. lexer.nextToken(JSONToken.COMMA);
  131. } else {
  132. restFlag = true;
  133. }
  134. }
  135. }
  136. if(lexer.matchStat > 0) {
  137. _asm_flag_0 |= 4;
  138. matchedCount++;
  139. }
  140. if(lexer.matchStat == JSONLexerBase.NOT_MATCH) {
  141. restFlag = true;
  142. }
  143. if(lexer.matchStat == JSONLexerBase.END) {
  144. endFlag = true;
  145. }
  146. }
  147. if ((!endFlag) && (!restFlag)) {
  148. name_gen = lexer.scanFieldString(name_gen_prefix__);
  149. if(lexer.matchStat > 0) {
  150. _asm_flag_0 |= 8;
  151. matchedCount++;
  152. }
  153. if(lexer.matchStat == JSONLexerBase.NOT_MATCH) {
  154. restFlag = true;
  155. }
  156. if(lexer.matchStat == JSONLexerBase.END) {
  157. endFlag = true;
  158. }
  159. }
  160. if ((!endFlag) && (!restFlag)) {
  161. root_gen = lexer.scanFieldBoolean(root_gen_prefix__);
  162. if(lexer.matchStat > 0) {
  163. _asm_flag_0 |= 16;
  164. matchedCount++;
  165. }
  166. if(lexer.matchStat == JSONLexerBase.NOT_MATCH) {
  167. restFlag = true;
  168. }
  169. if(lexer.matchStat == JSONLexerBase.END) {
  170. endFlag = true;
  171. }
  172. }
  173. if ((!endFlag) && (!restFlag)) {
  174. type_gen = (com.alibaba.json.test.codegen.DepartmentType) this.scanEnum(lexer, type_gen_prefix__, type_gen_deser__);
  175. if(lexer.matchStat > 0) {
  176. _asm_flag_0 |= 32;
  177. matchedCount++;
  178. }
  179. if(lexer.matchStat == JSONLexerBase.NOT_MATCH) {
  180. restFlag = true;
  181. }
  182. if(lexer.matchStat != JSONLexerBase.END) {
  183. restFlag = true;
  184. }
  185. }
  186. if (restFlag) {
  187. return super.parseRest(parser, type, fieldName, instance, 0, new int[0]);
  188. }
  189. return instance;
  190. }
  191. }