/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
- package com.alibaba.json.test.codegen;
- import java.lang.reflect.Type;
- import com.alibaba.fastjson.parser.DefaultJSONParser;
- import com.alibaba.fastjson.parser.DefaultJSONParser.ResolveTask;
- import com.alibaba.fastjson.parser.Feature;
- import com.alibaba.fastjson.parser.JSONLexerBase;
- import com.alibaba.fastjson.parser.JSONToken;
- import com.alibaba.fastjson.parser.ParseContext;
- import com.alibaba.fastjson.parser.ParserConfig;
- import com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer;
- import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
- public class DepartmentCodec extends JavaBeanDeserializer implements ObjectDeserializer {
- private char[] name_gen_prefix__ = "\"name\":".toCharArray();
- private char[] root_gen_prefix__ = "\"root\":".toCharArray();
- private char[] type_gen_prefix__ = "\"type\":".toCharArray();
- private char[] id_gen_prefix__ = "\"id\":".toCharArray();
- private char[] leader_gen_prefix__ = "\"leader\":".toCharArray();
- private char[] members_gen_prefix__ = "\"members\":".toCharArray();
-
- private ObjectDeserializer name_gen_deser__;
- private ObjectDeserializer leader_gen_deser__;
- private ObjectDeserializer members_gen_list_item_deser__;
- private Type members_gen_list_item_type__ = com.alibaba.json.test.codegen.Employee.class;
- private ObjectDeserializer type_gen_deser__;
-
- public DepartmentCodec (ParserConfig config, Class clazz) {
- super(config, clazz);
- type_gen_deser__ = config.getDeserializer(com.alibaba.json.test.codegen.DepartmentType.class);
- }
-
- public Object createInstance(DefaultJSONParser parser, Type type) {
- return new Department();
-
- }
- public Object deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
- JSONLexerBase lexer = (JSONLexerBase) parser.getLexer();
-
- if (lexer.isEnabled(Feature.SortFeidFastMatch)) {
- return super.deserialze(parser, type, fieldName);
- }
-
- if (lexer.isEnabled(Feature.SupportArrayToBean)) {
- // deserialzeArrayMapping
- }
-
- if (lexer.scanType("Department") == JSONLexerBase.NOT_MATCH) {
- return super.deserialze(parser, type, fieldName);
- }
-
- ParseContext mark_context = parser.getContext();
- int matchedCount = 0;
- Department instance = new Department();
-
- ParseContext context = parser.getContext();
- ParseContext childContext = parser.setContext(context, instance, fieldName);
-
- if (lexer.matchStat == JSONLexerBase.END) {
- return instance;
- }
-
- int matchStat = 0;
- int _asm_flag_0 = 0;
- int id_gen = 0;
- com.alibaba.json.test.codegen.Employee leader_gen = null;
- java.util.List members_gen = null;
- String name_gen;
- if (lexer.isEnabled(Feature.InitStringFieldAsEmpty)) {
- name_gen = lexer.stringDefaultValue();
- _asm_flag_0 |= 8;
- } else {
- name_gen = null;
- }
- boolean root_gen = false;
- com.alibaba.json.test.codegen.DepartmentType type_gen = null;
- boolean endFlag = false, restFlag = false;
-
- if ((!endFlag) && (!restFlag)) {
- id_gen = lexer.scanFieldInt(id_gen_prefix__);
- if(lexer.matchStat > 0) {
- _asm_flag_0 |= 1;
- matchedCount++;
- }
- if(lexer.matchStat == JSONLexerBase.NOT_MATCH) {
- restFlag = true;
- }
- if(lexer.matchStat == JSONLexerBase.END) {
- endFlag = true;
- }
-
- }
- if ((!endFlag) && (!restFlag)) {
- if (lexer.matchField(leader_gen_prefix__)) {
- _asm_flag_0 |= 2;
- matchedCount++;
- if(parser.getResolveStatus() == DefaultJSONParser.NeedToResolve) {
- ResolveTask resolveTask = parser.getLastResolveTask();
- resolveTask.ownerContext = parser.getContext();
- resolveTask.fieldDeserializer = this.getFieldDeserializer("leader");
- parser.setResolveStatus(DefaultJSONParser.NONE);
- }
- }
- if(lexer.matchStat > 0) {
- _asm_flag_0 |= 2;
- matchedCount++;
- }
- if(lexer.matchStat == JSONLexerBase.NOT_MATCH) {
- restFlag = true;
- }
- if(lexer.matchStat == JSONLexerBase.END) {
- endFlag = true;
- }
-
- }
- if ((!endFlag) && (!restFlag)) {
- if (lexer.matchField(members_gen_prefix__)) {
- _asm_flag_0 |= 4;
- if (lexer.token() == JSONToken.NULL) {
- lexer.nextToken(JSONToken.COMMA);
- } else {
- if (lexer.token() == JSONToken.LBRACKET) {
- if(members_gen_list_item_deser__ == null) {
- members_gen_list_item_deser__ = parser.getConfig().getDeserializer(com.alibaba.json.test.codegen.Employee.class);
- }
- final int fastMatchToken = members_gen_list_item_deser__.getFastMatchToken();
- lexer.nextToken(fastMatchToken);
- members_gen = new java.util.ArrayList();
- ParseContext listContext = parser.getContext();
- parser.setContext(members_gen, "members");
-
- for(int i = 0; ;++i) {
- if (lexer.token() == JSONToken.RBRACKET) {
- break;
- }
- com.alibaba.json.test.codegen.Employee itemValue = members_gen_list_item_deser__.deserialze(parser, members_gen_list_item_type__, i);
- members_gen.add(itemValue);
- parser.checkListResolve(members_gen);
- if (lexer.token() == JSONToken.COMMA) {
- lexer.nextToken(fastMatchToken);
- }
- }
- parser.setContext(listContext);
- if (lexer.token() != JSONToken.RBRACKET) {
- restFlag = true;
- }
- lexer.nextToken(JSONToken.COMMA);
-
- } else {
- restFlag = true;
- }
- }
- }
- if(lexer.matchStat > 0) {
- _asm_flag_0 |= 4;
- matchedCount++;
- }
- if(lexer.matchStat == JSONLexerBase.NOT_MATCH) {
- restFlag = true;
- }
- if(lexer.matchStat == JSONLexerBase.END) {
- endFlag = true;
- }
-
- }
- if ((!endFlag) && (!restFlag)) {
- name_gen = lexer.scanFieldString(name_gen_prefix__);
- if(lexer.matchStat > 0) {
- _asm_flag_0 |= 8;
- matchedCount++;
- }
- if(lexer.matchStat == JSONLexerBase.NOT_MATCH) {
- restFlag = true;
- }
- if(lexer.matchStat == JSONLexerBase.END) {
- endFlag = true;
- }
-
- }
- if ((!endFlag) && (!restFlag)) {
- root_gen = lexer.scanFieldBoolean(root_gen_prefix__);
- if(lexer.matchStat > 0) {
- _asm_flag_0 |= 16;
- matchedCount++;
- }
- if(lexer.matchStat == JSONLexerBase.NOT_MATCH) {
- restFlag = true;
- }
- if(lexer.matchStat == JSONLexerBase.END) {
- endFlag = true;
- }
-
- }
- if ((!endFlag) && (!restFlag)) {
- type_gen = (com.alibaba.json.test.codegen.DepartmentType) this.scanEnum(lexer, type_gen_prefix__, type_gen_deser__);
- if(lexer.matchStat > 0) {
- _asm_flag_0 |= 32;
- matchedCount++;
- }
- if(lexer.matchStat == JSONLexerBase.NOT_MATCH) {
- restFlag = true;
- }
- if(lexer.matchStat != JSONLexerBase.END) {
- restFlag = true;
- }
-
- }
-
- if (restFlag) {
- return super.parseRest(parser, type, fieldName, instance, 0, new int[0]);
- }
-
- return instance;
-
- }
- }