1*57b5a4a6SAndroid Build Coastguard Worker# Keep `Companion` object fields of serializable classes. 2*57b5a4a6SAndroid Build Coastguard Worker# This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects. 3*57b5a4a6SAndroid Build Coastguard Worker-if @kotlinx.serialization.Serializable class ** 4*57b5a4a6SAndroid Build Coastguard Worker-keepclassmembers class <1> { 5*57b5a4a6SAndroid Build Coastguard Worker static <1>$Companion Companion; 6*57b5a4a6SAndroid Build Coastguard Worker} 7*57b5a4a6SAndroid Build Coastguard Worker 8*57b5a4a6SAndroid Build Coastguard Worker# Keep `serializer()` on companion objects (both default and named) of serializable classes. 9*57b5a4a6SAndroid Build Coastguard Worker-if @kotlinx.serialization.Serializable class ** { 10*57b5a4a6SAndroid Build Coastguard Worker static **$* *; 11*57b5a4a6SAndroid Build Coastguard Worker} 12*57b5a4a6SAndroid Build Coastguard Worker-keepclassmembers class <2>$<3> { 13*57b5a4a6SAndroid Build Coastguard Worker kotlinx.serialization.KSerializer serializer(...); 14*57b5a4a6SAndroid Build Coastguard Worker} 15*57b5a4a6SAndroid Build Coastguard Worker 16*57b5a4a6SAndroid Build Coastguard Worker# Keep `INSTANCE.serializer()` of serializable objects. 17*57b5a4a6SAndroid Build Coastguard Worker-if @kotlinx.serialization.Serializable class ** { 18*57b5a4a6SAndroid Build Coastguard Worker public static ** INSTANCE; 19*57b5a4a6SAndroid Build Coastguard Worker} 20*57b5a4a6SAndroid Build Coastguard Worker-keepclassmembers class <1> { 21*57b5a4a6SAndroid Build Coastguard Worker public static <1> INSTANCE; 22*57b5a4a6SAndroid Build Coastguard Worker kotlinx.serialization.KSerializer serializer(...); 23*57b5a4a6SAndroid Build Coastguard Worker} 24*57b5a4a6SAndroid Build Coastguard Worker 25*57b5a4a6SAndroid Build Coastguard Worker# @Serializable and @Polymorphic are used at runtime for polymorphic serialization. 26*57b5a4a6SAndroid Build Coastguard Worker-keepattributes RuntimeVisibleAnnotations,AnnotationDefault 27*57b5a4a6SAndroid Build Coastguard Worker 28*57b5a4a6SAndroid Build Coastguard Worker# Don't print notes about potential mistakes or omissions in the configuration for kotlinx-serialization classes 29*57b5a4a6SAndroid Build Coastguard Worker# See also https://github.com/Kotlin/kotlinx.serialization/issues/1900 30*57b5a4a6SAndroid Build Coastguard Worker-dontnote kotlinx.serialization.** 31*57b5a4a6SAndroid Build Coastguard Worker 32*57b5a4a6SAndroid Build Coastguard Worker# Serialization core uses `java.lang.ClassValue` for caching inside these specified classes. 33*57b5a4a6SAndroid Build Coastguard Worker# If there is no `java.lang.ClassValue` (for example, in Android), then R8/ProGuard will print a warning. 34*57b5a4a6SAndroid Build Coastguard Worker# However, since in this case they will not be used, we can disable these warnings 35*57b5a4a6SAndroid Build Coastguard Worker-dontwarn kotlinx.serialization.internal.ClassValueReferences 36