Proguard破坏了我的清洁。 Gson和仿制药

我有一个从持久性加载信息的函数,我只是以一种非常简单的方式告诉它的类型。 该类称为SharedPreferencesHelper.kt因此它是一个真正的生活问题解决者:

  fun  loadList(context: Context, fileName: String, key: String, defValue: ArrayList) : ArrayList { val gson = MyGsonDependency.getInstance() val json = getWithFileName(context, fileName).getString(key, gson.toJson(defValue)) return gson.fromJson(json, object : TypeToken<ArrayList>() {}.type) } 

加载,例如,我只是做一个ArrayList

  SharedPreferencesHelper.loadList( context, FILE_NAME, KEY, ArrayList()) 

我发现的问题是当我运行Proguard并模糊我的代码时,每当我调用object : TypeToken<ArrayList>() {}.type我得到一个exception:

 Caused by: java.lang.AssertionError: illegal type variable reference at libcore.reflect.TypeVariableImpl.resolve(TypeVariableImpl.java:111) at libcore.reflect.TypeVariableImpl.getGenericDeclaration(TypeVariableImpl.java:125) at libcore.reflect.TypeVariableImpl.hashCode(TypeVariableImpl.java:47) at java.util.Arrays.hashCode(Arrays.java:4074) at com.google.gson.internal.$Gson$Types$ParameterizedTypeImpl.hashCode(Unknown Source:2) at com.google.gson.reflect.TypeToken.(Unknown Source:23) 

我发现的唯一解决方案是在这里,但它意味着提供type为param。

我认为这是一个潜在的问题,原因有两个:

  • 这不是一个警告,它不是一个坏的做法(是吗?),它是一个非常好的函数,在加载后来序列化的JSONArray时节省了很多样板代码。 当Proguard位于顶端时,同一项目的开发人员可能不会意识到这是一个问题。
  • 测试一段代码是否有效的唯一方法是运行Proguard,换句话说,等待构建平均3分钟。 单元和UI测试中的大量测试覆盖率也有很大帮助,但有些团队没有这种可能性。

我的问题是,有没有其他方法来解决这个问题?