Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
wenshao committed Apr 6, 2016
1 parent c648f81 commit b0276a0
Show file tree
Hide file tree
Showing 6 changed files with 177 additions and 177 deletions.
10 changes: 5 additions & 5 deletions src/main/java/com/alibaba/fastjson/parser/ParserConfig.java
Expand Up @@ -499,10 +499,10 @@ public ObjectDeserializer createJavaBeanDeserializer(Class<?> clazz, Type type)
if (clazz.isInterface()) {
asmEnable = false;
}
JavaBeanInfo beanInfo = JavaBeanInfo.computeSetters(clazz, type);
JavaBeanInfo beanInfo = JavaBeanInfo.build(clazz, type);


if (asmEnable && beanInfo.getFieldList().size() > 200) {
if (asmEnable && beanInfo.fields.length > 200) {
asmEnable = false;
}

Expand All @@ -511,7 +511,7 @@ public ObjectDeserializer createJavaBeanDeserializer(Class<?> clazz, Type type)
asmEnable = false;
}

for (FieldInfo fieldInfo : beanInfo.getFieldList()) {
for (FieldInfo fieldInfo : beanInfo.fields) {
if (fieldInfo.isGetOnly()) {
asmEnable = false;
break;
Expand Down Expand Up @@ -565,9 +565,9 @@ public ObjectDeserializer createJavaBeanDeserializer(Class<?> clazz, Type type)
public FieldDeserializer createFieldDeserializer(ParserConfig mapping, JavaBeanInfo beanInfo, FieldInfo fieldInfo) {
boolean asmEnable = this.asmEnable;

Class<?> clazz = beanInfo.getClazz();
Class<?> clazz = beanInfo.clazz;
if (asmEnable) {
Class<?> superClass = beanInfo.getBuilderClass();
Class<?> superClass = beanInfo.builderClass;
if (superClass == null) {
superClass = clazz;
}
Expand Down
Expand Up @@ -12,11 +12,9 @@
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeSet;
import java.util.concurrent.atomic.AtomicLong;
Expand All @@ -31,8 +29,8 @@
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.util.ASMClassLoader;
import com.alibaba.fastjson.util.ASMUtils;
import com.alibaba.fastjson.util.JavaBeanInfo;
import com.alibaba.fastjson.util.FieldInfo;
import com.alibaba.fastjson.util.JavaBeanInfo;
import com.alibaba.fastjson.util.TypeUtils;

public class ASMDeserializerFactory implements Opcodes {
Expand Down Expand Up @@ -83,7 +81,7 @@ public ObjectDeserializer createJavaBeanDeserializer(ParserConfig config, Class<
ClassWriter cw = new ClassWriter();
cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, className, "com/alibaba/fastjson/parser/deserializer/ASMJavaBeanDeserializer", null);

JavaBeanInfo beanInfo = JavaBeanInfo.computeSetters(clazz, type);
JavaBeanInfo beanInfo = JavaBeanInfo.build(clazz, type);

_init(cw, new Context(className, config, beanInfo, 3));
_createInstance(cw, new Context(className, config, beanInfo, 3));
Expand Down Expand Up @@ -148,13 +146,13 @@ void _deserialzeArrayMapping(ClassWriter cw, Context context) {

_createInstance(context, mw);

List<FieldInfo> sortedFieldInfoList = context.getBeanInfo().getSortedFieldList();
int fieldListSize = sortedFieldInfoList.size();
FieldInfo[] sortedFieldInfoList = context.beanInfo.sortedFields;
int fieldListSize = sortedFieldInfoList.length;
for (int i = 0; i < fieldListSize; ++i) {
final boolean last = (i == fieldListSize - 1);
final char seperator = last ? ']' : ',';

FieldInfo fieldInfo = sortedFieldInfoList.get(i);
FieldInfo fieldInfo = sortedFieldInfoList[i];
Class<?> fieldClass = fieldInfo.fieldClass;
Type fieldType = fieldInfo.fieldType;
if (fieldClass == byte.class //
Expand Down Expand Up @@ -280,11 +278,11 @@ void _deserialzeArrayMapping(ClassWriter cw, Context context) {
}

void _deserialze(ClassWriter cw, Context context) {
if (context.getFieldInfoList().size() == 0) {
if (context.fieldInfoList.length == 0) {
return;
}

for (FieldInfo fieldInfo : context.getFieldInfoList()) {
for (FieldInfo fieldInfo : context.fieldInfoList) {
Class<?> fieldClass = fieldInfo.fieldClass;
Type fieldType = fieldInfo.fieldType;

Expand All @@ -306,7 +304,7 @@ void _deserialze(ClassWriter cw, Context context) {
}
}

Collections.sort(context.getFieldInfoList());
context.fieldInfoList = context.beanInfo.sortedFields;

MethodVisitor mw = cw.visitMethod(ACC_PUBLIC, "deserialze"
, "(Lcom/alibaba/fastjson/parser/DefaultJSONParser;Ljava/lang/reflect/Type;Ljava/lang/Object;)Ljava/lang/Object;"
Expand Down Expand Up @@ -390,15 +388,15 @@ void _deserialze(ClassWriter cw, Context context) {
mw.visitInsn(ICONST_0); // UNKOWN
mw.visitIntInsn(ISTORE, context.var("matchStat"));

int fieldListSize = context.getFieldInfoList().size();
int fieldListSize = context.fieldInfoList.length;
for (int i = 0; i < fieldListSize; i += 32) {
mw.visitInsn(ICONST_0);
mw.visitVarInsn(ISTORE, context.var("_asm_flag_" + (i / 32)));
}

// declare and init
for (int i = 0; i < fieldListSize; ++i) {
FieldInfo fieldInfo = context.getFieldInfoList().get(i);
FieldInfo fieldInfo = context.fieldInfoList[i];
Class<?> fieldClass = fieldInfo.fieldClass;

if (fieldClass == boolean.class //
Expand Down Expand Up @@ -437,7 +435,7 @@ void _deserialze(ClassWriter cw, Context context) {
}

for (int i = 0; i < fieldListSize; ++i) {
FieldInfo fieldInfo = context.getFieldInfoList().get(i);
FieldInfo fieldInfo = context.fieldInfoList[i];
Class<?> fieldClass = fieldInfo.fieldClass;
Type fieldType = fieldInfo.fieldType;

Expand Down Expand Up @@ -687,14 +685,14 @@ private void _batchSet(Context context, MethodVisitor mw) {
}

private void _batchSet(Context context, MethodVisitor mw, boolean flag) {
for (int i = 0, size = context.getFieldInfoList().size(); i < size; ++i) {
for (int i = 0, size = context.fieldInfoList.length; i < size; ++i) {
Label notSet_ = new Label();

if (flag) {
_isFlag(mw, context, i, notSet_);
}

FieldInfo fieldInfo = context.getFieldInfoList().get(i);
FieldInfo fieldInfo = context.fieldInfoList[i];
_loadAndSet(context, mw, fieldInfo);

if (flag) {
Expand Down Expand Up @@ -1232,24 +1230,20 @@ static class Context {
private Class<?> clazz;
private final JavaBeanInfo beanInfo;
private String className;
private List<FieldInfo> fieldInfoList;
private FieldInfo[] fieldInfoList;

public Context(String className, ParserConfig config, JavaBeanInfo beanInfo, int initVariantIndex){
this.className = className;
this.clazz = beanInfo.getClazz();
this.clazz = beanInfo.clazz;
this.variantIndex = initVariantIndex;
this.beanInfo = beanInfo;
fieldInfoList = new ArrayList<FieldInfo>(beanInfo.getFieldList());
fieldInfoList = beanInfo.fields;
}

public String getClassName() {
return className;
}

public List<FieldInfo> getFieldInfoList() {
return fieldInfoList;
}

public JavaBeanInfo getBeanInfo() {
return beanInfo;
}
Expand All @@ -1259,7 +1253,7 @@ public Class<?> getClazz() {
}

public Class<?> getInstClass() {
Class<?> instClass = beanInfo.getBuilderClass();
Class<?> instClass = beanInfo.builderClass;
if (instClass == null) {
instClass = clazz;
}
Expand Down Expand Up @@ -1292,17 +1286,17 @@ public int var(String name) {
}

private void _init(ClassWriter cw, Context context) {
for (int i = 0, size = context.getFieldInfoList().size(); i < size; ++i) {
FieldInfo fieldInfo = context.getFieldInfoList().get(i);
for (int i = 0, size = context.fieldInfoList.length; i < size; ++i) {
FieldInfo fieldInfo = context.fieldInfoList[i];

// public FieldVisitor visitField(final int access, final String name, final String desc, final String
// signature, final Object value) {
FieldVisitor fw = cw.visitField(ACC_PUBLIC, fieldInfo.name + "_asm_prefix__", "[C");
fw.visitEnd();
}

for (int i = 0, size = context.getFieldInfoList().size(); i < size; ++i) {
FieldInfo fieldInfo = context.getFieldInfoList().get(i);
for (int i = 0, size = context.fieldInfoList.length; i < size; ++i) {
FieldInfo fieldInfo = context.fieldInfoList[i];
Class<?> fieldClass = fieldInfo.fieldClass;

if (fieldClass.isPrimitive()) {
Expand Down Expand Up @@ -1339,8 +1333,8 @@ private void _init(ClassWriter cw, Context context) {
mw.visitInsn(POP);

// init fieldNamePrefix
for (int i = 0, size = context.getFieldInfoList().size(); i < size; ++i) {
FieldInfo fieldInfo = context.getFieldInfoList().get(i);
for (int i = 0, size = context.fieldInfoList.length; i < size; ++i) {
FieldInfo fieldInfo = context.fieldInfoList[i];

mw.visitVarInsn(ALOAD, 0);
mw.visitLdcInsn("\"" + fieldInfo.name + "\":"); // public char[] toCharArray()
Expand Down
Expand Up @@ -15,7 +15,7 @@

public abstract class FieldDeserializer {

protected final FieldInfo fieldInfo;
public final FieldInfo fieldInfo;

protected final Class<?> clazz;

Expand Down
Expand Up @@ -32,6 +32,8 @@ public class JavaBeanDeserializer implements ObjectDeserializer {

private final List<FieldDeserializer> fieldDeserializers = new ArrayList<FieldDeserializer>();
private final List<FieldDeserializer> sortedFieldDeserializers = new ArrayList<FieldDeserializer>();


private final Class<?> clazz;

private JavaBeanInfo beanInfo;
Expand All @@ -43,13 +45,13 @@ public JavaBeanDeserializer(ParserConfig config, Class<?> clazz){
public JavaBeanDeserializer(ParserConfig config, Class<?> clazz, Type type){
this.clazz = clazz;

beanInfo = JavaBeanInfo.computeSetters(clazz, type);
beanInfo = JavaBeanInfo.build(clazz, type);

for (FieldInfo fieldInfo : beanInfo.getFieldList()) {
for (FieldInfo fieldInfo : beanInfo.fields) {
addFieldDeserializer(config, clazz, fieldInfo);
}

for (FieldInfo fieldInfo : beanInfo.getSortedFieldList()) {
for (FieldInfo fieldInfo : beanInfo.sortedFields) {
FieldDeserializer fieldDeserializer = feildDeserializerMap.get(fieldInfo.name.intern());
sortedFieldDeserializers.add(fieldDeserializer);
}
Expand Down Expand Up @@ -119,7 +121,7 @@ public Object createInstance(DefaultJSONParser parser, Type type) {
}

if (parser.isEnabled(Feature.InitStringFieldAsEmpty)) {
for (FieldInfo fieldInfo : beanInfo.getFieldList()) {
for (FieldInfo fieldInfo : beanInfo.fields) {
if (fieldInfo.fieldClass == String.class) {
try {
fieldInfo.set(object, "");
Expand Down Expand Up @@ -217,7 +219,7 @@ public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName, O
}

if (token == JSONToken.LBRACKET) {
boolean isSupportArrayToBean = (beanInfo.getParserFeatures() & Feature.SupportArrayToBean.mask) != 0
boolean isSupportArrayToBean = (beanInfo.parserFeatures & Feature.SupportArrayToBean.mask) != 0
|| lexer.isEnabled(Feature.SupportArrayToBean);
if (isSupportArrayToBean) {
return deserialzeArrayMapping(parser, type, fieldName, object);
Expand Down Expand Up @@ -482,11 +484,11 @@ public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName, O
return (T) object;
}

List<FieldInfo> fieldInfoList = beanInfo.getFieldList();
int size = fieldInfoList.size();
FieldInfo[] fieldInfoList = beanInfo.fields;
int size = fieldInfoList.length;
Object[] params = new Object[size];
for (int i = 0; i < size; ++i) {
FieldInfo fieldInfo = fieldInfoList.get(i);
FieldInfo fieldInfo = fieldInfoList[i];
params[i] = fieldValues.get(fieldInfo.name);
}

Expand Down Expand Up @@ -609,6 +611,6 @@ public List<FieldDeserializer> getSortedFieldDeserializers() {
}

public final boolean isSupportArrayToBean(JSONLexer lexer) {
return Feature.isEnabled(beanInfo.getParserFeatures(), Feature.SupportArrayToBean) || lexer.isEnabled(Feature.SupportArrayToBean);
return Feature.isEnabled(beanInfo.parserFeatures, Feature.SupportArrayToBean) || lexer.isEnabled(Feature.SupportArrayToBean);
}
}

0 comments on commit b0276a0

Please sign in to comment.