Skip to content

Commit f195f14

Browse files
committed
fix array
1 parent 5645729 commit f195f14

File tree

5 files changed

+45
-7
lines changed

5 files changed

+45
-7
lines changed

src/main/java/com/jsoniter/Codegen.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ private synchronized static Decoder gen(String cacheKey, Type type, Type[] typeA
6060
clazz = (Class) type;
6161
}
6262
String source = genSource(cacheKey, clazz, typeArgs);
63+
if (System.getenv("JSONITER_DEBUG") != null) {
64+
System.out.println(source);
65+
}
6366
try {
6467
CtClass ctClass = pool.makeClass(cacheKey);
6568
ctClass.setInterfaces(new CtClass[]{pool.get(Decoder.class.getName())});
@@ -231,12 +234,12 @@ private static void genField(StringBuilder lines, Field field, String cacheKey)
231234
private static String genReadOp(Type type) {
232235
if (type instanceof Class) {
233236
Class clazz = (Class) type;
234-
String nativeRead = NATIVE_READS.get(clazz.getName());
237+
String nativeRead = NATIVE_READS.get(clazz.getCanonicalName());
235238
if (nativeRead != null) {
236239
return nativeRead;
237240
}
238241
return String.format("(%s)iter.read(\"%s\", %s.class)",
239-
clazz.getName(), TypeLiteral.generateCacheKey(clazz), clazz.getName());
242+
clazz.getCanonicalName(), TypeLiteral.generateCacheKey(clazz), clazz.getCanonicalName());
240243
}
241244
if (type instanceof ParameterizedType) {
242245
ParameterizedType pType = (ParameterizedType) type;
@@ -245,12 +248,12 @@ private static String genReadOp(Type type) {
245248
switch (args.length) {
246249
case 1:
247250
return String.format("(%s)iter.read(\"%s\", %s.class, %s.class);",
248-
clazz.getName(), TypeLiteral.generateCacheKey(type),
249-
clazz.getName(), ((Class) args[0]).getName());
251+
clazz.getCanonicalName(), TypeLiteral.generateCacheKey(type),
252+
clazz.getCanonicalName(), ((Class) args[0]).getCanonicalName());
250253
case 2:
251254
return String.format("(%s)iter.read(\"%s\", %s.class, %s.class, %s.class);",
252-
clazz.getName(), TypeLiteral.generateCacheKey(type),
253-
clazz.getName(), ((Class) args[0]).getName(), ((Class) args[1]).getName());
255+
clazz.getCanonicalName(), TypeLiteral.generateCacheKey(type),
256+
clazz.getCanonicalName(), ((Class) args[0]).getCanonicalName(), ((Class) args[1]).getCanonicalName());
254257
default:
255258
throw new IllegalArgumentException("unsupported number of type arguments: " + type);
256259
}

test/main/java/com/jsoniter/ABC.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.jsoniter;
2+
3+
public class ABC {
4+
public Any a;
5+
}

test/main/java/com/jsoniter/TestDemo.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,35 @@ public void test_bind_api() throws IOException {
1010
int[] val = iter.read(int[].class);
1111
System.out.println(val[3]);
1212
}
13+
1314
public void test_any_api() throws IOException {
1415
Jsoniter iter = Jsoniter.parse("[0,1,2,3]");
1516
System.out.println(iter.readAny().toInt(3));
1617
}
18+
1719
public void test_iterator_api() throws IOException {
1820
Jsoniter iter = Jsoniter.parse("[0,1,2,3]");
1921
int total = 0;
20-
while(iter.readArray()) {
22+
while (iter.readArray()) {
2123
total += iter.readInt();
2224
}
2325
System.out.println(total);
2426
}
27+
28+
public void test_abc() throws IOException {
29+
Jsoniter iter = Jsoniter.parse("{'a': {'b': {'c': 'd'}}}".replace('\'', '"'));
30+
ABC abc = iter.read(ABC.class);
31+
System.out.println(abc.a.get("b", "c"));
32+
}
33+
34+
public void test_iterator_api_and_bind() throws IOException {
35+
Jsoniter iter = Jsoniter.parse("[123, {'name': 'taowen', 'tags': ['crazy', 'hacker']}]".replace('\'', '"'));
36+
iter.readArray();
37+
int userId = iter.readInt();
38+
iter.readArray();
39+
User user = iter.read(User.class);
40+
user.userId = userId;
41+
iter.readArray(); // end of array
42+
System.out.println(user);
43+
}
2544
}

test/main/java/com/jsoniter/TestReadAny.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,8 @@ public void test_bind_to_any() throws IOException {
1414
ComplexObject obj = iter.read(ComplexObject.class);
1515
System.out.println(obj.field3);
1616
}
17+
public void test_read_any_from_string() throws IOException {
18+
Jsoniter iter = Jsoniter.parse("{'numbers': ['1', '2', ['3', '4']]}".replace('\'', '"'));
19+
assertEquals(3, iter.readAny().toInt("numbers", 2, 0));
20+
}
1721
}

test/main/java/com/jsoniter/User.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.jsoniter;
2+
3+
public class User {
4+
public int userId;
5+
public String name;
6+
public String[] tags;
7+
}

0 commit comments

Comments
 (0)