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; } }