# Copyright (c) 2019, 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/133091438,b/139344231) These rules are needed for applymapping but should be able to be
# removed when we have --classpath.
-keepclassmembers,allowobfuscation class com.android.tools.r8.ir.optimize.MemberPoolCollection {
  *** buildForHierarchy(...);
}
-keepclassmembers,allowobfuscation class com.android.tools.r8.jar.CfApplicationWriter {
  void write(com.android.tools.r8.ClassFileConsumer,java.util.concurrent.ExecutorService);
  void writeApplication(com.android.tools.r8.ClassFileConsumer,java.util.concurrent.ExecutorService);
}
-keep class com.android.tools.r8.BaseCommand {
  com.android.tools.r8.utils.AndroidApp getInputApp();
}

# Obfuscating the members below can result in naming-conflicts so just keep them.
-keep class com.android.tools.r8.joptsimple.OptionDescriptor {
  java.lang.String argumentDescription();
}

# We should support reserved names and compute the set based on the tests.
-keep class com.android.tools.r8.shaking.** { *; }