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

# TODO(b/204058761): Remove when we can use test proguard options.
-keep @com.android.tools.r8.Keep class * { public *; }
-keep @com.android.tools.r8.KeepForSubclassing class * { public *; protected *; }
-keepclasseswithmembers class * { @com.android.tools.r8.KeepMethodForCompileDump <methods>; }

# Keep all things that can be reached from the retrace api and keep the annotation
-keep @com.android.tools.r8.KeepForRetraceApi class * { public *; }

-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

# TODO(b/185756596): Remove when no longer needed
-keep class com.android.tools.r8.jetbrains.kotlinx.metadata.jvm.KotlinClassMetadata$FileFacade {
  com.android.tools.r8.jetbrains.kotlin.Lazy packageData$delegate;
}
-keep class com.android.tools.r8.jetbrains.kotlinx.metadata.jvm.KotlinClassMetadata$Class {
  com.android.tools.r8.jetbrains.kotlin.Lazy classData$delegate;
}
-keep class com.android.tools.r8.jetbrains.kotlinx.metadata.jvm.KotlinClassMetadata$SyntheticClass {
  com.android.tools.r8.jetbrains.kotlin.Lazy functionData$delegate;
}
-keep class com.android.tools.r8.jetbrains.kotlinx.metadata.jvm.KotlinClassMetadata$MultiFileClassPart {
  com.android.tools.r8.jetbrains.kotlin.Lazy packageData$delegate;
}
-keep class com.android.tools.r8.jetbrains.kotlin.SafePublicationLazyImpl {
  java.lang.Object getValue();
}
