# 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 *; }

# 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.dexsplitter.DexSplitter { 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
-keeppackagenames com.android.tools.r8
-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();
}
