# 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.

-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

# These files are generated using reflection to compute the file path.
# The tests that assert that the generated code is up to date will fail if the
# path has an obfuscated name.
-keep class com.android.tools.r8.ir.desugar.varhandle.VarHandleDesugaringMethods
-keep class com.android.tools.r8.ir.optimize.unsafe.SyntheticUnsafeMethods

# The protobuf library uses reflection for toString printing.
# Note that this is keeping the relocated package location.
-keep class com.android.tools.r8.com.google.protobuf.** { *; }
-keep class com.android.tools.r8.relocated.keepanno.proto.** { *; }
