diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java index ace6ee34e..89cdf14ed 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameRepository.java @@ -25,7 +25,6 @@ import org.jackhuang.hmcl.event.RefreshedVersionsEvent; import org.jackhuang.hmcl.event.RefreshingVersionsEvent; import org.jackhuang.hmcl.setting.EnumGameDirectory; import org.jackhuang.hmcl.setting.Profile; -import org.jackhuang.hmcl.setting.Settings; import org.jackhuang.hmcl.setting.VersionSetting; import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.io.FileUtils; @@ -227,8 +226,8 @@ public class HMCLGameRepository extends DefaultGameRepository { beingModpackVersions.remove(id); } - private static final Gson GSON = new GsonBuilder().setPrettyPrinting() - .registerTypeAdapter(VersionSetting.class, VersionSetting.Serializer.INSTANCE) + private static final Gson GSON = new GsonBuilder() + .setPrettyPrinting() .create(); private static final HashSet FORBIDDEN = new HashSet<>(Arrays.asList("modpack", "minecraftinstance", "manifest")); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java index 4c42faec4..55bb73898 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java @@ -52,15 +52,11 @@ public final class Config implements Cloneable, Observable { public static final int CURRENT_UI_VERSION = 0; private static final Gson CONFIG_GSON = new GsonBuilder() - .registerTypeAdapter(VersionSetting.class, VersionSetting.Serializer.INSTANCE) - .registerTypeAdapter(Profile.class, Profile.Serializer.INSTANCE) .registerTypeAdapter(File.class, FileTypeAdapter.INSTANCE) .registerTypeAdapter(ObservableList.class, new ObservableListCreator()) .registerTypeAdapter(ObservableSet.class, new ObservableSetCreator()) .registerTypeAdapter(ObservableMap.class, new ObservableMapCreator()) .registerTypeAdapterFactory(new JavaFxPropertyTypeAdapterFactory(true, true)) - .registerTypeAdapter(Theme.class, new Theme.TypeAdapter()) - .registerTypeAdapter(SupportedLocale.class, new SupportedLocale.TypeAdapter()) .registerTypeAdapter(EnumBackgroundImage.class, new EnumOrdinalDeserializer<>(EnumBackgroundImage.class)) // backward compatibility for backgroundType .registerTypeAdapter(Proxy.Type.class, new EnumOrdinalDeserializer<>(Proxy.Type.class)) // backward compatibility for hasProxy .setPrettyPrinting() diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java index 18630b7b3..7cc2b8755 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java @@ -18,6 +18,7 @@ package org.jackhuang.hmcl.setting; import com.google.gson.*; +import com.google.gson.annotations.JsonAdapter; import com.jfoenix.concurrency.JFXUtilities; import javafx.application.Platform; import javafx.beans.InvalidationListener; @@ -47,6 +48,7 @@ import static org.jackhuang.hmcl.ui.FXUtils.onInvalidating; * * @author huangyuhui */ +@JsonAdapter(Profile.Serializer.class) public final class Profile implements Observable { private final WeakListenerHolder listenerHolder = new WeakListenerHolder(); private final HMCLGameRepository repository; @@ -217,11 +219,6 @@ public final class Profile implements Observable { } public static final class Serializer implements JsonSerializer, JsonDeserializer { - public static final Serializer INSTANCE = new Serializer(); - - private Serializer() { - } - @Override public JsonElement serialize(Profile src, Type typeOfSrc, JsonSerializationContext context) { if (src == null) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java index 48191536f..850da607a 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java @@ -17,6 +17,7 @@ */ package org.jackhuang.hmcl.setting; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import javafx.beans.binding.Bindings; @@ -34,6 +35,7 @@ import java.util.logging.Level; import static org.jackhuang.hmcl.setting.ConfigHolder.config; +@JsonAdapter(Theme.TypeAdapter.class) public class Theme { public static final Theme BLUE = new Theme("blue", "#5C6BC0"); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java index d37268e4c..04a180a57 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/VersionSetting.java @@ -18,6 +18,8 @@ package org.jackhuang.hmcl.setting; import com.google.gson.*; +import com.google.gson.annotations.JsonAdapter; + import javafx.beans.InvalidationListener; import org.jackhuang.hmcl.Metadata; import org.jackhuang.hmcl.game.LaunchOptions; @@ -43,6 +45,7 @@ import static org.jackhuang.hmcl.setting.ConfigHolder.config; * * @author huangyuhui */ +@JsonAdapter(VersionSetting.Serializer.class) public final class VersionSetting { public transient String id; @@ -550,11 +553,6 @@ public final class VersionSetting { } public static class Serializer implements JsonSerializer, JsonDeserializer { - public static final Serializer INSTANCE = new Serializer(); - - private Serializer() { - } - @Override public JsonElement serialize(VersionSetting src, Type typeOfSrc, JsonSerializationContext context) { if (src == null) return JsonNull.INSTANCE; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java index f95bed99d..9e4960d8c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/i18n/Locales.java @@ -17,6 +17,7 @@ */ package org.jackhuang.hmcl.util.i18n; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import org.jackhuang.hmcl.util.Lang; @@ -83,6 +84,7 @@ public final class Locales { else throw new IllegalArgumentException("Unknown locale: " + locale); } + @JsonAdapter(SupportedLocale.TypeAdapter.class) public static class SupportedLocale { private final Locale locale; private final String name; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Argument.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Argument.java index 07eaa62ab..e0001ed96 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Argument.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Argument.java @@ -18,6 +18,8 @@ package org.jackhuang.hmcl.game; import com.google.gson.*; +import com.google.gson.annotations.JsonAdapter; + import org.jackhuang.hmcl.util.Immutable; import java.lang.reflect.Type; @@ -28,6 +30,7 @@ import java.util.Map; * * @author huangyuhui */ +@JsonAdapter(Argument.Serializer.class) @Immutable public interface Argument extends Cloneable { @@ -41,12 +44,6 @@ public interface Argument extends Cloneable { List toString(Map keys, Map features); class Serializer implements JsonDeserializer, JsonSerializer { - - public static final Serializer INSTANCE = new Serializer(); - - private Serializer() { - } - @Override public Argument deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { if (json.isJsonPrimitive()) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java index 8514a5f93..2bd73e4b8 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Library.java @@ -18,6 +18,7 @@ package org.jackhuang.hmcl.game; import com.google.gson.*; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.reflect.TypeToken; import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.ToStringBuilder; @@ -35,6 +36,7 @@ import java.util.Optional; * * @author huangyuhui */ +@JsonAdapter(Library.Serializer.class) public class Library implements Comparable { private final String groupId; @@ -189,12 +191,6 @@ public class Library implements Comparable { } public static class Serializer implements JsonDeserializer, JsonSerializer { - - public static final Serializer INSTANCE = new Serializer(); - - private Serializer() { - } - @Override public Library deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { if (json == null || json == JsonNull.INSTANCE) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/RuledArgument.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/RuledArgument.java index fcc9a6183..87603ba4c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/RuledArgument.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/RuledArgument.java @@ -18,6 +18,7 @@ package org.jackhuang.hmcl.game; import com.google.gson.*; +import com.google.gson.annotations.JsonAdapter; import com.google.gson.reflect.TypeToken; import org.jackhuang.hmcl.util.Immutable; @@ -32,6 +33,7 @@ import java.util.stream.Collectors; * * @author huangyuhui */ +@JsonAdapter(RuledArgument.Serializer.class) @Immutable public class RuledArgument implements Argument { @@ -74,12 +76,6 @@ public class RuledArgument implements Argument { } public static class Serializer implements JsonSerializer, JsonDeserializer { - - public static final Serializer INSTANCE = new Serializer(); - - private Serializer() { - } - @Override public JsonElement serialize(RuledArgument src, Type typeOfSrc, JsonSerializationContext context) { JsonObject obj = new JsonObject(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonUtils.java index a41932dc4..88b5e3b64 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/gson/JsonUtils.java @@ -21,12 +21,6 @@ import java.io.File; import java.util.Date; import java.util.UUID; -import org.jackhuang.hmcl.game.Argument; -import org.jackhuang.hmcl.game.Library; -import org.jackhuang.hmcl.game.RuledArgument; -import org.jackhuang.hmcl.game.StringArgument; -import org.jackhuang.hmcl.util.platform.Platform; - import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonParseException; @@ -39,13 +33,8 @@ public final class JsonUtils { public static final Gson GSON = new GsonBuilder() .enableComplexMapKeySerialization() .setPrettyPrinting() - .registerTypeAdapter(Library.class, Library.Serializer.INSTANCE) - .registerTypeAdapter(Argument.class, Argument.Serializer.INSTANCE) - .registerTypeAdapter(StringArgument.class, Argument.Serializer.INSTANCE) - .registerTypeAdapter(RuledArgument.class, RuledArgument.Serializer.INSTANCE) .registerTypeAdapter(Date.class, DateTypeAdapter.INSTANCE) .registerTypeAdapter(UUID.class, UUIDTypeAdapter.INSTANCE) - .registerTypeAdapter(Platform.class, Platform.Serializer.INSTANCE) .registerTypeAdapter(File.class, FileTypeAdapter.INSTANCE) .registerTypeAdapterFactory(ValidationTypeAdapterFactory.INSTANCE) .registerTypeAdapterFactory(LowerCaseEnumTypeAdapterFactory.INSTANCE) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Platform.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Platform.java index 1a648ece5..fc0687d1b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Platform.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Platform.java @@ -18,6 +18,7 @@ package org.jackhuang.hmcl.util.platform; import com.google.gson.*; +import com.google.gson.annotations.JsonAdapter; import java.lang.reflect.Type; @@ -27,6 +28,7 @@ import java.lang.reflect.Type; * * @author huangyuhui */ +@JsonAdapter(Platform.Serializer.class) public enum Platform { BIT_32("32"), BIT_64("64"), @@ -56,12 +58,6 @@ public enum Platform { * The json serializer to {@link Platform}. */ public static class Serializer implements JsonSerializer, JsonDeserializer { - - public static final Serializer INSTANCE = new Serializer(); - - private Serializer() { - } - @Override public JsonElement serialize(Platform t, Type type, JsonSerializationContext jsc) { if (t == null)