Skip to content

Commit

Permalink
decrement footprint
Browse files Browse the repository at this point in the history
  • Loading branch information
wenshao committed Apr 3, 2016
1 parent 3bd5280 commit d37a96a
Show file tree
Hide file tree
Showing 20 changed files with 88 additions and 158 deletions.
9 changes: 3 additions & 6 deletions src/main/java/com/alibaba/fastjson/parser/ParserConfig.java
Expand Up @@ -79,8 +79,6 @@
import com.alibaba.fastjson.parser.deserializer.EnumDeserializer; import com.alibaba.fastjson.parser.deserializer.EnumDeserializer;
import com.alibaba.fastjson.parser.deserializer.FieldDeserializer; import com.alibaba.fastjson.parser.deserializer.FieldDeserializer;
import com.alibaba.fastjson.parser.deserializer.IntegerFieldDeserializer; import com.alibaba.fastjson.parser.deserializer.IntegerFieldDeserializer;
import com.alibaba.fastjson.parser.deserializer.JSONArrayDeserializer;
import com.alibaba.fastjson.parser.deserializer.JSONObjectDeserializer;
import com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer; import com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer;
import com.alibaba.fastjson.parser.deserializer.JavaObjectDeserializer; import com.alibaba.fastjson.parser.deserializer.JavaObjectDeserializer;
import com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec; import com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec;
Expand All @@ -106,7 +104,6 @@
import com.alibaba.fastjson.serializer.CollectionCodec; import com.alibaba.fastjson.serializer.CollectionCodec;
import com.alibaba.fastjson.serializer.CurrencyCodec; import com.alibaba.fastjson.serializer.CurrencyCodec;
import com.alibaba.fastjson.serializer.DateCodec; import com.alibaba.fastjson.serializer.DateCodec;
import com.alibaba.fastjson.serializer.DateFormatCodec;
import com.alibaba.fastjson.serializer.FileCodec; import com.alibaba.fastjson.serializer.FileCodec;
import com.alibaba.fastjson.serializer.FloatCodec; import com.alibaba.fastjson.serializer.FloatCodec;
import com.alibaba.fastjson.serializer.InetAddressCodec; import com.alibaba.fastjson.serializer.InetAddressCodec;
Expand Down Expand Up @@ -222,15 +219,15 @@ private ParserConfig(ASMDeserializerFactory asmFactory, ClassLoader parentClassL
primitiveClasses.add(java.sql.Time.class); primitiveClasses.add(java.sql.Time.class);
primitiveClasses.add(java.sql.Timestamp.class); primitiveClasses.add(java.sql.Timestamp.class);


derializers.put(SimpleDateFormat.class, DateFormatCodec.instance); derializers.put(SimpleDateFormat.class, MiscCodec.instance);
derializers.put(java.sql.Timestamp.class, SqlDateDeserializer.instance_timestamp); derializers.put(java.sql.Timestamp.class, SqlDateDeserializer.instance_timestamp);
derializers.put(java.sql.Date.class, SqlDateDeserializer.instance); derializers.put(java.sql.Date.class, SqlDateDeserializer.instance);
derializers.put(java.sql.Time.class, TimeDeserializer.instance); derializers.put(java.sql.Time.class, TimeDeserializer.instance);
derializers.put(java.util.Date.class, DateCodec.instance); derializers.put(java.util.Date.class, DateCodec.instance);
derializers.put(Calendar.class, CalendarCodec.instance); derializers.put(Calendar.class, CalendarCodec.instance);


derializers.put(JSONObject.class, JSONObjectDeserializer.instance); derializers.put(JSONObject.class, MapCodec.instance);
derializers.put(JSONArray.class, JSONArrayDeserializer.instance); derializers.put(JSONArray.class, CollectionCodec.instance);


derializers.put(Map.class, MapCodec.instance); derializers.put(Map.class, MapCodec.instance);
derializers.put(HashMap.class, MapCodec.instance); derializers.put(HashMap.class, MapCodec.instance);
Expand Down

This file was deleted.

This file was deleted.

Expand Up @@ -26,6 +26,7 @@
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.TreeSet; import java.util.TreeSet;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.parser.JSONToken; import com.alibaba.fastjson.parser.JSONToken;
Expand Down Expand Up @@ -116,6 +117,12 @@ public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
parser.getLexer().nextToken(JSONToken.COMMA); parser.getLexer().nextToken(JSONToken.COMMA);
return null; return null;
} }

if (type == JSONArray.class) {
JSONArray array = new JSONArray();
parser.parseArray(array);
return (T) array;
}


Class<?> rawClass = getRawClass(type); Class<?> rawClass = getRawClass(type);


Expand Down
82 changes: 0 additions & 82 deletions src/main/java/com/alibaba/fastjson/serializer/DateFormatCodec.java

This file was deleted.

6 changes: 5 additions & 1 deletion src/main/java/com/alibaba/fastjson/serializer/MapCodec.java
Expand Up @@ -34,11 +34,11 @@
import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.parser.DefaultJSONParser.ResolveTask;
import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.parser.JSONLexer; import com.alibaba.fastjson.parser.JSONLexer;
import com.alibaba.fastjson.parser.JSONToken; import com.alibaba.fastjson.parser.JSONToken;
import com.alibaba.fastjson.parser.ParseContext; import com.alibaba.fastjson.parser.ParseContext;
import com.alibaba.fastjson.parser.DefaultJSONParser.ResolveTask;
import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
import com.alibaba.fastjson.util.TypeUtils; import com.alibaba.fastjson.util.TypeUtils;


Expand Down Expand Up @@ -224,6 +224,10 @@ public void write(JSONSerializer serializer, Object object, Object fieldName, Ty


@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) { public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
if (type == JSONObject.class) {
return (T) parser.parseObject();
}

final JSONLexer lexer = parser.getLexer(); final JSONLexer lexer = parser.getLexer();
if (lexer.token() == JSONToken.NULL) { if (lexer.token() == JSONToken.NULL) {
lexer.nextToken(JSONToken.COMMA); lexer.nextToken(JSONToken.COMMA);
Expand Down
60 changes: 57 additions & 3 deletions src/main/java/com/alibaba/fastjson/serializer/MiscCodec.java
Expand Up @@ -20,12 +20,15 @@
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URI; import java.net.URI;
import java.net.URL; import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Locale; import java.util.Locale;
import java.util.UUID; import java.util.UUID;
import java.util.regex.Pattern; import java.util.regex.Pattern;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.parser.DefaultJSONParser; import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.parser.JSONLexer;
import com.alibaba.fastjson.parser.JSONToken; import com.alibaba.fastjson.parser.JSONToken;
import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;


Expand All @@ -38,18 +41,65 @@ public class MiscCodec implements ObjectSerializer, ObjectDeserializer {


public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
int features) throws IOException { int features) throws IOException {
SerializeWriter out = serializer.out;

if (object == null) { if (object == null) {
serializer.writeNull(); out.writeNull();
return; return;
} }


if (object.getClass() == SimpleDateFormat.class) {
String pattern = ((SimpleDateFormat) object).toPattern();

if (out.isEnabled(SerializerFeature.WriteClassName)) {
if (object.getClass() != fieldType) {
out.write('{');
out.writeFieldName(JSON.DEFAULT_TYPE_KEY);
serializer.write(object.getClass().getName());
out.writeFieldValue(',', "val", pattern);
out.write('}');
return;
}
}

out.writeString(pattern);

return;
}

serializer.write(object.toString()); serializer.write(object.toString());
} }


@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> T deserialze(DefaultJSONParser parser, Type clazz, Object fieldName) { public <T> T deserialze(DefaultJSONParser parser, Type clazz, Object fieldName) {


String strVal = (String) parser.parse(); JSONLexer lexer = parser.lexer;

Object objVal;

if (parser.resolveStatus == DefaultJSONParser.TypeNameRedirect) {
parser.resolveStatus = DefaultJSONParser.NONE;
parser.accept(JSONToken.COMMA);

if (lexer.token() == JSONToken.LITERAL_STRING) {
if (!"val".equals(lexer.stringVal())) {
throw new JSONException("syntax error");
}
lexer.nextToken();
} else {
throw new JSONException("syntax error");
}

parser.accept(JSONToken.COLON);

objVal = parser.parse();

parser.accept(JSONToken.RBRACE);
} else {
objVal = parser.parse();
}

String strVal = (String) objVal;


if (strVal == null || strVal.length() == 0) { if (strVal == null || strVal.length() == 0) {
return null; return null;
Expand Down Expand Up @@ -89,6 +139,10 @@ public <T> T deserialze(DefaultJSONParser parser, Type clazz, Object fieldName)
return (T) new Locale(items[0], items[1], items[2]); return (T) new Locale(items[0], items[1], items[2]);
} }


if (clazz == SimpleDateFormat.class) {
return (T) new SimpleDateFormat(strVal);
}

throw new JSONException("MiscCodec not support " + clazz); throw new JSONException("MiscCodec not support " + clazz);
} }


Expand Down
Expand Up @@ -195,7 +195,7 @@ public SerializeConfig(int tableSize) {
put(Object[].class, ObjectArrayCodec.instance); put(Object[].class, ObjectArrayCodec.instance);
put(Class.class, ClassCodec.instance); put(Class.class, ClassCodec.instance);


put(SimpleDateFormat.class, DateFormatCodec.instance); put(SimpleDateFormat.class, MiscCodec.instance);
put(Locale.class, MiscCodec.instance); put(Locale.class, MiscCodec.instance);
put(Currency.class, CurrencyCodec.instance); put(Currency.class, CurrencyCodec.instance);
put(TimeZone.class, TimeZoneCodec.instance); put(TimeZone.class, TimeZoneCodec.instance);
Expand Down
6 changes: 3 additions & 3 deletions src/test/java/com/alibaba/json/bvt/bug/Bug_for_lenolix_7.java
Expand Up @@ -3,11 +3,11 @@
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;


import junit.framework.TestCase;

import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.json.bvt.parser.GenericTest.Address; import com.alibaba.json.bvt.parser.deser.generic.GenericTest4.Address;

import junit.framework.TestCase;


public class Bug_for_lenolix_7 extends TestCase { public class Bug_for_lenolix_7 extends TestCase {


Expand Down
Expand Up @@ -3,8 +3,6 @@
import org.junit.Assert; import org.junit.Assert;


import com.alibaba.fastjson.parser.JSONToken; import com.alibaba.fastjson.parser.JSONToken;
import com.alibaba.fastjson.parser.deserializer.JSONArrayDeserializer;
import com.alibaba.fastjson.parser.deserializer.JSONObjectDeserializer;
import com.alibaba.fastjson.parser.deserializer.NumberDeserializer; import com.alibaba.fastjson.parser.deserializer.NumberDeserializer;
import com.alibaba.fastjson.parser.deserializer.SqlDateDeserializer; import com.alibaba.fastjson.parser.deserializer.SqlDateDeserializer;
import com.alibaba.fastjson.serializer.AtomicCodec; import com.alibaba.fastjson.serializer.AtomicCodec;
Expand All @@ -27,9 +25,7 @@ public void test_match() throws Exception {
Assert.assertEquals(JSONToken.LITERAL_INT, SqlDateDeserializer.instance.getFastMatchToken()); Assert.assertEquals(JSONToken.LITERAL_INT, SqlDateDeserializer.instance.getFastMatchToken());
Assert.assertEquals(JSONToken.LITERAL_STRING, CharsetCodec.instance.getFastMatchToken()); Assert.assertEquals(JSONToken.LITERAL_STRING, CharsetCodec.instance.getFastMatchToken());
Assert.assertEquals(JSONToken.LITERAL_STRING, FileCodec.instance.getFastMatchToken()); Assert.assertEquals(JSONToken.LITERAL_STRING, FileCodec.instance.getFastMatchToken());
Assert.assertEquals(JSONToken.LBRACKET, JSONArrayDeserializer.instance.getFastMatchToken());
Assert.assertEquals(JSONToken.LBRACKET, ObjectArrayCodec.instance.getFastMatchToken()); Assert.assertEquals(JSONToken.LBRACKET, ObjectArrayCodec.instance.getFastMatchToken());
Assert.assertEquals(JSONToken.LBRACE, JSONObjectDeserializer.instance.getFastMatchToken());
Assert.assertEquals(JSONToken.LBRACE, InetSocketAddressCodec.instance.getFastMatchToken()); Assert.assertEquals(JSONToken.LBRACE, InetSocketAddressCodec.instance.getFastMatchToken());
Assert.assertEquals(JSONToken.LITERAL_STRING, CharacterCodec.instance.getFastMatchToken()); Assert.assertEquals(JSONToken.LITERAL_STRING, CharacterCodec.instance.getFastMatchToken());
} }
Expand Down
@@ -1,4 +1,4 @@
package com.alibaba.json.bvt.parser.deser; package com.alibaba.json.bvt.parser.deser.generic;


import org.junit.Assert; import org.junit.Assert;


Expand Down
@@ -1,4 +1,4 @@
package com.alibaba.json.bvt.parser.deser; package com.alibaba.json.bvt.parser.deser.generic;


import org.junit.Assert; import org.junit.Assert;


Expand Down
@@ -1,4 +1,4 @@
package com.alibaba.json.bvt.parser.deser; package com.alibaba.json.bvt.parser.deser.generic;


import org.junit.Assert; import org.junit.Assert;


Expand Down
@@ -1,4 +1,4 @@
package com.alibaba.json.bvt.parser.deser; package com.alibaba.json.bvt.parser.deser.generic;


import org.junit.Assert; import org.junit.Assert;


Expand Down
@@ -1,4 +1,4 @@
package com.alibaba.json.bvt.parser.deser; package com.alibaba.json.bvt.parser.deser.generic;


import org.junit.Assert; import org.junit.Assert;


Expand Down
@@ -1,4 +1,4 @@
package com.alibaba.json.bvt.parser.deser; package com.alibaba.json.bvt.parser.deser.generic;


import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;


Expand Down
@@ -1,4 +1,4 @@
package com.alibaba.json.bvt.parser; package com.alibaba.json.bvt.parser.deser.generic;


import java.util.List; import java.util.List;


Expand Down
@@ -1,4 +1,4 @@
package com.alibaba.json.bvt.parser; package com.alibaba.json.bvt.parser.deser.generic;


import junit.framework.TestCase; import junit.framework.TestCase;


Expand Down

0 comments on commit d37a96a

Please sign in to comment.