xref: /aosp_15_r20/external/kotlinx.serialization/rules/common.pro (revision 57b5a4a64c534cf7f27ac9427ceab07f3d8ed3d8)
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