# Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

-keepclasseswithmembers class * { @com.android.tools.r8.KeepMethodForCompileDump <methods>; }

-keep public class com.android.tools.r8.D8 { public static void main(java.lang.String[]); }
-keep public class com.android.tools.r8.R8 { public static void main(java.lang.String[]); }
-keep public class com.android.tools.r8.ExtractMarker { public static void main(java.lang.String[]); }

-keep public class com.android.tools.r8.Version { public static final java.lang.String LABEL; }
-keep public class com.android.tools.r8.Version { public static java.lang.String getVersionString(); }
-keep public class com.android.tools.r8.Version { public static int getMajorVersion(); }
-keep public class com.android.tools.r8.Version { public static int getMinorVersion(); }
-keep public class com.android.tools.r8.Version { public static int getPatchVersion(); }
-keep public class com.android.tools.r8.Version { public static java.lang.String getPreReleaseString(); }
-keep public class com.android.tools.r8.Version { public static boolean isDevelopmentVersion(); }

-keepattributes SourceFile, LineNumberTable, InnerClasses, EnclosingMethod, Exceptions, Signature, RuntimeInvisibleAnnotations

-keepparameternames
-repackageclasses com.android.tools.r8.internal

# Compatibility command line program used by the Android Platform build.
-keep public class com.android.tools.r8.compatproguard.CompatProguard { public static void main(java.lang.String[]); }

# TODO(b/176783536): Avoid need to use -dontwarn.
-include dontwarn.txt

# Test in this class is using the class name to fing the original .java file.
-keep class com.android.tools.r8.ir.desugar.varhandle.VarHandleDesugaringMethods
