Skip to content

Commit 45e21ef

Browse files
committed
demo staticgen
1 parent c17b3a9 commit 45e21ef

18 files changed

Lines changed: 253 additions & 44 deletions

File tree

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.fasterxml.jackson.core.type.TypeReference;
77
import com.fasterxml.jackson.databind.ObjectMapper;
88
import com.fasterxml.jackson.module.afterburner.AfterburnerModule;
9+
import com.jsoniter.DecodingMode;
910
import com.jsoniter.JsonIterator;
1011
import com.jsoniter.ReflectionDecoder;
1112
import com.jsoniter.annotation.JacksonAnnotationSupport;
@@ -68,7 +69,7 @@ public void benchSetup(BenchmarkParams params) {
6869
jackson.registerModule(new AfterburnerModule());
6970
if (params != null) {
7071
if (params.getBenchmark().contains("withJsoniterStrictMode")) {
71-
JsonIterator.enableStrictMode();
72+
JsonIterator.setMode(DecodingMode.STRICT_MODE);
7273
}
7374
if (params.getBenchmark().contains("withJsoniterReflection")) {
7475
ExtensionManager.registerTypeDecoder(TestObject.class, new ReflectionDecoder(TestObject.class));

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.jsoniter.demo;
22

3+
import com.jsoniter.DecodingMode;
34
import com.jsoniter.JsonException;
45
import com.jsoniter.JsonIterator;
56
import com.jsoniter.annotation.JsonProperty;
@@ -58,7 +59,7 @@ public static class TestObject4 {
5859
@Setup(Level.Trial)
5960
public void benchSetup() {
6061
JsoniterAnnotationSupport.enable();
61-
JsonIterator.enableStrictMode();
62+
JsonIterator.setMode(DecodingMode.STRICT_MODE);
6263
iter0 = JsonIterator.parse("{'field1':101,'field2':101,'field3':101}".replace('\'', '"').getBytes());
6364
iter1Success = JsonIterator.parse("{'field1':101,'field2':101,'field3':101}".replace('\'', '"').getBytes());
6465
testObject0Type = new TypeLiteral<TestObject0>() {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.fasterxml.jackson.core.type.TypeReference;
88
import com.fasterxml.jackson.databind.ObjectMapper;
99
import com.fasterxml.jackson.module.afterburner.AfterburnerModule;
10+
import com.jsoniter.DecodingMode;
1011
import com.jsoniter.JsonIterator;
1112
import com.jsoniter.ReflectionDecoder;
1213
import com.jsoniter.annotation.JacksonAnnotationSupport;
@@ -67,7 +68,7 @@ public void benchSetup(BenchmarkParams params) {
6768
jackson.registerModule(new AfterburnerModule());
6869
if (params != null) {
6970
if (params.getBenchmark().contains("withJsoniterStrictMode")) {
70-
JsonIterator.enableStrictMode();
71+
JsonIterator.setMode(DecodingMode.STRICT_MODE);
7172
}
7273
if (params.getBenchmark().contains("withJsoniterReflection")) {
7374
ExtensionManager.registerTypeDecoder(ConstructorBinding.TestObject.class, new ReflectionDecoder(ConstructorBinding.TestObject.class));

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.fasterxml.jackson.core.type.TypeReference;
77
import com.fasterxml.jackson.databind.ObjectMapper;
88
import com.fasterxml.jackson.module.afterburner.AfterburnerModule;
9+
import com.jsoniter.DecodingMode;
910
import com.jsoniter.JsonIterator;
1011
import com.jsoniter.ReflectionDecoder;
1112
import com.jsoniter.spi.ExtensionManager;
@@ -65,7 +66,7 @@ public void benchSetup(BenchmarkParams params) {
6566
ExtensionManager.registerTypeDecoder(TestObject.class, new ReflectionDecoder(TestObject.class));
6667
}
6768
if (params.getBenchmark().contains("withBindApiStrictMode")) {
68-
JsonIterator.enableStrictMode();
69+
JsonIterator.setMode(DecodingMode.STATIC_MODE);
6970
}
7071
if (params.getBenchmark().contains("withJacksonAfterburner")) {
7172
jackson.registerModule(new AfterburnerModule());
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.jsoniter.demo.codegen;
2+
3+
import com.jsoniter.DecodingMode;
4+
import com.jsoniter.JsonIterator;
5+
6+
public class Demo {
7+
static {
8+
// ensure the jsoniter is properly setup
9+
new DemoCodegenConfig().setup();
10+
JsonIterator.setMode(DecodingMode.STATIC_MODE);
11+
}
12+
public static void main(String[] args) {
13+
User user = new JsonIterator().read("{\"firstName\": \"tao\", \"lastName\": \"wen\", \"score\": \"1024\"}", User.class);
14+
System.out.println(user.firstName);
15+
System.out.println(user.lastName);
16+
System.out.println(user.score);
17+
}
18+
}

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

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,42 @@
11
package com.jsoniter.demo.codegen;
22

3+
import com.jsoniter.JsonIterator;
34
import com.jsoniter.StaticCodeGenerator;
45
import com.jsoniter.spi.CodegenConfig;
6+
import com.jsoniter.spi.Decoder;
57
import com.jsoniter.spi.ExtensionManager;
68
import com.jsoniter.spi.TypeLiteral;
79

10+
import java.io.IOException;
811
import java.util.List;
12+
import java.util.Map;
913

1014
public class DemoCodegenConfig implements CodegenConfig {
1115

1216
@Override
13-
public void beforeCodegen() {
14-
ExtensionManager.disableDynamicCodegen();
17+
public void setup() {
18+
// register custom decoder or extensions before codegen
19+
// so that we doing codegen, we know in which case, we need to callback
20+
ExtensionManager.registerFieldDecoder(User.class, "score", new Decoder.IntDecoder() {
21+
@Override
22+
public int decodeInt(JsonIterator iter) throws IOException {
23+
return Integer.valueOf(iter.readString());
24+
}
25+
});
1526
}
1627

1728
@Override
18-
public TypeLiteral[] getTypeLiterals() {
29+
public TypeLiteral[] whatToCodegen() {
1930
return new TypeLiteral[]{
20-
new TypeLiteral<List<String>>() {
21-
}
31+
// generic types, need to use this syntax
32+
new TypeLiteral<List<Integer>>() {
33+
},
34+
new TypeLiteral<Map<String, Object>>() {
35+
},
36+
// array
37+
TypeLiteral.create(int[].class),
38+
// object
39+
TypeLiteral.create(User.class)
2240
};
2341
}
2442

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.jsoniter.demo.codegen;
2+
3+
public class User {
4+
public String firstName;
5+
public String lastName;
6+
public int score;
7+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package decoder.com.jsoniter.demo.codegen;
2+
public class User implements com.jsoniter.spi.Decoder {
3+
public static java.lang.Object decode_(com.jsoniter.JsonIterator iter) throws java.io.IOException { if (iter.readNull()) { com.jsoniter.CodegenAccess.resetExistingObject(iter); return null; }
4+
com.jsoniter.demo.codegen.User obj = (com.jsoniter.CodegenAccess.existingObject(iter) == null ? new com.jsoniter.demo.codegen.User() : (com.jsoniter.demo.codegen.User)com.jsoniter.CodegenAccess.resetExistingObject(iter));
5+
if (!com.jsoniter.CodegenAccess.readObjectStart(iter)) { return obj; }
6+
switch (com.jsoniter.CodegenAccess.readObjectFieldAsHash(iter)) {
7+
case -799547430:
8+
obj.firstName = (java.lang.String)iter.readString();
9+
break;
10+
case -1078100014:
11+
obj.lastName = (java.lang.String)iter.readString();
12+
break;
13+
case -768634731:
14+
obj.score = com.jsoniter.CodegenAccess.readInt("score@decoder.com.jsoniter.demo.codegen.User", iter);
15+
break;
16+
default:
17+
iter.skip();
18+
}
19+
while (com.jsoniter.CodegenAccess.nextToken(iter) == ',') {
20+
switch (com.jsoniter.CodegenAccess.readObjectFieldAsHash(iter)) {
21+
case -799547430:
22+
obj.firstName = (java.lang.String)iter.readString();
23+
continue;
24+
case -1078100014:
25+
obj.lastName = (java.lang.String)iter.readString();
26+
continue;
27+
case -768634731:
28+
obj.score = com.jsoniter.CodegenAccess.readInt("score@decoder.com.jsoniter.demo.codegen.User", iter);
29+
continue;
30+
}
31+
iter.skip();
32+
}
33+
return obj;
34+
}public java.lang.Object decode(com.jsoniter.JsonIterator iter) throws java.io.IOException {
35+
return decode_(iter);
36+
}
37+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package decoder;
2+
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; }
4+
if (!com.jsoniter.CodegenAccess.readArrayStart(iter)) {
5+
return new int[0];
6+
}
7+
int a1 = iter.readInt();
8+
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') {
9+
return new int[]{ a1 };
10+
}
11+
int a2 = iter.readInt();
12+
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') {
13+
return new int[]{ a1, a2 };
14+
}
15+
int a3 = iter.readInt();
16+
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') {
17+
return new int[]{ a1, a2, a3 };
18+
}
19+
int a4 = (int) iter.readInt();
20+
int[] arr = new int[8];
21+
arr[0] = a1;
22+
arr[1] = a2;
23+
arr[2] = a3;
24+
arr[3] = a4;
25+
int i = 4;
26+
while (com.jsoniter.CodegenAccess.nextToken(iter) == ',') {
27+
if (i == arr.length) {
28+
int[] newArr = new int[arr.length * 2];
29+
System.arraycopy(arr, 0, newArr, 0, arr.length);
30+
arr = newArr;
31+
}
32+
arr[i++] = iter.readInt();
33+
}
34+
int[] result = new int[i];
35+
System.arraycopy(arr, 0, result, 0, i);
36+
return result;
37+
}public java.lang.Object decode(com.jsoniter.JsonIterator iter) throws java.io.IOException {
38+
return decode_(iter);
39+
}
40+
}

demo/src/main/java/decoder/java/util/List_java/lang/String.java renamed to demo/src/main/java/decoder/java/util/List_java/lang/Integer.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,42 @@
11
package decoder.java.util.List_java.lang;
2-
public class String implements com.jsoniter.spi.Decoder {
3-
public static Object decode_(com.jsoniter.JsonIterator iter) throws java.io.IOException { if (iter.readNull()) { return null; }
2+
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; }
44
java.util.ArrayList col = (java.util.ArrayList)com.jsoniter.CodegenAccess.resetExistingObject(iter);
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
}
8-
Object a1 = iter.readString();
8+
Object a1 = java.lang.Integer.valueOf(iter.readInt());
99
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') {
1010
java.util.ArrayList obj = col == null ? new java.util.ArrayList(1): (java.util.ArrayList)com.jsoniter.CodegenAccess.reuseCollection(col);
1111
obj.add(a1);
1212
return obj;
1313
}
14-
Object a2 = iter.readString();
14+
Object a2 = java.lang.Integer.valueOf(iter.readInt());
1515
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') {
1616
java.util.ArrayList obj = col == null ? new java.util.ArrayList(2): (java.util.ArrayList)com.jsoniter.CodegenAccess.reuseCollection(col);
1717
obj.add(a1);
1818
obj.add(a2);
1919
return obj;
2020
}
21-
Object a3 = iter.readString();
21+
Object a3 = java.lang.Integer.valueOf(iter.readInt());
2222
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') {
2323
java.util.ArrayList obj = col == null ? new java.util.ArrayList(3): (java.util.ArrayList)com.jsoniter.CodegenAccess.reuseCollection(col);
2424
obj.add(a1);
2525
obj.add(a2);
2626
obj.add(a3);
2727
return obj;
2828
}
29-
Object a4 = iter.readString();
29+
Object a4 = java.lang.Integer.valueOf(iter.readInt());
3030
java.util.ArrayList obj = col == null ? new java.util.ArrayList(8): (java.util.ArrayList)com.jsoniter.CodegenAccess.reuseCollection(col);
3131
obj.add(a1);
3232
obj.add(a2);
3333
obj.add(a3);
3434
obj.add(a4);
3535
while (com.jsoniter.CodegenAccess.nextToken(iter) == ',') {
36-
obj.add(iter.readString());
36+
obj.add(java.lang.Integer.valueOf(iter.readInt()));
3737
}
3838
return obj;
39-
}public Object decode(com.jsoniter.JsonIterator iter) throws java.io.IOException {
39+
}public java.lang.Object decode(com.jsoniter.JsonIterator iter) throws java.io.IOException {
4040
return decode_(iter);
4141
}
4242
}

0 commit comments

Comments
 (0)