Skip to content

Commit 68049d2

Browse files
committed
implement static mode for encoder; javassist no longer necessary when static codegen
1 parent 65ef4da commit 68049d2

26 files changed

Lines changed: 369 additions & 128 deletions

File tree

demo/src/main/java/com/jsoniter/demo/Demo.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,23 @@
22

33
import com.jsoniter.DecodingMode;
44
import com.jsoniter.JsonIterator;
5+
import com.jsoniter.output.EncodingMode;
6+
import com.jsoniter.output.JsonStream;
57

68
public class Demo {
79
static {
810
// ensure the jsoniter is properly setup
911
new DemoCodegenConfig().setup();
1012
JsonIterator.setMode(DecodingMode.STATIC_MODE);
13+
JsonStream.setMode(EncodingMode.STATIC_MODE);
14+
JsonStream.defaultIndentionStep = 2;
1115
}
16+
1217
public static void main(String[] args) {
1318
User user = JsonIterator.deserialize("{\"firstName\": \"tao\", \"lastName\": \"wen\", \"score\": \"1024\"}", User.class);
1419
System.out.println(user.firstName);
1520
System.out.println(user.lastName);
1621
System.out.println(user.score);
22+
System.out.println(JsonStream.serialize(user));
1723
}
1824
}

demo/src/main/java/com/jsoniter/demo/DemoCodegenConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public TypeLiteral[] whatToCodegen() {
3131
// generic types, need to use this syntax
3232
new TypeLiteral<List<Integer>>() {
3333
},
34+
new TypeLiteral<List<User>>() {
35+
},
3436
new TypeLiteral<Map<String, Object>>() {
3537
},
3638
// array

demo/src/main/java/decoder/com/jsoniter/demo/codegen/User.java

Lines changed: 0 additions & 37 deletions
This file was deleted.

demo/src/main/java/decoder/int_array.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package decoder;
22
public class int_array implements com.jsoniter.spi.Decoder {
3-
public static java.lang.Object decode_(com.jsoniter.JsonIterator iter) throws java.io.IOException { if (iter.readNull()) { return null; }
3+
public static java.lang.Object decode_(com.jsoniter.JsonIterator iter) throws java.io.IOException { com.jsoniter.CodegenAccess.resetExistingObject(iter);
4+
if (iter.readNull()) { return null; }
45
if (!com.jsoniter.CodegenAccess.readArrayStart(iter)) {
56
return new int[0];
67
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package decoder.java.util.List_com.jsoniter.demo;
2+
public class User implements com.jsoniter.spi.Decoder {
3+
public static java.lang.Object decode_(com.jsoniter.JsonIterator iter) throws java.io.IOException { java.util.ArrayList col = (java.util.ArrayList)com.jsoniter.CodegenAccess.resetExistingObject(iter);
4+
if (iter.readNull()) { return null; }
5+
if (!com.jsoniter.CodegenAccess.readArrayStart(iter)) {
6+
return col == null ? new java.util.ArrayList(0): (java.util.ArrayList)com.jsoniter.CodegenAccess.reuseCollection(col);
7+
}
8+
Object a1 = decoder.com.jsoniter.demo.User.decode_(iter);
9+
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') {
10+
java.util.ArrayList obj = col == null ? new java.util.ArrayList(1): (java.util.ArrayList)com.jsoniter.CodegenAccess.reuseCollection(col);
11+
obj.add(a1);
12+
return obj;
13+
}
14+
Object a2 = decoder.com.jsoniter.demo.User.decode_(iter);
15+
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') {
16+
java.util.ArrayList obj = col == null ? new java.util.ArrayList(2): (java.util.ArrayList)com.jsoniter.CodegenAccess.reuseCollection(col);
17+
obj.add(a1);
18+
obj.add(a2);
19+
return obj;
20+
}
21+
Object a3 = decoder.com.jsoniter.demo.User.decode_(iter);
22+
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') {
23+
java.util.ArrayList obj = col == null ? new java.util.ArrayList(3): (java.util.ArrayList)com.jsoniter.CodegenAccess.reuseCollection(col);
24+
obj.add(a1);
25+
obj.add(a2);
26+
obj.add(a3);
27+
return obj;
28+
}
29+
Object a4 = decoder.com.jsoniter.demo.User.decode_(iter);
30+
java.util.ArrayList obj = col == null ? new java.util.ArrayList(8): (java.util.ArrayList)com.jsoniter.CodegenAccess.reuseCollection(col);
31+
obj.add(a1);
32+
obj.add(a2);
33+
obj.add(a3);
34+
obj.add(a4);
35+
while (com.jsoniter.CodegenAccess.nextToken(iter) == ',') {
36+
obj.add(decoder.com.jsoniter.demo.User.decode_(iter));
37+
}
38+
return obj;
39+
}public java.lang.Object decode(com.jsoniter.JsonIterator iter) throws java.io.IOException {
40+
return decode_(iter);
41+
}
42+
}

demo/src/main/java/decoder/java/util/List_java/lang/Integer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package decoder.java.util.List_java.lang;
22
public class Integer implements com.jsoniter.spi.Decoder {
3-
public static java.lang.Object decode_(com.jsoniter.JsonIterator iter) throws java.io.IOException { if (iter.readNull()) { return null; }
4-
java.util.ArrayList col = (java.util.ArrayList)com.jsoniter.CodegenAccess.resetExistingObject(iter);
3+
public static java.lang.Object decode_(com.jsoniter.JsonIterator iter) throws java.io.IOException { java.util.ArrayList col = (java.util.ArrayList)com.jsoniter.CodegenAccess.resetExistingObject(iter);
4+
if (iter.readNull()) { return null; }
55
if (!com.jsoniter.CodegenAccess.readArrayStart(iter)) {
66
return col == null ? new java.util.ArrayList(0): (java.util.ArrayList)com.jsoniter.CodegenAccess.reuseCollection(col);
77
}

demo/src/main/java/decoder/java/util/Map_java/lang/String_java/lang/Object.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package decoder.java.util.Map_java.lang.String_java.lang;
22
public class Object implements com.jsoniter.spi.Decoder {
3-
public static java.lang.Object decode_(com.jsoniter.JsonIterator iter) throws java.io.IOException { if (iter.readNull()) { return null; }
4-
java.util.HashMap map = (java.util.HashMap)com.jsoniter.CodegenAccess.resetExistingObject(iter);
3+
public static java.lang.Object decode_(com.jsoniter.JsonIterator iter) throws java.io.IOException { java.util.HashMap map = (java.util.HashMap)com.jsoniter.CodegenAccess.resetExistingObject(iter);
4+
if (iter.readNull()) { return null; }
55
if (map == null) { map = new java.util.HashMap(); }
66
if (!com.jsoniter.CodegenAccess.readObjectStart(iter)) {
77
return map;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package encoder.com.jsoniter.demo;
2+
public class User implements com.jsoniter.spi.Encoder {
3+
public static void encode_(com.jsoniter.demo.User obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
4+
if (obj == null) { stream.writeNull(); return; }
5+
stream.startObject();
6+
stream.writeField("firstName");
7+
stream.writeVal((java.lang.String)obj.firstName);
8+
stream.writeMore();
9+
stream.writeField("lastName");
10+
stream.writeVal((java.lang.String)obj.lastName);
11+
stream.writeMore();
12+
stream.writeField("score");
13+
stream.writeVal((int)obj.score);
14+
stream.endObject();
15+
}
16+
public void encode(java.lang.Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
17+
encode_((com.jsoniter.demo.User)obj, stream);
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package encoder;
2+
public class int_array implements com.jsoniter.spi.Encoder {
3+
public static void encode_(java.lang.Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
4+
if (obj == null) { stream.writeNull(); return; }
5+
int[] arr = (int[])obj;
6+
if (arr.length == 0) { stream.writeEmptyArray(); return; }
7+
stream.startArray();
8+
int i = 0;
9+
stream.writeVal((int)arr[i++]);
10+
while (i < arr.length) {
11+
stream.writeMore();
12+
stream.writeVal((int)arr[i++]);
13+
}
14+
stream.endArray();
15+
}
16+
public void encode(java.lang.Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
17+
encode_((int[])obj, stream);
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package encoder.java.util.List_com.jsoniter.demo;
2+
public class User implements com.jsoniter.spi.Encoder {
3+
public static void encode_(java.lang.Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
4+
if (obj == null) { stream.writeNull(); return; }
5+
java.util.Iterator iter = ((java.util.Collection)obj).iterator();
6+
if (!iter.hasNext()) { stream.writeEmptyArray(); return; }
7+
stream.startArray();
8+
encoder.com.jsoniter.demo.User.encode_((com.jsoniter.demo.User)iter.next(), stream);
9+
while (iter.hasNext()) {
10+
stream.writeMore();
11+
encoder.com.jsoniter.demo.User.encode_((com.jsoniter.demo.User)iter.next(), stream);
12+
}
13+
stream.endArray();
14+
}
15+
public void encode(java.lang.Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
16+
encode_((java.util.List)obj, stream);
17+
}
18+
}

0 commit comments

Comments
 (0)