Skip to content

Commit 142fb7e

Browse files
committed
fix static codegen
1 parent 0c367e9 commit 142fb7e

File tree

17 files changed

+375
-45
lines changed

17 files changed

+375
-45
lines changed

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

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

33
import com.jsoniter.JsonIterator;
44
import com.jsoniter.StaticCodeGenerator;
5+
import com.jsoniter.annotation.JsoniterAnnotationSupport;
56
import com.jsoniter.spi.CodegenConfig;
67
import com.jsoniter.spi.Decoder;
78
import com.jsoniter.spi.JsoniterSpi;
@@ -15,6 +16,7 @@ public class DemoCodegenConfig implements CodegenConfig {
1516

1617
@Override
1718
public void setup() {
19+
JsoniterAnnotationSupport.enable();
1820
// register custom decoder or extensions before codegen
1921
// so that we doing codegen, we know in which case, we need to callback
2022
JsoniterSpi.registerPropertyDecoder(User.class, "score", new Decoder.IntDecoder() {
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package com.jsoniter.demo;
22

3+
import com.jsoniter.annotation.JsonProperty;
4+
35
public class User {
6+
@JsonProperty(nullable = false)
47
public String firstName;
8+
@JsonProperty(nullable = false)
59
public String lastName;
610
public int score;
711
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package decoder.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 { if (iter.readNull()) { com.jsoniter.CodegenAccess.resetExistingObject(iter); return null; }
4+
com.jsoniter.demo.User obj = (com.jsoniter.CodegenAccess.existingObject(iter) == null ? new com.jsoniter.demo.User() : (com.jsoniter.demo.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.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.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: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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 { com.jsoniter.CodegenAccess.resetExistingObject(iter);
4+
if (iter.readNull()) { return null; }
5+
if (!com.jsoniter.CodegenAccess.readArrayStart(iter)) {
6+
return new int[0];
7+
}
8+
int a1 = iter.readInt();
9+
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') {
10+
return new int[]{ a1 };
11+
}
12+
int a2 = iter.readInt();
13+
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') {
14+
return new int[]{ a1, a2 };
15+
}
16+
int a3 = iter.readInt();
17+
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') {
18+
return new int[]{ a1, a2, a3 };
19+
}
20+
int a4 = (int) iter.readInt();
21+
int[] arr = new int[8];
22+
arr[0] = a1;
23+
arr[1] = a2;
24+
arr[2] = a3;
25+
arr[3] = a4;
26+
int i = 4;
27+
while (com.jsoniter.CodegenAccess.nextToken(iter) == ',') {
28+
if (i == arr.length) {
29+
int[] newArr = new int[arr.length * 2];
30+
System.arraycopy(arr, 0, newArr, 0, arr.length);
31+
arr = newArr;
32+
}
33+
arr[i++] = iter.readInt();
34+
}
35+
int[] result = new int[i];
36+
System.arraycopy(arr, 0, result, 0, i);
37+
return result;
38+
}public java.lang.Object decode(com.jsoniter.JsonIterator iter) throws java.io.IOException {
39+
return decode_(iter);
40+
}
41+
}
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+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package decoder.java.util.List_java.lang;
2+
public class Integer 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 = java.lang.Integer.valueOf(iter.readInt());
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 = java.lang.Integer.valueOf(iter.readInt());
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 = java.lang.Integer.valueOf(iter.readInt());
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 = java.lang.Integer.valueOf(iter.readInt());
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(java.lang.Integer.valueOf(iter.readInt()));
37+
}
38+
return obj;
39+
}public java.lang.Object decode(com.jsoniter.JsonIterator iter) throws java.io.IOException {
40+
return decode_(iter);
41+
}
42+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package decoder.java.util.Map_java.lang.String_java.lang;
2+
public class Object implements com.jsoniter.spi.Decoder {
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; }
5+
if (map == null) { map = new java.util.HashMap(); }
6+
if (!com.jsoniter.CodegenAccess.readObjectStart(iter)) {
7+
return map;
8+
}
9+
String field = com.jsoniter.CodegenAccess.readObjectFieldAsString(iter);
10+
map.put(field, iter.read());
11+
while (com.jsoniter.CodegenAccess.nextToken(iter) == ',') {
12+
field = com.jsoniter.CodegenAccess.readObjectFieldAsString(iter);
13+
map.put(field, iter.read());
14+
}
15+
return map;
16+
}public java.lang.Object decode(com.jsoniter.JsonIterator iter) throws java.io.IOException {
17+
return decode_(iter);
18+
}
19+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package encoder.com.jsoniter.demo;
2+
public class User extends com.jsoniter.spi.EmptyEncoder {
3+
public void encode(Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
4+
if (obj == null) { stream.writeNull(); return; }
5+
stream.writeRaw("{\"firstName\":\"", 14);
6+
encode_((com.jsoniter.demo.User)obj, stream);
7+
stream.write('}');
8+
}
9+
public static void encode_(com.jsoniter.demo.User obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
10+
com.jsoniter.output.CodegenAccess.writeStringWithoutQuote((java.lang.String)obj.firstName, stream);
11+
stream.writeRaw("\",\"lastName\":\"", 14);
12+
com.jsoniter.output.CodegenAccess.writeStringWithoutQuote((java.lang.String)obj.lastName, stream);
13+
stream.writeRaw("\",\"score\":", 10);
14+
stream.writeVal((int)obj.score);
15+
}
16+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package encoder;
2+
public class int_array extends com.jsoniter.spi.EmptyEncoder {
3+
public void encode(Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
4+
if (obj == null) { stream.writeNull(); return; }
5+
stream.write('[');
6+
encode_((int[])obj, stream);
7+
stream.write(']');
8+
}
9+
public static void encode_(java.lang.Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
10+
int[] arr = (int[])obj;
11+
if (arr.length == 0) { return; }
12+
int i = 0;
13+
int e = arr[i++];
14+
stream.writeVal((int)e);
15+
while (i < arr.length) {
16+
stream.write(',');
17+
e = arr[i++];
18+
stream.writeVal((int)e);
19+
}
20+
}
21+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package encoder.java.util.List_com.jsoniter.demo;
2+
public class User extends com.jsoniter.spi.EmptyEncoder {
3+
public void encode(Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
4+
if (obj == null) { stream.writeNull(); return; }
5+
stream.write('[');
6+
encode_((java.util.List)obj, stream);
7+
stream.write(']');
8+
}
9+
public static void encode_(java.lang.Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
10+
java.util.List list = (java.util.List)obj;
11+
int size = list.size();
12+
if (size == 0) { return; }
13+
java.lang.Object e = list.get(0);
14+
if (e == null) { stream.writeNull(); } else {
15+
stream.writeRaw("{\"firstName\":\"", 14);
16+
encoder.com.jsoniter.demo.User.encode_((com.jsoniter.demo.User)e, stream);
17+
stream.write('}');
18+
}
19+
for (int i = 1; i < size; i++) {
20+
stream.write(',');
21+
e = list.get(i);
22+
if (e == null) { stream.writeNull(); } else {
23+
stream.writeRaw("{\"firstName\":\"", 14);
24+
encoder.com.jsoniter.demo.User.encode_((com.jsoniter.demo.User)e, stream);
25+
stream.write('}');
26+
}
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)