##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes RuntimeVisibleAnnotations,
                RuntimeVisibleParameterAnnotations,
                RuntimeVisibleTypeAnnotations,
                AnnotationDefault

# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.android.virtualization.terminal.ConfigJson { <fields>; }
-keep class com.android.virtualization.terminal.ConfigJson$* { <fields>; }

# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
# TODO(b/373579455): Evaluate if <init> needs to be kept.
-keep class * extends com.google.gson.TypeAdapter {
  void <init>();
}
# TODO(b/373579455): Evaluate if <init> needs to be kept.
-keep class * implements com.google.gson.TypeAdapterFactory {
  void <init>();
}
# TODO(b/373579455): Evaluate if <init> needs to be kept.
-keep class * implements com.google.gson.JsonSerializer {
  void <init>();
}
# TODO(b/373579455): Evaluate if <init> needs to be kept.
-keep class * implements com.google.gson.JsonDeserializer {
  void <init>();
}

# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}

# Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher.
# TODO(b/373579455): Evaluate if <init> needs to be kept.
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken {
  void <init>();
}
# TODO(b/373579455): Evaluate if <init> needs to be kept.
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken {
  void <init>();
}

##---------------End: proguard configuration for Gson  ----------
