Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
wenshao committed Apr 18, 2016
1 parent 51ee6ad commit de77212
Show file tree
Hide file tree
Showing 8 changed files with 54 additions and 122 deletions.
50 changes: 5 additions & 45 deletions src/main/java/com/alibaba/fastjson/JSON.java
Expand Up @@ -41,19 +41,11 @@
import com.alibaba.fastjson.parser.deserializer.ExtraTypeProvider; import com.alibaba.fastjson.parser.deserializer.ExtraTypeProvider;
import com.alibaba.fastjson.parser.deserializer.FieldTypeResolver; import com.alibaba.fastjson.parser.deserializer.FieldTypeResolver;
import com.alibaba.fastjson.parser.deserializer.ParseProcess; import com.alibaba.fastjson.parser.deserializer.ParseProcess;
import com.alibaba.fastjson.serializer.AfterFilter;
import com.alibaba.fastjson.serializer.BeforeFilter;
import com.alibaba.fastjson.serializer.ContextValueFilter;
import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.LabelFilter;
import com.alibaba.fastjson.serializer.NameFilter;
import com.alibaba.fastjson.serializer.PropertyFilter;
import com.alibaba.fastjson.serializer.PropertyPreFilter;
import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializeFilter; import com.alibaba.fastjson.serializer.SerializeFilter;
import com.alibaba.fastjson.serializer.SerializeWriter; import com.alibaba.fastjson.serializer.SerializeWriter;
import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.ValueFilter;
import com.alibaba.fastjson.util.FieldInfo; import com.alibaba.fastjson.util.FieldInfo;
import com.alibaba.fastjson.util.IOUtils; import com.alibaba.fastjson.util.IOUtils;
import com.alibaba.fastjson.util.TypeUtils; import com.alibaba.fastjson.util.TypeUtils;
Expand Down Expand Up @@ -242,8 +234,10 @@ public static <T> T parseObject(String input, Type clazz, ParserConfig config, P
return null; return null;
} }


for (Feature feature : features) { if (features != null) {
featureValues = Feature.config(featureValues, feature, true); for (Feature feature : features) {
featureValues = Feature.config(featureValues, feature, true);
}
} }


DefaultJSONParser parser = new DefaultJSONParser(input, config, featureValues); DefaultJSONParser parser = new DefaultJSONParser(input, config, featureValues);
Expand Down Expand Up @@ -487,41 +481,7 @@ public static String toJSONString(Object object, //


if (filters != null) { if (filters != null) {
for (SerializeFilter filter : filters) { for (SerializeFilter filter : filters) {
if (filter == null) { serializer.addFilter(filter);
continue;
}

if (filter instanceof PropertyPreFilter) {
serializer.getPropertyPreFilters().add((PropertyPreFilter) filter);
}

if (filter instanceof NameFilter) {
serializer.getNameFilters().add((NameFilter) filter);
}

if (filter instanceof ValueFilter) {
serializer.getValueFilters().add((ValueFilter) filter);
}

if (filter instanceof ContextValueFilter) {
serializer.getContextValueFilters().add((ContextValueFilter) filter);
}

if (filter instanceof PropertyFilter) {
serializer.getPropertyFilters().add((PropertyFilter) filter);
}

if (filter instanceof BeforeFilter) {
serializer.getBeforeFilters().add((BeforeFilter) filter);
}

if (filter instanceof AfterFilter) {
serializer.getAfterFilters().add((AfterFilter) filter);
}

if (filter instanceof LabelFilter) {
serializer.getLabelFilters().add((LabelFilter) filter);
}
} }
} }


Expand Down
Expand Up @@ -42,12 +42,11 @@
public class ASMDeserializerFactory implements Opcodes { public class ASMDeserializerFactory implements Opcodes {


public final ASMClassLoader classLoader; public final ASMClassLoader classLoader;
protected final Map<String, Class<?>> classMap = new HashMap<String, Class<?>>(); protected final AtomicLong seed = new AtomicLong();
protected final AtomicLong seed = new AtomicLong();

final static String DefaultJSONParser = type(DefaultJSONParser.class);
final static String DefaultJSONParser = type(DefaultJSONParser.class); final static String JSONLexerBase = type(JSONLexerBase.class);
final static String JSONLexerBase = type(JSONLexerBase.class); final static String JSONToken = type(JSONToken.class);
final static String JSONToken = type(JSONToken.class);


public ASMDeserializerFactory(ClassLoader parentClassLoader){ public ASMDeserializerFactory(ClassLoader parentClassLoader){
classLoader = parentClassLoader instanceof ASMClassLoader // classLoader = parentClassLoader instanceof ASMClassLoader //
Expand Down Expand Up @@ -102,11 +101,7 @@ public ObjectDeserializer createJavaBeanDeserializer(ParserConfig config, Class<
} }


private Class<?> defineClassPublic(String name, byte[] b, int off, int len) { private Class<?> defineClassPublic(String name, byte[] b, int off, int len) {
if (classMap.containsKey(name)) { return classLoader.defineClassPublic(name, b, off, len);
return classMap.get(name);
} else {
return classLoader.defineClassPublic(name, b, off, len);
}
} }


void _setFlag(MethodVisitor mw, Context context, int i) { void _setFlag(MethodVisitor mw, Context context, int i) {
Expand Down
Expand Up @@ -13,7 +13,7 @@ public abstract class ASMJavaBeanDeserializer implements ObjectDeserializer {
private JavaBeanDeserializer serializer; private JavaBeanDeserializer serializer;


public ASMJavaBeanDeserializer(ParserConfig mapping, Class<?> clazz){ public ASMJavaBeanDeserializer(ParserConfig mapping, Class<?> clazz){
serializer = new JavaBeanDeserializer(mapping, clazz); serializer = new JavaBeanDeserializer(mapping, clazz, clazz);
} }


public abstract Object createInstance(DefaultJSONParser parser, Type type); public abstract Object createInstance(DefaultJSONParser parser, Type type);
Expand Down
Expand Up @@ -31,10 +31,6 @@ public class JavaBeanDeserializer implements ObjectDeserializer {
protected final Class<?> clazz; protected final Class<?> clazz;
public final JavaBeanInfo beanInfo; public final JavaBeanInfo beanInfo;


public JavaBeanDeserializer(ParserConfig config, Class<?> clazz){
this(config, clazz, clazz);
}

public JavaBeanDeserializer(ParserConfig config, Class<?> clazz, Type type){ public JavaBeanDeserializer(ParserConfig config, Class<?> clazz, Type type){
this.clazz = clazz; this.clazz = clazz;
beanInfo = JavaBeanInfo.build(clazz, type); beanInfo = JavaBeanInfo.build(clazz, type);
Expand Down
Expand Up @@ -17,7 +17,7 @@
public class ThrowableDeserializer extends JavaBeanDeserializer { public class ThrowableDeserializer extends JavaBeanDeserializer {


public ThrowableDeserializer(ParserConfig mapping, Class<?> clazz){ public ThrowableDeserializer(ParserConfig mapping, Class<?> clazz){
super(mapping, clazz); super(mapping, clazz, clazz);
} }


@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
Expand Down
Expand Up @@ -36,7 +36,7 @@ public class FieldSerializer implements Comparable<FieldSerializer> {
private String single_quoted_fieldPrefix; private String single_quoted_fieldPrefix;
private String un_quoted_fieldPrefix; private String un_quoted_fieldPrefix;


protected BeanContext fieldContext; protected BeanContext fieldContext;


private String format; private String format;
protected boolean writeNumberAsZero = false; protected boolean writeNumberAsZero = false;
Expand Down
38 changes: 38 additions & 0 deletions src/main/java/com/alibaba/fastjson/serializer/JSONSerializer.java
Expand Up @@ -527,4 +527,42 @@ public boolean applyLabel(String label) {


return true; return true;
} }

public void addFilter(SerializeFilter filter) {
if (filter == null) {
return;
}

if (filter instanceof PropertyPreFilter) {
this.getPropertyPreFilters().add((PropertyPreFilter) filter);
}

if (filter instanceof NameFilter) {
this.getNameFilters().add((NameFilter) filter);
}

if (filter instanceof ValueFilter) {
this.getValueFilters().add((ValueFilter) filter);
}

if (filter instanceof ContextValueFilter) {
this.getContextValueFilters().add((ContextValueFilter) filter);
}

if (filter instanceof PropertyFilter) {
this.getPropertyFilters().add((PropertyFilter) filter);
}

if (filter instanceof BeforeFilter) {
this.getBeforeFilters().add((BeforeFilter) filter);
}

if (filter instanceof AfterFilter) {
this.getAfterFilters().add((AfterFilter) filter);
}

if (filter instanceof LabelFilter) {
this.getLabelFilters().add((LabelFilter) filter);
}
}
} }
Expand Up @@ -19,17 +19,9 @@
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.parser.ParserConfig; import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.serializer.AfterFilter;
import com.alibaba.fastjson.serializer.BeforeFilter;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.NameFilter;
import com.alibaba.fastjson.serializer.PropertyFilter;
import com.alibaba.fastjson.serializer.PropertyPreFilter;
import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializeFilter; import com.alibaba.fastjson.serializer.SerializeFilter;
import com.alibaba.fastjson.serializer.SerializeWriter;
import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.ValueFilter;
import com.alibaba.fastjson.util.IOUtils; import com.alibaba.fastjson.util.IOUtils;


/** /**
Expand Down Expand Up @@ -107,51 +99,6 @@ protected boolean hasMatchingMediaType(MediaType mediaType) {
return true; return true;
} }


public String toJSONString(Object object, SerializeFilter filter, SerializerFeature[] features) {
SerializeWriter out = new SerializeWriter();

try {
JSONSerializer serializer = new JSONSerializer(out, serializeConfig);
if (features != null) {
for (com.alibaba.fastjson.serializer.SerializerFeature feature : features) {
serializer.config(feature, true);
}
}

if (filter != null) {
if (filter instanceof PropertyPreFilter) {
serializer.getPropertyPreFilters().add((PropertyPreFilter) filter);
}

if (filter instanceof NameFilter) {
serializer.getNameFilters().add((NameFilter) filter);
}

if (filter instanceof ValueFilter) {
serializer.getValueFilters().add((ValueFilter) filter);
}

if (filter instanceof PropertyFilter) {
serializer.getPropertyFilters().add((PropertyFilter) filter);
}

if (filter instanceof BeforeFilter) {
serializer.getBeforeFilters().add((BeforeFilter) filter);
}

if (filter instanceof AfterFilter) {
serializer.getAfterFilters().add((AfterFilter) filter);
}
}

serializer.write(object);

return out.toString();
} finally {
out.close();
}
}

/* /*
* /********************************************************** /* Partial * /********************************************************** /* Partial
* MessageBodyWriter impl * MessageBodyWriter impl
Expand Down Expand Up @@ -200,7 +147,7 @@ public void writeTo(Object t, Class<?> type, Type genericType, Annotation[] anno
filter = serializeFilters.get(type); filter = serializeFilters.get(type);
} }


String jsonStr = toJSONString(t, filter, serializerFeatures); String jsonStr = JSON.toJSONString(t, filter, serializerFeatures);
if (jsonStr != null) { if (jsonStr != null) {
entityStream.write(jsonStr.getBytes()); entityStream.write(jsonStr.getBytes());
} }
Expand Down Expand Up @@ -240,11 +187,7 @@ public Object readFrom(Class<Object> type, Type genericType, Annotation[] annota
return null; return null;
} }


if (features == null) { return JSON.parseObject(input, type, parserConfig, JSON.DEFAULT_PARSER_FEATURE, features);
return JSON.parseObject(input, type, parserConfig, JSON.DEFAULT_PARSER_FEATURE);
} else {
return JSON.parseObject(input, type, parserConfig, JSON.DEFAULT_PARSER_FEATURE, features);
}
} }


} }

0 comments on commit de77212

Please sign in to comment.