-assumenosideeffects public class androidx.compose.runtime.ComposerKt { void sourceInformation(androidx.compose.runtime.Composer,java.lang.String); void sourceInformationMarkerStart(androidx.compose.runtime.Composer,int,java.lang.String); void sourceInformationMarkerEnd(androidx.compose.runtime.Composer); } # Composer's class initializer doesn't do anything but create an EMPTY object. Marking the # initializers as having no side effects can help encourage shrinkers to merge/devirtualize Composer # with ComposerImpl. -assumenosideeffects public class androidx.compose.runtime.Composer { void (); } -assumenosideeffects public class androidx.compose.runtime.ComposerImpl { void (); } # Keep all the functions created to throw an exception. We don't want these functions to be # inlined in any way, which R8 will do by default. The whole point of these functions is to # reduce the amount of code generated at the call site. -keepclassmembers,allowshrinking,allowobfuscation class androidx.compose.runtime.** { # java.lang.Void == methods that return Nothing static void throw*Exception(...); static void throw*ExceptionForNullCheck(...); static java.lang.Void throw*Exception(...); static java.lang.Void throw*ExceptionForNullCheck(...); # For functions generating error messages static java.lang.String exceptionMessage*(...); java.lang.String exceptionMessage*(...); static void compose*RuntimeError(...); static java.lang.Void compose*RuntimeError(...); } # Runtime uses this field to enable group key based stack trace collection. -assumevalues class androidx.compose.runtime.tooling.ComposeStackTraceMode { private static boolean isMinified return true; } # Assume the experimental link-buffer composer is not enabled -assumevalues public class androidx.compose.runtime.ComposeRuntimeFlags { static boolean isLinkBufferComposerEnabled return false; }