From b33e014f71b4812f63483f5b5cafb026b41ea5f2 Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Sat, 22 Sep 2018 12:37:03 +0800 Subject: [PATCH] Move GSON const to JsonUtils --- .../hmcl/game/HMCLModpackExportTask.java | 6 ++-- .../hmcl/game/HMCLModpackInstallTask.java | 6 ++-- .../jackhuang/hmcl/game/ModpackHelper.java | 4 +-- .../hmcl/download/DefaultCacheRepository.java | 5 +-- .../hmcl/download/DefaultGameBuilder.java | 4 +-- .../hmcl/download/forge/ForgeInstallTask.java | 4 +-- .../hmcl/download/forge/ForgeVersionList.java | 4 +-- .../download/game/GameAssetDownloadTask.java | 4 +-- .../hmcl/download/game/GameVersionList.java | 4 +-- .../download/game/LibrariesUniqueTask.java | 6 ++-- .../download/game/VersionJsonSaveTask.java | 4 +-- .../liteloader/LiteLoaderBMCLVersionList.java | 4 +-- .../liteloader/LiteLoaderVersionList.java | 4 +-- .../optifine/OptiFineBMCLVersionList.java | 4 +-- .../hmcl/game/DefaultGameRepository.java | 12 +++---- .../hmcl/mod/CurseCompletionTask.java | 5 +-- .../jackhuang/hmcl/mod/CurseInstallTask.java | 5 +-- .../jackhuang/hmcl/mod/ForgeModMetadata.java | 3 +- .../jackhuang/hmcl/mod/LiteModMetadata.java | 5 +-- .../hmcl/mod/MinecraftInstanceTask.java | 4 +-- .../hmcl/mod/MultiMCModpackInstallTask.java | 5 +-- .../org/jackhuang/hmcl/util/Constants.java | 31 +----------------- .../jackhuang/hmcl/util/gson/JsonUtils.java | 32 +++++++++++++++++-- 23 files changed, 84 insertions(+), 81 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackExportTask.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackExportTask.java index 32d57b26b..89fe178de 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackExportTask.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackExportTask.java @@ -19,8 +19,8 @@ package org.jackhuang.hmcl.game; import org.jackhuang.hmcl.mod.Modpack; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.Logging; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.Zipper; import java.io.File; @@ -73,8 +73,8 @@ public class HMCLModpackExportTask extends Task { Version mv = repository.getResolvedVersion(version); String gameVersion = GameVersion.minecraftVersion(repository.getVersionJar(version)) .orElseThrow(() -> new IllegalStateException("Cannot parse the version of " + version)); - zip.putTextFile(Constants.GSON.toJson(mv.setJar(gameVersion)), "minecraft/pack.json"); // Making "jar" to gameVersion is to be compatible with old HMCL. - zip.putTextFile(Constants.GSON.toJson(modpack.setGameVersion(gameVersion)), "modpack.json"); // Newer HMCL only reads 'gameVersion' field. + zip.putTextFile(JsonUtils.GSON.toJson(mv.setJar(gameVersion)), "minecraft/pack.json"); // Making "jar" to gameVersion is to be compatible with old HMCL. + zip.putTextFile(JsonUtils.GSON.toJson(modpack.setGameVersion(gameVersion)), "modpack.json"); // Newer HMCL only reads 'gameVersion' field. } } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java index 43503d059..f01d7847c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackInstallTask.java @@ -27,7 +27,7 @@ import org.jackhuang.hmcl.mod.ModpackConfiguration; import org.jackhuang.hmcl.mod.ModpackInstallTask; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.CompressingUtils; import org.jackhuang.hmcl.util.io.FileUtils; @@ -65,7 +65,7 @@ public final class HMCLModpackInstallTask extends Task { ModpackConfiguration config = null; try { if (json.exists()) { - config = Constants.GSON.fromJson(FileUtils.readText(json), new TypeToken>() { + config = JsonUtils.GSON.fromJson(FileUtils.readText(json), new TypeToken>() { }.getType()); if (!MODPACK_TYPE.equals(config.getType())) @@ -89,7 +89,7 @@ public final class HMCLModpackInstallTask extends Task { @Override public void execute() throws Exception { String json = CompressingUtils.readTextZipEntry(zipFile, "minecraft/pack.json"); - Version version = Constants.GSON.fromJson(json, Version.class).setId(name).setJar(null); + Version version = JsonUtils.GSON.fromJson(json, Version.class).setId(name).setJar(null); dependencies.add(new VersionJsonSaveTask(repository, version)); dependencies.add(new MinecraftInstanceTask<>(zipFile, "/minecraft", modpack, MODPACK_TYPE, repository.getModpackConfiguration(name))); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java index 8342311ca..fa2202cb2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java @@ -25,8 +25,8 @@ import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.VersionSetting; import org.jackhuang.hmcl.task.FinalizedCallback; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.Lang; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; @@ -64,7 +64,7 @@ public final class ModpackHelper { throw new FileNotFoundException(file.getPath()); else try { - return Constants.GSON.fromJson(FileUtils.readText(file), new TypeToken>() { + return JsonUtils.GSON.fromJson(FileUtils.readText(file), new TypeToken>() { }.getType()); } catch (JsonParseException e) { throw new IOException("Malformed modpack configuration"); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java index a42ae7c58..aa1bf958c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultCacheRepository.java @@ -21,6 +21,7 @@ import org.jackhuang.hmcl.download.game.LibraryDownloadTask; import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.game.LibraryDownloadInfo; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.platform.OperatingSystem; @@ -58,7 +59,7 @@ public class DefaultCacheRepository extends CacheRepository { lock.writeLock().lock(); try { if (Files.isRegularFile(indexFile)) - index = Constants.GSON.fromJson(FileUtils.readText(indexFile.toFile()), Index.class); + index = JsonUtils.GSON.fromJson(FileUtils.readText(indexFile.toFile()), Index.class); else index = new Index(); } catch (IOException e) { @@ -193,7 +194,7 @@ public class DefaultCacheRepository extends CacheRepository { private void saveIndex() { if (indexFile == null || index == null) return; try { - FileUtils.writeText(indexFile.toFile(), Constants.GSON.toJson(index)); + FileUtils.writeText(indexFile.toFile(), JsonUtils.GSON.toJson(index)); } catch (IOException e) { Logging.LOG.log(Level.SEVERE, "Unable to save index.json", e); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java index 08072641e..dd613e59d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java @@ -22,8 +22,8 @@ import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.ParallelTask; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.AutoTypingMap; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.function.ExceptionalFunction; +import org.jackhuang.hmcl.util.gson.JsonUtils; /** * @@ -50,7 +50,7 @@ public class DefaultGameBuilder extends GameBuilder { @Override public Task buildAsync() { return new VersionJsonDownloadTask(gameVersion, dependencyManager).then(variables -> { - Version version = Constants.GSON.fromJson(variables.get(VersionJsonDownloadTask.ID), Version.class); + Version version = JsonUtils.GSON.fromJson(variables.get(VersionJsonDownloadTask.ID), Version.class); version = version.setId(name).setJar(null); variables.set("version", version); Task result = downloadGameAsync(gameVersion, version).then(new ParallelTask( diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallTask.java index 1cb67bb78..2b0d6ebef 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeInstallTask.java @@ -24,7 +24,7 @@ import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.task.TaskResult; -import org.jackhuang.hmcl.util.Constants; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.IOUtils; import org.jackhuang.hmcl.util.io.NetworkUtils; @@ -89,7 +89,7 @@ public final class ForgeInstallTask extends TaskResult { if (stream == null) throw new IOException("Malformed forge installer file, install_profile.json does not exist."); String json = IOUtils.readFullyAsString(stream); - ForgeInstallProfile installProfile = Constants.GSON.fromJson(json, ForgeInstallProfile.class); + ForgeInstallProfile installProfile = JsonUtils.GSON.fromJson(json, ForgeInstallProfile.class); if (installProfile == null) throw new IOException("Malformed forge installer file, install_profile.json does not exist."); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java index 48764b909..8f691dd63 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java @@ -21,8 +21,8 @@ import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.NetworkUtils; import org.jackhuang.hmcl.util.versioning.VersionNumber; @@ -60,7 +60,7 @@ public final class ForgeVersionList extends VersionList { lock.writeLock().lock(); try { - ForgeVersionRoot root = Constants.GSON.fromJson(task.getResult(), ForgeVersionRoot.class); + ForgeVersionRoot root = JsonUtils.GSON.fromJson(task.getResult(), ForgeVersionRoot.class); if (root == null) return; versions.clear(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java index 687571dc8..5a30ba6f8 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameAssetDownloadTask.java @@ -24,10 +24,10 @@ import org.jackhuang.hmcl.game.AssetObject; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.NetworkUtils; import org.jackhuang.hmcl.util.CacheRepository; +import org.jackhuang.hmcl.util.gson.JsonUtils; import java.io.File; import java.util.Collection; @@ -75,7 +75,7 @@ public final class GameAssetDownloadTask extends Task { @Override public void execute() throws Exception { - AssetIndex index = Constants.GSON.fromJson(FileUtils.readText(assetIndexFile), AssetIndex.class); + AssetIndex index = JsonUtils.GSON.fromJson(FileUtils.readText(assetIndexFile), AssetIndex.class); int progress = 0; if (index != null) for (AssetObject assetObject : index.getObjects().values()) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java index 41278937f..8214bc1c3 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java @@ -21,8 +21,8 @@ import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.NetworkUtils; import java.util.Collection; @@ -70,7 +70,7 @@ public final class GameVersionList extends VersionList { try { versions.clear(); - GameRemoteVersions root = Constants.GSON.fromJson(task.getResult(), GameRemoteVersions.class); + GameRemoteVersions root = JsonUtils.GSON.fromJson(task.getResult(), GameRemoteVersions.class); for (GameRemoteVersionInfo remoteVersion : root.getVersions()) { versions.put(remoteVersion.getGameVersion(), new GameRemoteVersion( remoteVersion.getGameVersion(), diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibrariesUniqueTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibrariesUniqueTask.java index 549c8cfc5..1e664d8bf 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibrariesUniqueTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibrariesUniqueTask.java @@ -21,8 +21,8 @@ import org.jackhuang.hmcl.game.CompatibilityRule; import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.TaskResult; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.SimpleMultimap; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.util.ArrayList; @@ -53,7 +53,7 @@ public class LibrariesUniqueTask extends TaskResult { for (Library library : libraries) { String id = library.getGroupId() + ":" + library.getArtifactId(); VersionNumber number = VersionNumber.asVersion(library.getVersion()); - String serialized = Constants.GSON.toJson(library); + String serialized = JsonUtils.GSON.toJson(library); if (multimap.containsKey(id)) { boolean duplicate = false; @@ -68,7 +68,7 @@ public class LibrariesUniqueTask extends TaskResult { } else if (number.compareTo(otherNumber) == 0) { // same library id. // prevent from duplicated libraries if (library.equals(otherLibrary)) { - String otherSerialized = Constants.GSON.toJson(otherLibrary); + String otherSerialized = JsonUtils.GSON.toJson(otherLibrary); // A trick, the library that has more information is better, which can be // considered whose serialized JSON text will be longer. if (serialized.length() > otherSerialized.length()) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonSaveTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonSaveTask.java index 758469aeb..b0e14f863 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonSaveTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/VersionJsonSaveTask.java @@ -20,7 +20,7 @@ package org.jackhuang.hmcl.download.game; import org.jackhuang.hmcl.game.DefaultGameRepository; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; @@ -54,6 +54,6 @@ public final class VersionJsonSaveTask extends Task { File json = repository.getVersionJson(version.getId()).getAbsoluteFile(); if (!FileUtils.makeFile(json)) throw new IOException("Cannot create file " + json); - FileUtils.writeText(json, Constants.GSON.toJson(version)); + FileUtils.writeText(json, JsonUtils.GSON.toJson(version)); } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderBMCLVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderBMCLVersionList.java index ed8e41291..f42e0645c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderBMCLVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderBMCLVersionList.java @@ -21,7 +21,7 @@ import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.NetworkUtils; import org.jackhuang.hmcl.util.versioning.VersionNumber; import org.w3c.dom.Document; @@ -65,7 +65,7 @@ public final class LiteLoaderBMCLVersionList extends VersionList entry : root.getVersions().entrySet()) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderVersionList.java index 42b5b19c4..391cf87ac 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/liteloader/LiteLoaderVersionList.java @@ -21,7 +21,7 @@ import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.NetworkUtils; import org.jackhuang.hmcl.util.versioning.VersionNumber; import org.w3c.dom.Document; @@ -65,7 +65,7 @@ public final class LiteLoaderVersionList extends VersionList entry : root.getVersions().entrySet()) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java index e53186f6d..1b02e6827 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java @@ -22,8 +22,8 @@ import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.task.GetTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.StringUtils; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.NetworkUtils; import org.jackhuang.hmcl.util.versioning.VersionNumber; @@ -58,7 +58,7 @@ public final class OptiFineBMCLVersionList extends VersionList duplicates = new HashSet<>(); - List root = Constants.GSON.fromJson(task.getResult(), new TypeToken>() { + List root = JsonUtils.GSON.fromJson(task.getResult(), new TypeToken>() { }.getType()); for (OptiFineVersion element : root) { String version = element.getType() + "_" + element.getPatch(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java index 758e9830c..96933ce4e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/DefaultGameRepository.java @@ -21,9 +21,9 @@ import com.google.gson.JsonParseException; import com.google.gson.JsonSyntaxException; import org.jackhuang.hmcl.event.*; import org.jackhuang.hmcl.task.Schedulers; -import org.jackhuang.hmcl.util.Constants; import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.ToStringBuilder; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; @@ -113,7 +113,7 @@ public class DefaultGameRepository implements GameRepository { } public Version readVersionJson(File file) throws IOException, JsonSyntaxException { - return Constants.GSON.fromJson(FileUtils.readText(file), Version.class); + return JsonUtils.GSON.fromJson(FileUtils.readText(file), Version.class); } @Override @@ -142,7 +142,7 @@ public class DefaultGameRepository implements GameRepository { if (fromVersion.getId().equals(fromVersion.getJar())) fromVersion = fromVersion.setJar(to); - FileUtils.writeText(toJson, Constants.GSON.toJson(fromVersion.setId(to))); + FileUtils.writeText(toJson, JsonUtils.GSON.toJson(fromVersion.setId(to))); return true; } catch (IOException | JsonParseException | VersionNotFoundException e) { return false; @@ -229,7 +229,7 @@ public class DefaultGameRepository implements GameRepository { if (!id.equals(version.getId())) { version = version.setId(id); try { - FileUtils.writeText(json, Constants.GSON.toJson(version)); + FileUtils.writeText(json, JsonUtils.GSON.toJson(version)); } catch (Exception e) { Logging.LOG.log(Level.WARNING, "Ignoring version " + id + " because wrong id " + version.getId() + " is set and cannot correct it."); return Stream.empty(); @@ -269,7 +269,7 @@ public class DefaultGameRepository implements GameRepository { @Override public AssetIndex getAssetIndex(String version, String assetId) throws IOException { try { - return Objects.requireNonNull(Constants.GSON.fromJson(FileUtils.readText(getIndexFile(version, assetId)), AssetIndex.class)); + return Objects.requireNonNull(JsonUtils.GSON.fromJson(FileUtils.readText(getIndexFile(version, assetId)), AssetIndex.class)); } catch (JsonParseException | NullPointerException e) { throw new IOException("Asset index file malformed", e); } @@ -329,7 +329,7 @@ public class DefaultGameRepository implements GameRepository { return assetsDir; String assetIndexContent = FileUtils.readText(indexFile); - AssetIndex index = Constants.GSON.fromJson(assetIndexContent, AssetIndex.class); + AssetIndex index = JsonUtils.GSON.fromJson(assetIndexContent, AssetIndex.class); if (index == null) return assetsDir; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionTask.java index 04c5609e5..987c34326 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseCompletionTask.java @@ -22,6 +22,7 @@ import org.jackhuang.hmcl.game.GameRepository; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.NetworkUtils; @@ -76,7 +77,7 @@ public final class CurseCompletionTask extends Task { try { File manifestFile = new File(repository.getVersionRoot(version), "manifest.json"); if (manifestFile.exists()) - this.manifest = Constants.GSON.fromJson(FileUtils.readText(manifestFile), CurseManifest.class); + this.manifest = JsonUtils.GSON.fromJson(FileUtils.readText(manifestFile), CurseManifest.class); } catch (Exception e) { Logging.LOG.log(Level.WARNING, "Unable to read CurseForge modpack manifest.json", e); } @@ -121,7 +122,7 @@ public final class CurseCompletionTask extends Task { return file; }) .collect(Collectors.toList())); - FileUtils.writeText(new File(root, "manifest.json"), Constants.GSON.toJson(newManifest)); + FileUtils.writeText(new File(root, "manifest.json"), JsonUtils.GSON.toJson(newManifest)); for (CurseManifestFile file : newManifest.getFiles()) if (StringUtils.isNotBlank(file.getFileName())) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java index b9c6040f3..3f4cece9e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/CurseInstallTask.java @@ -24,6 +24,7 @@ import org.jackhuang.hmcl.download.GameBuilder; import org.jackhuang.hmcl.game.DefaultGameRepository; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.Constants; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; @@ -83,7 +84,7 @@ public final class CurseInstallTask extends Task { ModpackConfiguration config = null; try { if (json.exists()) { - config = Constants.GSON.fromJson(FileUtils.readText(json), new TypeToken>() { + config = JsonUtils.GSON.fromJson(FileUtils.readText(json), new TypeToken>() { }.getType()); if (!MODPACK_TYPE.equals(config.getType())) @@ -118,7 +119,7 @@ public final class CurseInstallTask extends Task { } File root = repository.getVersionRoot(name); - FileUtils.writeText(new File(root, "manifest.json"), Constants.GSON.toJson(manifest)); + FileUtils.writeText(new File(root, "manifest.json"), JsonUtils.GSON.toJson(manifest)); dependencies.add(new CurseCompletionTask(dependencyManager, name, manifest)); dependencies.add(new MinecraftInstanceTask<>(zipFile, manifest.getOverrides(), manifest, MODPACK_TYPE, repository.getModpackConfiguration(name))); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ForgeModMetadata.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ForgeModMetadata.java index a8a539bf8..6c6b84b65 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ForgeModMetadata.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ForgeModMetadata.java @@ -21,6 +21,7 @@ import com.google.gson.JsonParseException; import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.CompressingUtils; import org.jackhuang.hmcl.util.io.IOUtils; @@ -118,7 +119,7 @@ public final class ForgeModMetadata { Path mcmod = fs.getPath("mcmod.info"); if (Files.notExists(mcmod)) throw new IOException("File " + modFile + " is not a Forge mod."); - List modList = Constants.GSON.fromJson(IOUtils.readFullyAsString(Files.newInputStream(mcmod)), + List modList = JsonUtils.GSON.fromJson(IOUtils.readFullyAsString(Files.newInputStream(mcmod)), new TypeToken>() { }.getType()); if (modList == null || modList.isEmpty()) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/LiteModMetadata.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/LiteModMetadata.java index c2121ac92..3b63ba3d0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/LiteModMetadata.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/LiteModMetadata.java @@ -18,8 +18,9 @@ package org.jackhuang.hmcl.mod; import com.google.gson.JsonParseException; -import org.jackhuang.hmcl.util.Constants; + import org.jackhuang.hmcl.util.Immutable; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.IOUtils; import java.io.File; @@ -112,7 +113,7 @@ public final class LiteModMetadata { ZipEntry entry = zipFile.getEntry("litemod.json"); if (entry == null) throw new IOException("File " + modFile + "is not a LiteLoader mod."); - LiteModMetadata metadata = Constants.GSON.fromJson(IOUtils.readFullyAsString(zipFile.getInputStream(entry)), LiteModMetadata.class); + LiteModMetadata metadata = JsonUtils.GSON.fromJson(IOUtils.readFullyAsString(zipFile.getInputStream(entry)), LiteModMetadata.class); if (metadata == null) throw new IOException("Mod " + modFile + " `litemod.json` is malformed."); return new ModInfo(modFile, metadata.getName(), metadata.getDescription(), metadata.getAuthor(), metadata.getVersion(), metadata.getGameVersion(), metadata.getUpdateURI()); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MinecraftInstanceTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MinecraftInstanceTask.java index 752f31518..d3e91574c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MinecraftInstanceTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MinecraftInstanceTask.java @@ -18,7 +18,7 @@ package org.jackhuang.hmcl.mod; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.Constants; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.CompressingUtils; import org.jackhuang.hmcl.util.io.FileUtils; @@ -69,6 +69,6 @@ public final class MinecraftInstanceTask extends Task { }); } - FileUtils.writeText(jsonFile, Constants.GSON.toJson(new ModpackConfiguration<>(manifest, type, overrides))); + FileUtils.writeText(jsonFile, JsonUtils.GSON.toJson(new ModpackConfiguration<>(manifest, type, overrides))); } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackInstallTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackInstallTask.java index 724edd938..0773c7dbd 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackInstallTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/MultiMCModpackInstallTask.java @@ -27,6 +27,7 @@ import org.jackhuang.hmcl.game.DefaultGameRepository; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.CompressingUtils; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.IOUtils; @@ -90,7 +91,7 @@ public final class MultiMCModpackInstallTask extends Task { ModpackConfiguration config = null; try { if (json.exists()) { - config = Constants.GSON.fromJson(FileUtils.readText(json), new TypeToken>() { + config = JsonUtils.GSON.fromJson(FileUtils.readText(json), new TypeToken>() { }.getType()); if (!MODPACK_TYPE.equals(config.getType())) @@ -124,7 +125,7 @@ public final class MultiMCModpackInstallTask extends Task { if (Files.exists(patches)) for (Path patchJson : Files.newDirectoryStream(patches)) { if (patchJson.toString().endsWith(".json")) { - MultiMCInstancePatch patch = Constants.GSON.fromJson(IOUtils.readFullyAsString(Files.newInputStream(patchJson)), MultiMCInstancePatch.class); + MultiMCInstancePatch patch = JsonUtils.GSON.fromJson(IOUtils.readFullyAsString(Files.newInputStream(patchJson)), MultiMCInstancePatch.class); List newArguments = new LinkedList<>(); for (String arg : patch.getTweakers()) { newArguments.add("--tweakClass"); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java index 7a521a161..056908497 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java @@ -17,29 +17,15 @@ */ package org.jackhuang.hmcl.util; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import javafx.beans.binding.Bindings; import javafx.beans.binding.ObjectBinding; import javafx.scene.image.Image; -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.task.Schedulers; -import org.jackhuang.hmcl.util.gson.DateTypeAdapter; -import org.jackhuang.hmcl.util.gson.FileTypeAdapter; -import org.jackhuang.hmcl.util.gson.LowerCaseEnumTypeAdapterFactory; -import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; -import org.jackhuang.hmcl.util.gson.ValidationTypeAdapterFactory; import org.jackhuang.hmcl.util.platform.OperatingSystem; -import org.jackhuang.hmcl.util.platform.Platform; import java.awt.*; -import java.io.File; import java.nio.charset.Charset; -import java.util.Date; -import java.util.UUID; import java.util.function.Consumer; import java.util.function.Predicate; @@ -78,21 +64,6 @@ public final class Constants { // lazy loading public static final ObjectBinding DEFAULT_ICON = Bindings.createObjectBinding(() -> new Image("/assets/img/icon.png")); - 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) - .create(); - public static Predicate truePredicate() { return s -> true; } 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 54a0a0ad5..a41932dc4 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 @@ -17,8 +17,18 @@ */ package org.jackhuang.hmcl.util.gson; -import org.jackhuang.hmcl.util.Constants; +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; /** @@ -26,10 +36,26 @@ import com.google.gson.JsonParseException; */ public final class JsonUtils { - private 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) + .create(); + + private JsonUtils() { + } public static T fromNonNullJson(String json, Class classOfT) throws JsonParseException { - T parsed = Constants.GSON.fromJson(json, classOfT); + T parsed = GSON.fromJson(json, classOfT); if (parsed == null) throw new JsonParseException("Json object cannot be null."); return parsed;