diff --git a/src/main/java/cn/citycraft/GsonAgent/GsonAgent.java b/src/main/java/cn/citycraft/GsonAgent/GsonAgent.java index 8140079..33327da 100644 --- a/src/main/java/cn/citycraft/GsonAgent/GsonAgent.java +++ b/src/main/java/cn/citycraft/GsonAgent/GsonAgent.java @@ -9,10 +9,8 @@ import cn.citycraft.GsonAgent.api.JsonNull; import cn.citycraft.GsonAgent.api.JsonObject; import cn.citycraft.GsonAgent.api.JsonParser; import cn.citycraft.GsonAgent.api.JsonPrimitive; -import cn.citycraft.GsonAgent.api.TypeAdapter; import cn.citycraft.GsonAgent.api.stream.JsonReader; import cn.citycraft.GsonAgent.api.stream.JsonWriter; -import cn.citycraft.GsonAgent.api.utils.Utils; /** * Minecraft Gson代理类(用于兼容1.7-1.8Gson类库) @@ -21,124 +19,103 @@ import cn.citycraft.GsonAgent.api.utils.Utils; * @since 2016年1月5日 下午12:51:30 * @author 喵♂呜,曲尘 */ -@SuppressWarnings({ "unchecked", "rawtypes", "unused" }) public class GsonAgent { - public static boolean newVersion = false; - private static String internalPackageName; - private static Class TypeAdapter; + public static boolean newVersion = false; - static { - internalPackageName = "cn.citycraft.GsonAgent."; - try { - Thread.currentThread().getContextClassLoader().loadClass("com.google.gson.Gson"); - newVersion = true; - internalPackageName += "normal."; - } catch (final Exception | Error e) { - internalPackageName += "nms."; - } - try { - TypeAdapter = getInternalClass("bind.TypeAdapter"); - } catch (final Exception e) { - } - } + static { + try { + Thread.currentThread().getContextClassLoader().loadClass("com.google.gson.Gson"); + newVersion = true; + } catch (final Exception | Error e) { + } + } - /** - * 初始化GsonAgent - * - * @return 根据新老版本获得不同的实例 - */ - public static Gson newGson() { - if (newVersion) { - return new cn.citycraft.GsonAgent.normal.GsonHandle(); - } - return new cn.citycraft.GsonAgent.nms.GsonHandle(); - } + /** + * 初始化GsonAgent + * + * @return 根据新老版本获得不同的实例 + */ + public static Gson newGson() { + if (newVersion) { + return new cn.citycraft.GsonAgent.normal.GsonHandle(); + } + return new cn.citycraft.GsonAgent.nms.GsonHandle(); + } - public static JsonArray newJsonArray() { - if (newVersion) { - return new cn.citycraft.GsonAgent.normal.JsonArrayHandle(); - } - return new cn.citycraft.GsonAgent.nms.JsonArrayHandle(); - } + public static JsonArray newJsonArray() { + if (newVersion) { + return new cn.citycraft.GsonAgent.normal.JsonArrayHandle(); + } + return new cn.citycraft.GsonAgent.nms.JsonArrayHandle(); + } - public static JsonNull newJsonNull() { - if (newVersion) { - return new cn.citycraft.GsonAgent.normal.JsonNullHandle(); - } - return new cn.citycraft.GsonAgent.nms.JsonNullHandle(); - } + public static JsonNull newJsonNull() { + if (newVersion) { + return new cn.citycraft.GsonAgent.normal.JsonNullHandle(); + } + return new cn.citycraft.GsonAgent.nms.JsonNullHandle(); + } - public static JsonObject newJsonObject() { - if (newVersion) { - return new cn.citycraft.GsonAgent.normal.JsonObjectHandle(); - } - return new cn.citycraft.GsonAgent.nms.JsonObjectHandle(); - } + public static JsonObject newJsonObject() { + if (newVersion) { + return new cn.citycraft.GsonAgent.normal.JsonObjectHandle(); + } + return new cn.citycraft.GsonAgent.nms.JsonObjectHandle(); + } - public static JsonParser newJsonParser() { - if (newVersion) { - return new cn.citycraft.GsonAgent.normal.JsonParserHandle(); - } - return new cn.citycraft.GsonAgent.normal.JsonParserHandle(); - } + public static JsonParser newJsonParser() { + if (newVersion) { + return new cn.citycraft.GsonAgent.normal.JsonParserHandle(); + } + return new cn.citycraft.GsonAgent.normal.JsonParserHandle(); + } - public static JsonPrimitive newJsonPrimitive(final Boolean value) { - if (newVersion) { - return new cn.citycraft.GsonAgent.normal.JsonPrimitiveHandle(value); - } - return new cn.citycraft.GsonAgent.nms.JsonPrimitiveHandle(value); - } + public static JsonPrimitive newJsonPrimitive(final Boolean value) { + if (newVersion) { + return new cn.citycraft.GsonAgent.normal.JsonPrimitiveHandle(value); + } + return new cn.citycraft.GsonAgent.nms.JsonPrimitiveHandle(value); + } - public static JsonPrimitive newJsonPrimitive(final Character value) { - if (newVersion) { - return new cn.citycraft.GsonAgent.normal.JsonPrimitiveHandle(value); - } - return new cn.citycraft.GsonAgent.nms.JsonPrimitiveHandle(value); - } + public static JsonPrimitive newJsonPrimitive(final Character value) { + if (newVersion) { + return new cn.citycraft.GsonAgent.normal.JsonPrimitiveHandle(value); + } + return new cn.citycraft.GsonAgent.nms.JsonPrimitiveHandle(value); + } - public static JsonPrimitive newJsonPrimitive(final Number value) { - if (newVersion) { - return new cn.citycraft.GsonAgent.normal.JsonPrimitiveHandle(value); - } - return new cn.citycraft.GsonAgent.nms.JsonPrimitiveHandle(value); - } + public static JsonPrimitive newJsonPrimitive(final Number value) { + if (newVersion) { + return new cn.citycraft.GsonAgent.normal.JsonPrimitiveHandle(value); + } + return new cn.citycraft.GsonAgent.nms.JsonPrimitiveHandle(value); + } - public static JsonPrimitive newJsonPrimitive(final String value) { - if (newVersion) { - return new cn.citycraft.GsonAgent.normal.JsonPrimitiveHandle(value); - } - return new cn.citycraft.GsonAgent.nms.JsonPrimitiveHandle(value); - } + public static JsonPrimitive newJsonPrimitive(final String value) { + if (newVersion) { + return new cn.citycraft.GsonAgent.normal.JsonPrimitiveHandle(value); + } + return new cn.citycraft.GsonAgent.nms.JsonPrimitiveHandle(value); + } - public static JsonReader newJsonReader(final Reader in) { - if (newVersion) { - return new cn.citycraft.GsonAgent.normal.stream.JsonReaderHandle(in); - } - return new cn.citycraft.GsonAgent.nms.stream.JsonReaderHandle(in); - } + public static JsonReader newJsonReader(final Reader in) { + if (newVersion) { + return new cn.citycraft.GsonAgent.normal.stream.JsonReaderHandle(in); + } + return new cn.citycraft.GsonAgent.nms.stream.JsonReaderHandle(in); + } - public static JsonWriter newJsonWriter(final Writer out) { - if (newVersion) { - return new cn.citycraft.GsonAgent.normal.stream.JsonWriterHandle(out); - } - return new cn.citycraft.GsonAgent.nms.stream.JsonWriterHandle(out); - } - - public static TypeAdapter newTypeAdapter() { - return (TypeAdapter) Utils.newInstance(TypeAdapter); - } - - private static Class getInternalClass(final String className) throws ClassNotFoundException { - return Class.forName(internalPackageName + className + "Handle"); - } - - private void none() { - Class clazz; - clazz = cn.citycraft.GsonAgent.api.bind.TypeAdapter.class; - clazz = cn.citycraft.GsonAgent.nms.bind.TypeAdapterHandle.class; - clazz = cn.citycraft.GsonAgent.normal.bind.TypeAdapterHandle.class; - clazz = cn.citycraft.GsonAgent.api.bind.TypeAdapterFactory.class; - clazz = cn.citycraft.GsonAgent.nms.bind.TypeAdapterFactoryHandle.class; - clazz = cn.citycraft.GsonAgent.normal.bind.TypeAdapterFactoryHandle.class; - } + public static JsonWriter newJsonWriter(final Writer out) { + if (newVersion) { + return new cn.citycraft.GsonAgent.normal.stream.JsonWriterHandle(out); + } + return new cn.citycraft.GsonAgent.nms.stream.JsonWriterHandle(out); + } + // FIXME ###会造成java.lang.StackOverflowError### + // public static TypeAdapter newTypeAdapter(final TypeAdapter typeAdapter) { + // if (newVersion) { + // return new cn.citycraft.GsonAgent.normal.bind.TypeAdapterHandle((com.google.gson.TypeAdapter) typeAdapter); + // } + // return new cn.citycraft.GsonAgent.nms.bind.TypeAdapterHandle((net.minecraft.util.com.google.gson.TypeAdapter) typeAdapter); + // } } diff --git a/src/main/java/cn/citycraft/GsonAgent/nms/bind/TypeAdapterHandle.java b/src/main/java/cn/citycraft/GsonAgent/nms/bind/TypeAdapterHandle.java index bf6a0a9..b469407 100644 --- a/src/main/java/cn/citycraft/GsonAgent/nms/bind/TypeAdapterHandle.java +++ b/src/main/java/cn/citycraft/GsonAgent/nms/bind/TypeAdapterHandle.java @@ -10,68 +10,68 @@ import net.minecraft.util.com.google.gson.TypeAdapter; @SuppressWarnings({ "unchecked", "rawtypes" }) public class TypeAdapterHandle implements cn.citycraft.GsonAgent.api.TypeAdapter { - private final TypeAdapter handle; + private final TypeAdapter handle; - public TypeAdapterHandle(final TypeAdapter handle) { - this.handle = handle; - } + public TypeAdapterHandle(final TypeAdapter handle) { + this.handle = handle; + } - @Override - public T fromJson(final Reader in) throws IOException { - return getHandle().fromJson(in); - } + @Override + public T fromJson(final Reader in) throws IOException { + return getHandle().fromJson(in); + } - @Override - public T fromJson(final String json) throws IOException { - return getHandle().fromJson(json); - } + @Override + public T fromJson(final String json) throws IOException { + return getHandle().fromJson(json); + } - @Override - public T fromJsonTree(final cn.citycraft.GsonAgent.api.JsonElement jsonTree) { - return getHandle().fromJsonTree(((JsonElementHandle) jsonTree).getHandle()); - } + @Override + public T fromJsonTree(final cn.citycraft.GsonAgent.api.JsonElement jsonTree) { + return getHandle().fromJsonTree(((JsonElementHandle) jsonTree).getHandle()); + } - @Override - public TypeAdapter getHandle() { - return handle; - } + @Override + public TypeAdapter getHandle() { + return handle; + } - @Override - public TypeAdapterHandle nullSafe() { - return new TypeAdapterHandle(this.handle); - } + @Override + public TypeAdapterHandle nullSafe() { + return new TypeAdapterHandle(this.handle); + } - @Override - public T read(final cn.citycraft.GsonAgent.api.stream.JsonReader reader) throws IOException { - if (reader.peek().name().equals("NULL")) { - reader.nextNull(); - return null; - } - return this.read(reader); - } + @Override + public T read(final cn.citycraft.GsonAgent.api.stream.JsonReader reader) throws IOException { + if (reader.peek().name().equals("NULL")) { + reader.nextNull(); + return null; + } + return this.read(reader); + } - @Override - public String toJson(final T value) throws IOException { - return getHandle().toJson(value); - } + @Override + public String toJson(final T value) throws IOException { + return getHandle().toJson(value); + } - @Override - public void toJson(final Writer out, final T value) throws IOException { - getHandle().toJson(out, value); - } + @Override + public void toJson(final Writer out, final T value) throws IOException { + getHandle().toJson(out, value); + } - @Override - public JsonElementHandle toJsonTree(final T value) { - return new JsonElementHandle(getHandle().toJsonTree(value)); - } + @Override + public JsonElementHandle toJsonTree(final T value) { + return new JsonElementHandle(getHandle().toJsonTree(value)); + } - @Override - public void write(final cn.citycraft.GsonAgent.api.stream.JsonWriter out, final T value) throws IOException { - if (value == null) { - out.nullValue(); - } else { - this.write(out, value); - } - } + @Override + public void write(final cn.citycraft.GsonAgent.api.stream.JsonWriter out, final T value) throws IOException { + if (value == null) { + out.nullValue(); + } else { + this.write(out, value); + } + } } diff --git a/src/main/java/cn/citycraft/GsonAgent/normal/bind/TypeAdapterHandle.java b/src/main/java/cn/citycraft/GsonAgent/normal/bind/TypeAdapterHandle.java index 2e56055..60af719 100644 --- a/src/main/java/cn/citycraft/GsonAgent/normal/bind/TypeAdapterHandle.java +++ b/src/main/java/cn/citycraft/GsonAgent/normal/bind/TypeAdapterHandle.java @@ -11,68 +11,68 @@ import cn.citycraft.GsonAgent.normal.JsonElementHandle; @SuppressWarnings({ "unchecked", "rawtypes" }) public class TypeAdapterHandle implements cn.citycraft.GsonAgent.api.TypeAdapter { - private final TypeAdapter handle; + private final TypeAdapter handle; - public TypeAdapterHandle(final TypeAdapter handle) { - this.handle = handle; - } + public TypeAdapterHandle(final TypeAdapter handle) { + this.handle = handle; + } - @Override - public T fromJson(final Reader in) throws IOException { - return getHandle().fromJson(in); - } + @Override + public T fromJson(final Reader in) throws IOException { + return getHandle().fromJson(in); + } - @Override - public T fromJson(final String json) throws IOException { - return getHandle().fromJson(json); - } + @Override + public T fromJson(final String json) throws IOException { + return getHandle().fromJson(json); + } - @Override - public T fromJsonTree(final cn.citycraft.GsonAgent.api.JsonElement jsonTree) { - return getHandle().fromJsonTree(((JsonElementHandle) jsonTree).getHandle()); - } + @Override + public T fromJsonTree(final cn.citycraft.GsonAgent.api.JsonElement jsonTree) { + return getHandle().fromJsonTree(((JsonElementHandle) jsonTree).getHandle()); + } - @Override - public TypeAdapter getHandle() { - return handle; - } + @Override + public TypeAdapter getHandle() { + return handle; + } - @Override - public TypeAdapterHandle nullSafe() { - return new TypeAdapterHandle(this.handle); - } + @Override + public TypeAdapterHandle nullSafe() { + return new TypeAdapterHandle(this.handle); + } - @Override - public T read(final cn.citycraft.GsonAgent.api.stream.JsonReader reader) throws IOException { - if (reader.peek().name().equals("NULL")) { - reader.nextNull(); - return null; - } - return this.read(reader); - } + @Override + public T read(final cn.citycraft.GsonAgent.api.stream.JsonReader reader) throws IOException { + if (reader.peek().name().equals("NULL")) { + reader.nextNull(); + return null; + } + return this.read(reader); + } - @Override - public String toJson(final T value) throws IOException { - return getHandle().toJson(value); - } + @Override + public String toJson(final T value) throws IOException { + return getHandle().toJson(value); + } - @Override - public void toJson(final Writer out, final T value) throws IOException { - getHandle().toJson(out, value); - } + @Override + public void toJson(final Writer out, final T value) throws IOException { + getHandle().toJson(out, value); + } - @Override - public JsonElementHandle toJsonTree(final T value) { - return new JsonElementHandle(getHandle().toJsonTree(value)); - } + @Override + public JsonElementHandle toJsonTree(final T value) { + return new JsonElementHandle(getHandle().toJsonTree(value)); + } - @Override - public void write(final cn.citycraft.GsonAgent.api.stream.JsonWriter out, final T value) throws IOException { - if (value == null) { - out.nullValue(); - } else { - this.write(out, value); - } - } + @Override + public void write(final cn.citycraft.GsonAgent.api.stream.JsonWriter out, final T value) throws IOException { + if (value == null) { + out.nullValue(); + } else { + this.write(out, value); + } + } }