diff --git a/pom.xml b/pom.xml index 4840503f..760632f7 100644 --- a/pom.xml +++ b/pom.xml @@ -121,8 +121,8 @@ maven-compiler-plugin 3.7.0 - 1.6 - 1.6 + 1.8 + 1.8 UTF-8 diff --git a/src/main/java/com/jsoniter/CodegenImplNative.java b/src/main/java/com/jsoniter/CodegenImplNative.java index 156ce8f2..9a886f5c 100644 --- a/src/main/java/com/jsoniter/CodegenImplNative.java +++ b/src/main/java/com/jsoniter/CodegenImplNative.java @@ -13,157 +13,162 @@ import java.util.Map; class CodegenImplNative { - final static Map NATIVE_READS = new HashMap() {{ - put("float", "iter.readFloat()"); - put("double", "iter.readDouble()"); - put("boolean", "iter.readBoolean()"); - put("byte", "iter.readShort()"); - put("short", "iter.readShort()"); - put("int", "iter.readInt()"); - put("char", "iter.readInt()"); - put("long", "iter.readLong()"); - put(Float.class.getName(), "(iter.readNull() ? null : java.lang.Float.valueOf(iter.readFloat()))"); - put(Double.class.getName(), "(iter.readNull() ? null : java.lang.Double.valueOf(iter.readDouble()))"); - put(Boolean.class.getName(), "(iter.readNull() ? null : java.lang.Boolean.valueOf(iter.readBoolean()))"); - put(Byte.class.getName(), "(iter.readNull() ? null : java.lang.Byte.valueOf((byte)iter.readShort()))"); - put(Character.class.getName(), "(iter.readNull() ? null : java.lang.Character.valueOf((char)iter.readShort()))"); - put(Short.class.getName(), "(iter.readNull() ? null : java.lang.Short.valueOf(iter.readShort()))"); - put(Integer.class.getName(), "(iter.readNull() ? null : java.lang.Integer.valueOf(iter.readInt()))"); - put(Long.class.getName(), "(iter.readNull() ? null : java.lang.Long.valueOf(iter.readLong()))"); - put(BigDecimal.class.getName(), "iter.readBigDecimal()"); - put(BigInteger.class.getName(), "iter.readBigInteger()"); - put(String.class.getName(), "iter.readString()"); - put(Object.class.getName(), "iter.read()"); - put(Any.class.getName(), "iter.readAny()"); - }}; - final static Map NATIVE_DECODERS = new HashMap() {{ - put(float.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readFloat(); - } - }); - put(Float.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readNull() ? null : iter.readFloat(); - } - }); - put(double.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readDouble(); - } - }); - put(Double.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readNull() ? null : iter.readDouble(); - } - }); - put(boolean.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readBoolean(); - } - }); - put(Boolean.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readNull() ? null : iter.readBoolean(); - } - }); - put(byte.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return Byte.valueOf((byte) iter.readShort()); - } - }); - put(Byte.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readNull() ? null : (byte)iter.readShort(); - } - }); - put(short.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readShort(); - } - }); - put(Short.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readNull() ? null : iter.readShort(); - } - }); - put(int.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readInt(); - } - }); - put(Integer.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readNull() ? null : iter.readInt(); - } - }); - put(char.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return (char)iter.readInt(); - } - }); - put(Character.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readNull() ? null : (char)iter.readInt(); - } - }); - put(long.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readLong(); - } - }); - put(Long.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readNull() ? null : iter.readLong(); - } - }); - put(BigDecimal.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readBigDecimal(); - } - }); - put(BigInteger.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readBigInteger(); - } - }); - put(String.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readString(); - } - }); - put(Object.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.read(); - } - }); - put(Any.class, new Decoder() { - @Override - public Object decode(JsonIterator iter) throws IOException { - return iter.readAny(); - } - }); - }}; + final static Map NATIVE_READS = new HashMap() { + { + put("float", "iter.readFloat()"); + put("double", "iter.readDouble()"); + put("boolean", "iter.readBoolean()"); + put("byte", "iter.readShort()"); + put("short", "iter.readShort()"); + put("int", "iter.readInt()"); + put("char", "iter.readInt()"); + put("long", "iter.readLong()"); + put(Float.class.getName(), "(iter.readNull() ? null : java.lang.Float.valueOf(iter.readFloat()))"); + put(Double.class.getName(), "(iter.readNull() ? null : java.lang.Double.valueOf(iter.readDouble()))"); + put(Boolean.class.getName(), "(iter.readNull() ? null : java.lang.Boolean.valueOf(iter.readBoolean()))"); + put(Byte.class.getName(), "(iter.readNull() ? null : java.lang.Byte.valueOf((byte)iter.readShort()))"); + put(Character.class.getName(), + "(iter.readNull() ? null : java.lang.Character.valueOf((char)iter.readShort()))"); + put(Short.class.getName(), "(iter.readNull() ? null : java.lang.Short.valueOf(iter.readShort()))"); + put(Integer.class.getName(), "(iter.readNull() ? null : java.lang.Integer.valueOf(iter.readInt()))"); + put(Long.class.getName(), "(iter.readNull() ? null : java.lang.Long.valueOf(iter.readLong()))"); + put(BigDecimal.class.getName(), "iter.readBigDecimal()"); + put(BigInteger.class.getName(), "iter.readBigInteger()"); + put(String.class.getName(), "iter.readString()"); + put(Object.class.getName(), "iter.read()"); + put(Any.class.getName(), "iter.readAny()"); + } + }; + final static Map NATIVE_DECODERS = new HashMap() { + { + put(float.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readFloat(); + } + }); + put(Float.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readNull() ? null : iter.readFloat(); + } + }); + put(double.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readDouble(); + } + }); + put(Double.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readNull() ? null : iter.readDouble(); + } + }); + put(boolean.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readBoolean(); + } + }); + put(Boolean.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readNull() ? null : iter.readBoolean(); + } + }); + put(byte.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return Byte.valueOf((byte) iter.readShort()); + } + }); + put(Byte.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readNull() ? null : (byte) iter.readShort(); + } + }); + put(short.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readShort(); + } + }); + put(Short.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readNull() ? null : iter.readShort(); + } + }); + put(int.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readInt(); + } + }); + put(Integer.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readNull() ? null : iter.readInt(); + } + }); + put(char.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return (char) iter.readInt(); + } + }); + put(Character.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readNull() ? null : (char) iter.readInt(); + } + }); + put(long.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readLong(); + } + }); + put(Long.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readNull() ? null : iter.readLong(); + } + }); + put(BigDecimal.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readBigDecimal(); + } + }); + put(BigInteger.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readBigInteger(); + } + }); + put(String.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readString(); + } + }); + put(Object.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.read(); + } + }); + put(Any.class, new Decoder() { + @Override + public Object decode(JsonIterator iter) throws IOException { + return iter.readAny(); + } + }); + } + }; public static String genReadOp(Type type) { String cacheKey = TypeLiteral.create(type).getDecoderCacheKey(); @@ -219,6 +224,11 @@ private static String genReadOp(String cacheKey, Type valueType) { } } } + + return genReadOpHelper(cacheKey, valueType, decoder); + } + + private static String genReadOpHelper(String cacheKey, Type valueType, Decoder decoder) { if (valueType == boolean.class) { if (!(decoder instanceof Decoder.BooleanDecoder)) { throw new JsonException("decoder for " + cacheKey + "must implement Decoder.BooleanDecoder");