From 40b067695d9c1f703e94c4577083c56d7a0c4bc2 Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <janne@kuschku.de>
Date: Wed, 30 Aug 2023 18:06:18 +0200
Subject: [PATCH] fix: correct gson crash

---
 .../quasseldroid/defaults/DefaultNetworks.kt  |  4 +--
 .../quasseldroid/util/AndroidEmojiProvider.kt |  4 +--
 .../quasseldroid/util/helper/GsonHelper.kt    | 30 ++++++++-----------
 3 files changed, 16 insertions(+), 22 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/defaults/DefaultNetworks.kt b/app/src/main/java/de/kuschku/quasseldroid/defaults/DefaultNetworks.kt
index bd6b22942..b0f559d82 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/defaults/DefaultNetworks.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/defaults/DefaultNetworks.kt
@@ -21,7 +21,7 @@ package de.kuschku.quasseldroid.defaults
 
 import android.content.Context
 import com.google.gson.Gson
-import de.kuschku.quasseldroid.util.helper.fromJson
+import de.kuschku.quasseldroid.util.helper.fromJsonList
 import java.io.IOException
 import javax.inject.Inject
 
@@ -29,7 +29,7 @@ class DefaultNetworks @Inject constructor(context: Context, gson: Gson) {
   val networks: List<DefaultNetwork> by lazy {
     try {
       context.assets.open("networks.json").use {
-        gson.fromJson(it.bufferedReader(Charsets.UTF_8))
+        gson.fromJsonList(it.bufferedReader(Charsets.UTF_8))
       }
     } catch (e: IOException) {
       throw IllegalStateException("networks.json missing from assets.", e)
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/AndroidEmojiProvider.kt b/app/src/main/java/de/kuschku/quasseldroid/util/AndroidEmojiProvider.kt
index e0eea29ac..a7510c71a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/AndroidEmojiProvider.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/AndroidEmojiProvider.kt
@@ -23,13 +23,13 @@ import android.content.Context
 import com.google.gson.Gson
 import de.kuschku.quasseldroid.util.emoji.EmojiHandler
 import de.kuschku.quasseldroid.util.emoji.EmojiProvider
-import de.kuschku.quasseldroid.util.helper.fromJson
+import de.kuschku.quasseldroid.util.helper.fromJsonList
 import java.io.IOException
 
 class AndroidEmojiProvider(context: Context, gson: Gson) : EmojiProvider {
   override val emoji: List<EmojiHandler.Emoji> = try {
     context.assets.open("emoji.json").use {
-      gson.fromJson(it.bufferedReader(Charsets.UTF_8))
+      gson.fromJsonList(it.bufferedReader(Charsets.UTF_8))
     }
   } catch (e: IOException) {
     throw IllegalStateException("emoji.json missing from assets.", e)
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/helper/GsonHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/helper/GsonHelper.kt
index 0c7657f40..6789a0c30 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/helper/GsonHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/helper/GsonHelper.kt
@@ -24,26 +24,20 @@ import com.google.gson.JsonElement
 import com.google.gson.reflect.TypeToken
 import java.io.Reader
 
+inline fun <reified T> Gson.fromJsonList(jsonElement: JsonElement): T =
+  this.fromJson(jsonElement, object : TypeToken<T>() {}.type)
+
+inline fun <reified T> Gson.fromJsonList(reader: Reader): T =
+  this.fromJson(reader, object : TypeToken<T>() {}.type)
+
+inline fun <reified T> Gson.fromJsonList(text: String): T =
+  this.fromJson(text, object : TypeToken<T>() {}.type)
+
 inline fun <reified T> Gson.fromJson(jsonElement: JsonElement): T =
-  if (T::class.java.typeParameters.isEmpty()) {
-    this.fromJson(jsonElement, T::class.java)
-  } else {
-    val type = object : TypeToken<T>() {}.type
-    this.fromJson(jsonElement, type)
-  }
+  this.fromJson(jsonElement, T::class.java)
 
 inline fun <reified T> Gson.fromJson(reader: Reader): T =
-  if (T::class.java.typeParameters.isEmpty()) {
-    this.fromJson(reader, T::class.java)
-  } else {
-    val type = object : TypeToken<T>() {}.type
-    this.fromJson(reader, type)
-  }
+  this.fromJson(reader, T::class.java)
 
 inline fun <reified T> Gson.fromJson(text: String): T =
-  if (T::class.java.typeParameters.isEmpty()) {
-    this.fromJson(text, T::class.java)
-  } else {
-    val type = object : TypeToken<T>() {}.type
-    this.fromJson(text, type)
-  }
+  this.fromJson(text, T::class.java)
-- 
GitLab