Commit c6323e97 authored by AnimeGitB's avatar AnimeGitB Committed by Luke H-W
Browse files

Funnel all gson calls into helper functions

Add deprecated getGsonFactory for plugin compat until 3.0
parent 76fcbb47
...@@ -20,12 +20,25 @@ import it.unimi.dsi.fastutil.ints.IntList; ...@@ -20,12 +20,25 @@ import it.unimi.dsi.fastutil.ints.IntList;
import org.slf4j.Logger; import org.slf4j.Logger;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonSyntaxException;
import com.google.gson.reflect.TypeToken;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import static emu.grasscutter.utils.Language.translate; import static emu.grasscutter.utils.Language.translate;
@SuppressWarnings({"UnusedReturnValue", "BooleanMethodIsAlwaysInverted"}) @SuppressWarnings({"UnusedReturnValue", "BooleanMethodIsAlwaysInverted"})
public final class Utils { public final class Utils {
private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
@Deprecated(forRemoval = true)
public static Gson getGsonFactory() {
return gson;
}
public static final Random random = new Random(); public static final Random random = new Random();
public static int randomRange(int min, int max) { public static int randomRange(int min, int max) {
...@@ -158,8 +171,7 @@ public final class Utils { ...@@ -158,8 +171,7 @@ public final class Utils {
* @param object The object to log. * @param object The object to log.
*/ */
public static void logObject(Object object) { public static void logObject(Object object) {
String asJson = Grasscutter.getGsonFactory().toJson(object); Grasscutter.getLogger().info(jsonEncode(object));
Grasscutter.getLogger().info(asJson);
} }
/** /**
...@@ -357,6 +369,44 @@ public final class Utils { ...@@ -357,6 +369,44 @@ public final class Utils {
return Base64.getDecoder().decode(toDecode); return Base64.getDecoder().decode(toDecode);
} }
/*
* Encode an object to a JSON string
*/
public static String jsonEncode(Object object) {
return gson.toJson(object);
}
public static <T> T jsonDecode(JsonElement jsonElement, Class<T> classType) throws JsonSyntaxException {
return gson.fromJson(jsonElement, classType);
}
public static <T> T loadJsonToClass(InputStreamReader fileReader, Class<T> classType) throws IOException {
return gson.fromJson(fileReader, classType);
}
public static <T> T loadJsonToClass(String filename, Class<T> classType) throws IOException {
try (InputStreamReader fileReader = new InputStreamReader(new FileInputStream(Utils.toFilePath(filename)), StandardCharsets.UTF_8)) {
return loadJsonToClass(fileReader, classType);
}
}
public static <T> List<T> loadJsonToList(InputStreamReader fileReader, Class<T> classType) throws IOException {
return gson.fromJson(fileReader, TypeToken.getParameterized(List.class, classType).getType());
}
public static <T> List<T> loadJsonToList(String filename, Class<T> classType) throws IOException {
try (InputStreamReader fileReader = new InputStreamReader(new FileInputStream(Utils.toFilePath(filename)), StandardCharsets.UTF_8)) {
return loadJsonToList(fileReader, classType);
}
}
public static <T1,T2> Map<T1,T2> loadJsonToMap(InputStreamReader fileReader, Class<T1> keyType, Class<T2> valueType) throws IOException {
return gson.fromJson(fileReader, TypeToken.getParameterized(Map.class, keyType, valueType).getType());
}
public static <T1,T2> Map<T1,T2> loadJsonToMap(String filename, Class<T1> keyType, Class<T2> valueType) throws IOException {
try (InputStreamReader fileReader = new InputStreamReader(new FileInputStream(Utils.toFilePath(filename)), StandardCharsets.UTF_8)) {
return loadJsonToMap(fileReader, keyType, valueType);
}
}
/** /**
* Safely JSON decodes a given string. * Safely JSON decodes a given string.
* @param jsonData The JSON-encoded data. * @param jsonData The JSON-encoded data.
...@@ -364,7 +414,7 @@ public final class Utils { ...@@ -364,7 +414,7 @@ public final class Utils {
*/ */
public static <T> T jsonDecode(String jsonData, Class<T> classType) { public static <T> T jsonDecode(String jsonData, Class<T> classType) {
try { try {
return Grasscutter.getGsonFactory().fromJson(jsonData, classType); return gson.fromJson(jsonData, classType);
} catch (Exception ignored) { } catch (Exception ignored) {
return null; return null;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment