diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DownloadAllDependenciesTask.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DownloadAllDependenciesTask.kt
index 92c1af2..f05116d 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DownloadAllDependenciesTask.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DownloadAllDependenciesTask.kt
@@ -15,6 +15,7 @@
 import org.gradle.api.provider.Property
 import org.gradle.api.tasks.InputFiles
 import org.gradle.api.tasks.OutputDirectories
+import org.gradle.api.tasks.OutputFiles
 import org.gradle.api.tasks.TaskAction
 import org.gradle.internal.os.OperatingSystem
 import org.gradle.workers.WorkAction
@@ -36,6 +37,13 @@
     return _thirdPartyDeps!!.map { _root!!.resolve(it.path) }
   }
 
+  @OutputFiles
+  fun getOutputFiles(): List<File> {
+      return _thirdPartyDeps!!.map {
+        _root!!.resolve(it.sha1File.resolveSibling(it.sha1File.name.replace(".sha1", "")))
+      }
+  }
+
   @Inject
   protected abstract fun getWorkerExecutor(): WorkerExecutor?
 
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/TestConfigurationHelper.kt b/d8_r8/commonBuildSrc/src/main/kotlin/TestConfigurationHelper.kt
index c0a9833..f8a35af 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/TestConfigurationHelper.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/TestConfigurationHelper.kt
@@ -50,7 +50,6 @@
 
     fun setupTestTask(test: Test, isR8Lib: Boolean, r8Jar: File?, r8LibMappingFile: File?) {
       val project = test.project
-      test.systemProperty("USE_NEW_GRADLE_SETUP", "true")
       if (project.hasProperty("testfilter")) {
         val testFilter = project.property("testfilter").toString()
         test.filter.setFailOnNoMatchingTests(false)
diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index d4489e8..4a1de06 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -179,45 +179,6 @@
             "r8lib.jar")
   }
 
-  val assembleRetraceLibNoDeps by registering(Exec::class) {
-    dependsOn(assembleR8LibNoDeps, mainDepsJarTask, r8WithRelocatedDepsTask)
-    val mainDepsJar = mainDepsJarTask.getSingleOutputFile()
-    val r8LibNoDepsJar = assembleR8LibNoDeps.getSingleOutputFile()
-    val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
-    inputs.files(mainDepsJar, r8LibNoDepsJar, r8WithRelocatedDepsJar)
-    val inputMap = file("$r8LibNoDepsJar.map")
-    val outputJar = getRoot().resolveAll("build", "libs", "r8retrace-exclude-deps.jar")
-    outputs.file(outputJar)
-    commandLine = createR8LibCommandLine(
-            r8WithRelocatedDepsJar,
-            r8LibNoDepsJar,
-            outputJar,
-            listOf(getRoot().resolveAll("src", "main", "keep_retrace.txt")),
-            excludingDepsVariant = true,
-            debugVariant = true,
-            lib = listOf(mainDepsJar),
-            pgInputMap = inputMap)
-  }
-
-  val assembleRetraceLibWithRelocatedDeps by registering(Exec::class) {
-    dependsOn(assembleR8LibWithRelocatedDeps, mainDepsJarTask, r8WithRelocatedDepsTask)
-    val mainDepsJar = mainDepsJarTask.getSingleOutputFile()
-    val r8LibWithRelocatedDepsJar = assembleR8LibWithRelocatedDeps.getSingleOutputFile()
-    val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
-    inputs.files(mainDepsJar, r8LibWithRelocatedDepsJar, r8WithRelocatedDepsJar)
-    val inputMap = file("$r8LibWithRelocatedDepsJar.map")
-    val outputJar = getRoot().resolveAll("build", "libs", "r8retrace.jar")
-    outputs.file(outputJar)
-    commandLine = createR8LibCommandLine(
-      r8WithRelocatedDepsJar,
-      r8LibWithRelocatedDepsJar,
-      outputJar,
-      listOf(getRoot().resolveAll("src", "main", "keep_retrace.txt")),
-      excludingDepsVariant = false,
-      debugVariant = true,
-      pgInputMap = inputMap)
-  }
-
   val resourceshrinkercli by registering(Exec::class) {
     dependsOn(r8WithRelocatedDepsTask)
     val r8 = r8WithRelocatedDepsTask.getSingleOutputFile()
@@ -318,9 +279,15 @@
             "r8lib-exclude-deps-testdeps-cf.jar")
   }
 
-  val unzipTests by registering(Copy::class) {
+  val cleanUnzipTests by registering(Delete::class) {
     dependsOn(packageTests)
     val outputDir = file("${buildDir}/unpacked/test")
+    setDelete(outputDir)
+  }
+
+  val unzipTests by registering(Copy::class) {
+    dependsOn(cleanUnzipTests, packageTests)
+    val outputDir = file("${buildDir}/unpacked/test")
     from(zipTree(packageTests.getSingleOutputFile()))
     into(outputDir)
   }
@@ -334,11 +301,23 @@
     into(outputDir)
   }
 
+  val cleanUnzipRewrittenTestsForR8LibWithRelocatedDeps by registering(Delete::class) {
+    val outputDir = file("${buildDir}/unpacked/rewrittentests-r8lib")
+    setDelete(outputDir)
+  }
+
   val unzipRewrittenTestsForR8LibWithRelocatedDeps by registering(Copy::class) {
+    dependsOn(cleanUnzipRewrittenTestsForR8LibWithRelocatedDeps)
     unzipRewrittenTestsForR8Lib(rewriteTestsForR8LibWithRelocatedDeps, "rewrittentests-r8lib")
   }
 
+  val cleanUnzipRewrittenTestsForR8LibNoDeps by registering(Delete::class) {
+    val outputDir = file("${buildDir}/unpacked/rewrittentests-r8lib-exclude-deps")
+    setDelete(outputDir)
+  }
+
   val unzipRewrittenTestsForR8LibNoDeps by registering(Copy::class) {
+    dependsOn(cleanUnzipRewrittenTestsForR8LibNoDeps)
     unzipRewrittenTestsForR8Lib(
             rewriteTestsForR8LibNoDeps, "rewrittentests-r8lib-exclude-deps")
   }
@@ -375,7 +354,6 @@
     systemProperty("EXAMPLES_JAVA_11_JAVAC_BUILD_DIR",
             getRoot().resolveAll("build", "test", "examplesJava11", "classes"))
     systemProperty("R8_RUNTIME_PATH", r8LibJar)
-    // TODO(b/270105162): This should change if running with retrace lib/r8lib.
     systemProperty("RETRACE_RUNTIME_PATH", r8LibJar)
     systemProperty("R8_DEPS", mainDepsJarTask.getSingleOutputFile())
     systemProperty("com.android.tools.r8.artprofilerewritingcompletenesscheck", "true")
diff --git a/d8_r8/test_modules/tests_bootstrap/build.gradle.kts b/d8_r8/test_modules/tests_bootstrap/build.gradle.kts
index bf64d96..b503fd3 100644
--- a/d8_r8/test_modules/tests_bootstrap/build.gradle.kts
+++ b/d8_r8/test_modules/tests_bootstrap/build.gradle.kts
@@ -26,9 +26,12 @@
 }
 
 val testsJava8Jar = projectTask("tests_java_8", "testJar")
+val keepAnnoJarTask = projectTask("keepanno", "jar")
+val keepAnnoCompileTask = projectTask("keepanno", "compileJava")
 val mainR8RelocatedTask = projectTask("main", "r8WithRelocatedDeps")
 
 dependencies {
+  implementation(keepAnnoJarTask.outputs.files)
   implementation(files(testsJava8Jar.outputs.files.getSingleFile()))
   implementation(projectTask("main", "jar").outputs.files)
   implementation(Deps.asm)
@@ -70,6 +73,7 @@
     dependsOn(mainR8RelocatedTask)
     systemProperty("TEST_DATA_LOCATION",
                    layout.buildDirectory.dir("classes/java/test").get().toString())
+    systemProperty("KEEP_ANNO_JAVAC_BUILD_DIR", keepAnnoCompileTask.outputs.files.getAsPath())
     systemProperty("R8_WITH_RELOCATED_DEPS", mainR8RelocatedTask.outputs.files.singleFile)
     systemProperty("R8_RUNTIME_PATH", mainR8RelocatedTask.outputs.files.singleFile)
   }
@@ -82,6 +86,7 @@
 
   val depsJar by registering(Jar::class) {
     dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+    dependsOn(gradle.includedBuild("keepanno").task(":jar"))
     if (!project.hasProperty("no_internal")) {
       dependsOn(gradle.includedBuild("shared").task(":downloadDepsInternal"))
     }
diff --git a/d8_r8/test_modules/tests_bootstrap/settings.gradle.kts b/d8_r8/test_modules/tests_bootstrap/settings.gradle.kts
index b4fb012..aeb53ad 100644
--- a/d8_r8/test_modules/tests_bootstrap/settings.gradle.kts
+++ b/d8_r8/test_modules/tests_bootstrap/settings.gradle.kts
@@ -30,3 +30,4 @@
 includeBuild(root.resolve("shared"))
 includeBuild(root.resolve("main"))
 includeBuild(root.resolve("test_modules").resolve("tests_java_8"))
+includeBuild(root.resolve("keepanno"))
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/annotations/KeepForApi.java b/src/keepanno/java/com/android/tools/r8/keepanno/annotations/KeepForApi.java
index 44756ea..24b9c4f 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/annotations/KeepForApi.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/annotations/KeepForApi.java
@@ -12,7 +12,7 @@
  * Annotation to mark a class, field or method as part of a library API surface.
  *
  * <p>When a class is annotated, member patterns can be used to define which members are to be kept.
- * When no member patterns are specified the default pattern is to match all public and protected
+ * When no member patterns are specified the default pattern matches all public and protected
  * members.
  *
  * <p>When a member is annotated, the member patterns cannot be used as the annotated member itself
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java
index 5f7f156..d3fc1ba 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeReader.java
@@ -34,7 +34,6 @@
 import com.android.tools.r8.keepanno.ast.KeepFieldNamePattern;
 import com.android.tools.r8.keepanno.ast.KeepFieldPattern;
 import com.android.tools.r8.keepanno.ast.KeepFieldTypePattern;
-import com.android.tools.r8.keepanno.ast.KeepItemKind;
 import com.android.tools.r8.keepanno.ast.KeepItemPattern;
 import com.android.tools.r8.keepanno.ast.KeepItemReference;
 import com.android.tools.r8.keepanno.ast.KeepMemberAccessPattern;
@@ -491,10 +490,8 @@
         if (!descriptor.equals(itemDescriptor)) {
           throw new KeepEdgeException("@KeepForApi must reference its class context " + className);
         }
-        if (itemPattern.getKind().equals(KeepItemKind.ONLY_MEMBERS)) {
-          if (items.size() == 1) {
+        if (itemPattern.isMemberItemPattern() && items.size() == 1) {
             throw new KeepEdgeException("@KeepForApi kind must include its class");
-          }
         }
         if (!itemPattern.getExtendsPattern().isAny()) {
           throw new KeepEdgeException("@KeepForApi cannot define an 'extends' pattern.");
@@ -668,10 +665,8 @@
           throw new KeepEdgeException(
               "@" + getAnnotationName() + " must reference its class context " + className);
         }
-        if (itemPattern.getKind().equals(KeepItemKind.ONLY_MEMBERS)) {
-          if (items.size() == 1) {
-            throw new KeepEdgeException("@" + getAnnotationName() + " kind must include its class");
-          }
+        if (itemPattern.isMemberItemPattern() && items.size() == 1) {
+          throw new KeepEdgeException("@" + getAnnotationName() + " kind must include its class");
         }
         if (!itemPattern.getExtendsPattern().isAny()) {
           throw new KeepEdgeException(
@@ -701,7 +696,7 @@
     private final KeepEdgeMetaInfo.Builder metaInfoBuilder = KeepEdgeMetaInfo.builder();
     private final UserBindingsHelper bindingsHelper = new UserBindingsHelper();
     private final KeepConsequences.Builder consequences = KeepConsequences.builder();
-    private KeepItemKind kind = KeepItemKind.ONLY_MEMBERS;
+    private String kind = Kind.ONLY_MEMBERS;
 
     UsedByReflectionMemberVisitor(
         String annotationDescriptor,
@@ -739,13 +734,9 @@
           // The default value is obtained by not assigning a kind (e.g., null in the builder).
           break;
         case Kind.ONLY_CLASS:
-          kind = KeepItemKind.ONLY_CLASS;
-          break;
         case Kind.ONLY_MEMBERS:
-          kind = KeepItemKind.ONLY_MEMBERS;
-          break;
         case Kind.CLASS_AND_MEMBERS:
-          kind = KeepItemKind.CLASS_AND_MEMBERS;
+          kind = value;
           break;
         default:
           super.visitEnum(name, descriptor, value);
@@ -771,11 +762,11 @@
 
     @Override
     public void visitEnd() {
-      if (kind.equals(KeepItemKind.ONLY_CLASS)) {
+      if (Kind.ONLY_CLASS.equals(kind)) {
         throw new KeepEdgeException("@" + getAnnotationName() + " kind must include its member");
       }
-      assert context.getKind() == KeepItemKind.ONLY_MEMBERS;
-      if (kind.equals(KeepItemKind.CLASS_AND_MEMBERS)) {
+      assert context.isMemberItemPattern();
+      if (Kind.CLASS_AND_MEMBERS.equals(kind)) {
         consequences.addTarget(
             KeepTarget.builder()
                 .setItemPattern(
@@ -1436,21 +1427,24 @@
         assert !itemReference.isBindingReference();
         KeepItemPattern itemPattern = itemReference.asItemPattern();
         KeepItemPattern classPattern;
+        KeepItemPattern memberPattern;
         if (itemPattern.isClassItemPattern()) {
           classPattern = itemPattern;
+          memberPattern =
+              KeepItemPattern.builder()
+                  .copyFrom(itemPattern)
+                  .setMemberPattern(KeepMemberPattern.allMembers())
+                  .build();
         } else {
+          memberPattern = itemPattern;
           classPattern =
               KeepItemPattern.builder()
                   .copyFrom(itemPattern)
-                  .setKind(KeepItemKind.ONLY_CLASS)
                   .setMemberPattern(KeepMemberPattern.none())
                   .build();
         }
-        KeepItemPattern memberPattern =
-            KeepItemPattern.builder()
-                .copyFrom(itemPattern)
-                .setKind(KeepItemKind.ONLY_MEMBERS)
-                .build();
+        assert classPattern.isClassItemPattern();
+        assert memberPattern.isMemberItemPattern();
         return ImmutableList.of(
             KeepItemReference.fromItemPattern(classPattern),
             KeepItemReference.fromItemPattern(memberPattern));
@@ -1470,27 +1464,31 @@
       assert kind != null;
       if (Kind.CLASS_AND_MEMBERS.equals(kind)) {
         KeepItemPattern itemPattern = itemReference.asItemPattern();
+        KeepMemberPattern memberPattern;
         KeepItemPattern classPattern;
         if (itemPattern.isClassItemPattern()) {
+          memberPattern = KeepMemberPattern.allMembers();
           classPattern = itemPattern;
         } else {
+          memberPattern = itemPattern.getMemberPattern();
           classPattern =
               KeepItemPattern.builder()
                   .copyFrom(itemPattern)
-                  .setKind(KeepItemKind.ONLY_CLASS)
                   .setMemberPattern(KeepMemberPattern.none())
                   .build();
         }
         BindingSymbol symbol = getBindingsHelper().defineFreshBinding("CLASS", classPattern);
-        KeepItemPattern memberPattern =
+        KeepItemPattern memberItemPattern =
             KeepItemPattern.builder()
                 .copyFrom(itemPattern)
                 .setClassReference(KeepClassReference.fromBindingReference(symbol))
-                .setKind(KeepItemKind.ONLY_MEMBERS)
+                .setMemberPattern(memberPattern)
                 .build();
+        assert classPattern.isClassItemPattern();
+        assert memberItemPattern.isMemberItemPattern();
         return ImmutableList.of(
             KeepItemReference.fromItemPattern(classPattern),
-            KeepItemReference.fromItemPattern(memberPattern));
+            KeepItemReference.fromItemPattern(memberItemPattern));
       } else {
         return Collections.singletonList(itemReference);
       }
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeWriter.java b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeWriter.java
index dc8e7c9..ec3fb30 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeWriter.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/asm/KeepEdgeWriter.java
@@ -138,12 +138,6 @@
   }
 
   private void writeItem(AnnotationVisitor itemVisitor, KeepItemPattern item) {
-    if (item.isAny(
-        binding -> {
-          throw new Unimplemented();
-        })) {
-      throw new Unimplemented();
-    }
     KeepClassReference classReference = item.getClassReference();
     if (classReference.isBindingReference()) {
       throw new Unimplemented();
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindings.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindings.java
index 790fb9e..a3ba447 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindings.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindings.java
@@ -45,26 +45,6 @@
     bindings.forEach((name, binding) -> fn.accept(name, binding.getItem()));
   }
 
-  public boolean isAny(KeepItemReference itemReference) {
-    return itemReference.isBindingReference()
-        ? isAny(get(itemReference.asBindingReference()).getItem())
-        : isAny(itemReference.asItemPattern());
-  }
-
-  public boolean isAny(KeepItemPattern itemPattern) {
-    return itemPattern.isAny(this::isAnyClassNamePattern);
-  }
-
-  // If the outer-most item has been judged to be "any" then we internally only need to check
-  // that the class-name pattern itself is "any". The class-name could potentially reference names
-  // of other item bindings so this is a recursive search.
-  private boolean isAnyClassNamePattern(BindingSymbol bindingName) {
-    KeepClassReference classReference = get(bindingName).getItem().getClassReference();
-    return classReference.isBindingReference()
-        ? isAnyClassNamePattern(classReference.asBindingReference())
-        : classReference.asClassNamePattern().isAny();
-  }
-
   @Override
   public String toString() {
     return "{"
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepEdge.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepEdge.java
index b2e541a..3b11a28 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepEdge.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepEdge.java
@@ -37,11 +37,7 @@
  *   ITEM_REFERENCE  ::= BINDING_REFERENCE | ITEM_PATTERN
  *   CLASS_REFERENCE ::= BINDING_REFERENCE | QUALIFIED_CLASS_NAME_PATTERN
  *
- *   ITEM_PATTERN
- *     ::= any
- *       | ITEM_KIND class CLASS_REFERENCE extends EXTENDS_PATTERN { MEMBER_PATTERN }
- *
- *   ITEM_KIND ::= ONLY_CLASS | ONLY_MEMBERS | CLASS_AND_MEMBERS
+ *   ITEM_PATTERN ::= class CLASS_REFERENCE extends EXTENDS_PATTERN { MEMBER_PATTERN }
  *
  *   TYPE_PATTERN ::= any | exact type-descriptor
  *   PACKAGE_PATTERN ::= any | exact package-name
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemKind.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemKind.java
deleted file mode 100644
index 0d59769..0000000
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemKind.java
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2023, 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.
-package com.android.tools.r8.keepanno.ast;
-
-public enum KeepItemKind {
-  ONLY_CLASS,
-  ONLY_MEMBERS,
-  CLASS_AND_MEMBERS
-}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemPattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemPattern.java
index d81dde9..7634c68 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemPattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemPattern.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.keepanno.ast.KeepBindings.BindingSymbol;
 import java.util.Collection;
 import java.util.Objects;
-import java.util.function.Predicate;
 
 /**
  * A pattern for matching items in the program.
@@ -20,29 +19,28 @@
  */
 public class KeepItemPattern {
 
-  public static KeepItemPattern any() {
-    return builder().any().build();
+  public static KeepItemPattern anyClass() {
+    return builder().setMemberPattern(KeepMemberPattern.none()).build();
+  }
+
+  public static KeepItemPattern anyMember() {
+    return builder().setMemberPattern(KeepMemberPattern.allMembers()).build();
   }
 
   public static Builder builder() {
     return new Builder();
   }
 
-  public boolean isClassAndMemberPattern() {
-    return kind == KeepItemKind.CLASS_AND_MEMBERS;
-  }
-
   public boolean isClassItemPattern() {
-    return kind == KeepItemKind.ONLY_CLASS;
+    return memberPattern.isNone();
   }
 
   public boolean isMemberItemPattern() {
-    return kind == KeepItemKind.ONLY_MEMBERS;
+    return !isClassItemPattern();
   }
 
   public static class Builder {
 
-    private KeepItemKind kind = null;
     private KeepClassReference classReference =
         KeepClassReference.fromClassNamePattern(KeepQualifiedClassNamePattern.any());
     private KeepExtendsPattern extendsPattern = KeepExtendsPattern.any();
@@ -51,25 +49,11 @@
     private Builder() {}
 
     public Builder copyFrom(KeepItemPattern pattern) {
-      return setKind(pattern.getKind())
-          .setClassReference(pattern.getClassReference())
+      return setClassReference(pattern.getClassReference())
           .setExtendsPattern(pattern.getExtendsPattern())
           .setMemberPattern(pattern.getMemberPattern());
     }
 
-    public Builder any() {
-      kind = KeepItemKind.CLASS_AND_MEMBERS;
-      classReference = KeepClassReference.fromClassNamePattern(KeepQualifiedClassNamePattern.any());
-      extendsPattern = KeepExtendsPattern.any();
-      memberPattern = KeepMemberPattern.allMembers();
-      return this;
-    }
-
-    public Builder setKind(KeepItemKind kind) {
-      this.kind = kind;
-      return this;
-    }
-
     public Builder setClassReference(KeepClassReference classReference) {
       this.classReference = classReference;
       return this;
@@ -90,56 +74,27 @@
     }
 
     public KeepItemPattern build() {
-      if (kind == null) {
-        kind = memberPattern.isNone() ? KeepItemKind.ONLY_CLASS : KeepItemKind.ONLY_MEMBERS;
-      }
-      if (kind == KeepItemKind.ONLY_CLASS && !memberPattern.isNone()) {
-        throw new KeepEdgeException(
-            "Invalid kind ONLY_CLASS for item with member pattern: " + memberPattern);
-      }
-      if (kind == KeepItemKind.ONLY_MEMBERS && memberPattern.isNone()) {
-        throw new KeepEdgeException("Invalid kind ONLY_MEMBERS for item with no member pattern");
-      }
-      if (kind == KeepItemKind.CLASS_AND_MEMBERS && memberPattern.isNone()) {
-        throw new KeepEdgeException(
-            "Invalid kind CLASS_AND_MEMBERS for item with no member pattern");
-      }
-      return new KeepItemPattern(kind, classReference, extendsPattern, memberPattern);
+      return new KeepItemPattern(classReference, extendsPattern, memberPattern);
     }
   }
 
-  private final KeepItemKind kind;
   private final KeepClassReference classReference;
   private final KeepExtendsPattern extendsPattern;
   private final KeepMemberPattern memberPattern;
   // TODO: class annotations
 
   private KeepItemPattern(
-      KeepItemKind kind,
       KeepClassReference classReference,
       KeepExtendsPattern extendsPattern,
       KeepMemberPattern memberPattern) {
-    assert kind != null;
     assert classReference != null;
     assert extendsPattern != null;
     assert memberPattern != null;
-    this.kind = kind;
     this.classReference = classReference;
     this.extendsPattern = extendsPattern;
     this.memberPattern = memberPattern;
   }
 
-  public boolean isAny(Predicate<BindingSymbol> onReference) {
-    return kind.equals(KeepItemKind.CLASS_AND_MEMBERS)
-        && extendsPattern.isAny()
-        && memberPattern.isAllMembers()
-        && classReference.isAny(onReference);
-  }
-
-  public KeepItemKind getKind() {
-    return kind;
-  }
-
   public KeepClassReference getClassReference() {
     return classReference;
   }
@@ -157,37 +112,40 @@
   }
 
   @Override
-  @SuppressWarnings("EqualsGetClass")
   public boolean equals(Object obj) {
     if (this == obj) {
       return true;
     }
-    if (obj == null || getClass() != obj.getClass()) {
+    if (!(obj instanceof KeepItemPattern)) {
       return false;
     }
     KeepItemPattern that = (KeepItemPattern) obj;
-    return kind.equals(that.kind)
-        && classReference.equals(that.classReference)
+    return classReference.equals(that.classReference)
         && extendsPattern.equals(that.extendsPattern)
         && memberPattern.equals(that.memberPattern);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(kind, classReference, extendsPattern, memberPattern);
+    return Objects.hash(classReference, extendsPattern, memberPattern);
   }
 
   @Override
   public String toString() {
-    return "KeepClassPattern{"
-        + "kind="
-        + kind
-        + ", classReference="
-        + classReference
-        + ", extendsPattern="
-        + extendsPattern
-        + ", memberPattern="
-        + memberPattern
-        + '}';
+    StringBuilder builder = new StringBuilder();
+    if (isClassItemPattern()) {
+      builder.append("KeepClassPattern");
+    } else {
+      assert isMemberItemPattern();
+      builder.append("KeepMemberPattern");
+    }
+    builder.append("{ class=").append(classReference);
+    if (!extendsPattern.isAny()) {
+      builder.append(", extends=").append(extendsPattern);
+    }
+    if (!memberPattern.isNone()) {
+      builder.append(", members=").append(memberPattern);
+    }
+    return builder.append('}').toString();
   }
 }
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java
index cf79e0f..9bd2c09 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepEdgeNormalizer.java
@@ -9,7 +9,6 @@
 import com.android.tools.r8.keepanno.ast.KeepCondition;
 import com.android.tools.r8.keepanno.ast.KeepConsequences;
 import com.android.tools.r8.keepanno.ast.KeepEdge;
-import com.android.tools.r8.keepanno.ast.KeepItemKind;
 import com.android.tools.r8.keepanno.ast.KeepItemPattern;
 import com.android.tools.r8.keepanno.ast.KeepItemReference;
 import com.android.tools.r8.keepanno.ast.KeepPreconditions;
@@ -119,10 +118,8 @@
 
   private KeepItemPattern getMemberItemPattern(
       KeepItemPattern fromPattern, KeepClassReference classReference) {
-    assert fromPattern.getKind().equals(KeepItemKind.ONLY_MEMBERS)
-        || fromPattern.getKind().equals(KeepItemKind.CLASS_AND_MEMBERS);
+    assert fromPattern.isMemberItemPattern();
     return KeepItemPattern.builder()
-        .setKind(fromPattern.getKind())
         .setClassReference(classReference)
         .setMemberPattern(fromPattern.getMemberPattern())
         .build();
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
index 3dffb77..5ad2ae3 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
@@ -297,15 +297,6 @@
     List<BindingSymbol> targetMembers = new ArrayList<>();
     for (BindingSymbol targetReference : targets) {
       KeepItemPattern item = bindings.get(targetReference).getItem();
-      if (bindings.isAny(item)) {
-        // If the target is "any item" then it contains any other target pattern.
-        memberPatterns.put(targetReference, item.getMemberPattern());
-        callback.accept(
-            memberPatterns,
-            Collections.singletonList(targetReference),
-            TargetKeepKind.CLASS_OR_MEMBERS);
-        return;
-      }
       if (item.isClassItemPattern()) {
         keepKind = TargetKeepKind.CLASS_AND_MEMBERS;
       } else {
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs.json b/src/library_desugar/jdk11/desugar_jdk_libs.json
index 6991778..df0df7b 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs.json
@@ -1,6 +1,6 @@
 {
   "identifier": "com.tools.android:desugar_jdk_libs_configuration:2.0.4",
-  "configuration_format_version": 100,
+  "configuration_format_version": 101,
   "required_compilation_api_level": 30,
   "synthesized_library_classes_package_prefix": "j$.",
   "support_all_callbacks_from_library": true,
@@ -192,20 +192,93 @@
         "java.io.UncheckedIOException"
       ],
       "emulate_interface": {
-        "java.lang.Iterable": "j$.lang.Iterable",
-        "java.util.Collection": "j$.util.Collection",
-        "java.util.Comparator": "j$.util.Comparator",
-        "java.util.Iterator": "j$.util.Iterator",
-        "java.util.List": "j$.util.List",
-        "java.util.Map": "j$.util.Map",
-        "java.util.Map$Entry": "j$.util.Map$Entry",
-        "java.util.Set": "j$.util.Set",
-        "java.util.SortedSet": "j$.util.SortedSet",
-        "java.util.concurrent.ConcurrentMap": "j$.util.concurrent.ConcurrentMap"
+        "java.lang.Iterable": {
+          "rewrittenType": "j$.lang.Iterable",
+          "emulatedMethods": [
+            "java.util.Spliterator java.lang.Iterable#spliterator()",
+            "void java.lang.Iterable#forEach(java.util.function.Consumer)"
+          ]
+        },
+        "java.util.concurrent.ConcurrentMap": {
+          "rewrittenType": "j$.util.concurrent.ConcurrentMap",
+          "emulatedMethods": [
+            "void java.util.concurrent.ConcurrentMap#forEach(java.util.function.BiConsumer)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#getOrDefault(java.lang.Object, java.lang.Object)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#computeIfAbsent(java.lang.Object, java.util.function.Function)",
+            "void java.util.concurrent.ConcurrentMap#replaceAll(java.util.function.BiFunction)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#compute(java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#computeIfPresent(java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction)"
+          ]
+        },
+        "java.util.List": {
+          "rewrittenType": "j$.util.List",
+          "emulatedMethods": [
+            "java.util.Spliterator java.util.List#spliterator()",
+            "void java.util.List#sort(java.util.Comparator)",
+            "void java.util.List#replaceAll(java.util.function.UnaryOperator)"
+          ]
+        },
+        "java.util.Map": {
+          "rewrittenType": "j$.util.Map",
+          "emulatedMethods": [
+            "java.lang.Object java.util.Map#merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.Map#putIfAbsent(java.lang.Object, java.lang.Object)",
+            "void java.util.Map#forEach(java.util.function.BiConsumer)",
+            "void java.util.Map#replaceAll(java.util.function.BiFunction)",
+            "java.lang.Object java.util.Map#computeIfAbsent(java.lang.Object, java.util.function.Function)",
+            "java.lang.Object java.util.Map#compute(java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.Map#computeIfPresent(java.lang.Object, java.util.function.BiFunction)",
+            "boolean java.util.Map#remove(java.lang.Object, java.lang.Object)",
+            "boolean java.util.Map#replace(java.lang.Object, java.lang.Object, java.lang.Object)",
+            "java.lang.Object java.util.Map#replace(java.lang.Object, java.lang.Object)",
+            "java.lang.Object java.util.Map#getOrDefault(java.lang.Object, java.lang.Object)"
+          ]
+        },
+        "java.util.Collection": {
+          "rewrittenType": "j$.util.Collection",
+          "emulatedMethods": [
+            "java.util.stream.Stream java.util.Collection#stream()",
+            "java.util.stream.Stream java.util.Collection#parallelStream()",
+            "java.util.Spliterator java.util.Collection#spliterator()",
+            "boolean java.util.Collection#removeIf(java.util.function.Predicate)",
+            "void java.util.Collection#forEach(java.util.function.Consumer)"
+          ]
+        },
+        "java.util.Iterator": {
+          "rewrittenType": "j$.util.Iterator",
+          "emulatedMethods": [
+            "void java.util.Iterator#forEachRemaining(java.util.function.Consumer)"
+          ]
+        },
+        "java.util.Map$Entry": {
+          "rewrittenType": "j$.util.Map$Entry"
+        },
+        "java.util.Set": {
+          "rewrittenType": "j$.util.Set",
+          "emulatedMethods": [
+            "java.util.Spliterator java.util.Set#spliterator()"
+          ]
+        },
+        "java.util.Comparator": {
+          "rewrittenType": "j$.util.Comparator",
+          "emulatedMethods": [
+            "java.util.Comparator java.util.Comparator#thenComparingDouble(java.util.function.ToDoubleFunction)",
+            "java.util.Comparator java.util.Comparator#thenComparingInt(java.util.function.ToIntFunction)",
+            "java.util.Comparator java.util.Comparator#reversed()",
+            "java.util.Comparator java.util.Comparator#thenComparing(java.util.function.Function, java.util.Comparator)",
+            "java.util.Comparator java.util.Comparator#thenComparingLong(java.util.function.ToLongFunction)",
+            "java.util.Comparator java.util.Comparator#thenComparing(java.util.Comparator)",
+            "java.util.Comparator java.util.Comparator#thenComparing(java.util.function.Function)"
+          ]
+        },
+        "java.util.SortedSet": {
+          "rewrittenType": "j$.util.SortedSet",
+          "emulatedMethods": [
+            "java.util.Spliterator java.util.SortedSet#spliterator()"
+          ]
+        }
       },
-      "dont_rewrite": [
-        "void java.util.Iterator#remove()"
-      ],
       "retarget_method": {
         "java.util.Spliterator java.util.Arrays#spliterator(java.lang.Object[])": "java.util.DesugarArrays",
         "java.util.Spliterator java.util.Arrays#spliterator(java.lang.Object[], int, int)": "java.util.DesugarArrays",
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_human_comments.md b/src/library_desugar/jdk11/desugar_jdk_libs_human_comments.md
index 9f79e04..5e59f31 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_human_comments.md
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_human_comments.md
@@ -232,11 +232,6 @@
 the code for the default and static methods, and a dispatch class which hold the
 code to support emulated dispatch for the default methods.
 
-### Flag dont_rewrite
-
-`methodNotToRewrite`
-D8/R8 ignroes the methods present here from the emulated interface.
-
 ### Flag wrapper_conversion
 
 `type`
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_minimal.json b/src/library_desugar/jdk11/desugar_jdk_libs_minimal.json
index b0dc30e..d69ed9a 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_minimal.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_minimal.json
@@ -1,6 +1,6 @@
 {
   "identifier": "com.tools.android:desugar_jdk_libs_configuration_minimal:2.0.4",
-  "configuration_format_version": 100,
+  "configuration_format_version": 101,
   "required_compilation_api_level": 24,
   "synthesized_library_classes_package_prefix": "j$.",
   "support_all_callbacks_from_library": false,
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_nio.json b/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
index ebeda3f..29e4e26 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
@@ -1,6 +1,6 @@
 {
   "identifier": "com.tools.android:desugar_jdk_libs_configuration_nio:2.0.4",
-  "configuration_format_version": 100,
+  "configuration_format_version": 101,
   "required_compilation_api_level": 30,
   "synthesized_library_classes_package_prefix": "j$.",
   "support_all_callbacks_from_library": true,
@@ -347,16 +347,92 @@
         "java.nio.channels.SeekableByteChannel"
       ],
       "emulate_interface": {
-        "java.lang.Iterable": "j$.lang.Iterable",
-        "java.util.Collection": "j$.util.Collection",
-        "java.util.Comparator": "j$.util.Comparator",
-        "java.util.Iterator": "j$.util.Iterator",
-        "java.util.List": "j$.util.List",
-        "java.util.Map": "j$.util.Map",
-        "java.util.Map$Entry": "j$.util.Map$Entry",
-        "java.util.Set": "j$.util.Set",
-        "java.util.SortedSet": "j$.util.SortedSet",
-        "java.util.concurrent.ConcurrentMap": "j$.util.concurrent.ConcurrentMap"
+        "java.lang.Iterable": {
+          "rewrittenType": "j$.lang.Iterable",
+          "emulatedMethods": [
+            "java.util.Spliterator java.lang.Iterable#spliterator()",
+            "void java.lang.Iterable#forEach(java.util.function.Consumer)"
+          ]
+        },
+        "java.util.concurrent.ConcurrentMap": {
+          "rewrittenType": "j$.util.concurrent.ConcurrentMap",
+          "emulatedMethods": [
+            "void java.util.concurrent.ConcurrentMap#forEach(java.util.function.BiConsumer)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#getOrDefault(java.lang.Object, java.lang.Object)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#computeIfAbsent(java.lang.Object, java.util.function.Function)",
+            "void java.util.concurrent.ConcurrentMap#replaceAll(java.util.function.BiFunction)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#compute(java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#computeIfPresent(java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.concurrent.ConcurrentMap#merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction)"
+          ]
+        },
+        "java.util.List": {
+          "rewrittenType": "j$.util.List",
+          "emulatedMethods": [
+            "java.util.Spliterator java.util.List#spliterator()",
+            "void java.util.List#sort(java.util.Comparator)",
+            "void java.util.List#replaceAll(java.util.function.UnaryOperator)"
+          ]
+        },
+        "java.util.Map": {
+          "rewrittenType": "j$.util.Map",
+          "emulatedMethods": [
+            "java.lang.Object java.util.Map#merge(java.lang.Object, java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.Map#putIfAbsent(java.lang.Object, java.lang.Object)",
+            "void java.util.Map#forEach(java.util.function.BiConsumer)",
+            "void java.util.Map#replaceAll(java.util.function.BiFunction)",
+            "java.lang.Object java.util.Map#computeIfAbsent(java.lang.Object, java.util.function.Function)",
+            "java.lang.Object java.util.Map#compute(java.lang.Object, java.util.function.BiFunction)",
+            "java.lang.Object java.util.Map#computeIfPresent(java.lang.Object, java.util.function.BiFunction)",
+            "boolean java.util.Map#remove(java.lang.Object, java.lang.Object)",
+            "boolean java.util.Map#replace(java.lang.Object, java.lang.Object, java.lang.Object)",
+            "java.lang.Object java.util.Map#replace(java.lang.Object, java.lang.Object)",
+            "java.lang.Object java.util.Map#getOrDefault(java.lang.Object, java.lang.Object)"
+          ]
+        },
+        "java.util.Collection": {
+          "rewrittenType": "j$.util.Collection",
+          "emulatedMethods": [
+            "java.util.stream.Stream java.util.Collection#stream()",
+            "java.util.stream.Stream java.util.Collection#parallelStream()",
+            "java.util.Spliterator java.util.Collection#spliterator()",
+            "boolean java.util.Collection#removeIf(java.util.function.Predicate)",
+            "void java.util.Collection#forEach(java.util.function.Consumer)"
+          ]
+        },
+        "java.util.Iterator": {
+          "rewrittenType": "j$.util.Iterator",
+          "emulatedMethods": [
+            "void java.util.Iterator#forEachRemaining(java.util.function.Consumer)"
+          ]
+        },
+        "java.util.Map$Entry": {
+          "rewrittenType": "j$.util.Map$Entry"
+        },
+        "java.util.Set": {
+          "rewrittenType": "j$.util.Set",
+          "emulatedMethods": [
+            "java.util.Spliterator java.util.Set#spliterator()"
+          ]
+        },
+        "java.util.Comparator": {
+          "rewrittenType": "j$.util.Comparator",
+          "emulatedMethods": [
+            "java.util.Comparator java.util.Comparator#thenComparingDouble(java.util.function.ToDoubleFunction)",
+            "java.util.Comparator java.util.Comparator#thenComparingInt(java.util.function.ToIntFunction)",
+            "java.util.Comparator java.util.Comparator#reversed()",
+            "java.util.Comparator java.util.Comparator#thenComparing(java.util.function.Function, java.util.Comparator)",
+            "java.util.Comparator java.util.Comparator#thenComparingLong(java.util.function.ToLongFunction)",
+            "java.util.Comparator java.util.Comparator#thenComparing(java.util.Comparator)",
+            "java.util.Comparator java.util.Comparator#thenComparing(java.util.function.Function)"
+          ]
+        },
+        "java.util.SortedSet": {
+          "rewrittenType": "j$.util.SortedSet",
+          "emulatedMethods": [
+            "java.util.Spliterator java.util.SortedSet#spliterator()"
+          ]
+        }
       },
       "dont_rewrite": [
         "void java.util.Iterator#remove()"
diff --git a/src/main/java/com/android/tools/r8/AndroidResourceConsumer.java b/src/main/java/com/android/tools/r8/AndroidResourceConsumer.java
index 634611f..23d7c2b 100644
--- a/src/main/java/com/android/tools/r8/AndroidResourceConsumer.java
+++ b/src/main/java/com/android/tools/r8/AndroidResourceConsumer.java
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
-@Keep
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
+@KeepForApi
 public interface AndroidResourceConsumer {
 
   void accept(AndroidResourceOutput androidResource, DiagnosticsHandler diagnosticsHandler);
diff --git a/src/main/java/com/android/tools/r8/AndroidResourceInput.java b/src/main/java/com/android/tools/r8/AndroidResourceInput.java
index 9dd3133..9403c75 100644
--- a/src/main/java/com/android/tools/r8/AndroidResourceInput.java
+++ b/src/main/java/com/android/tools/r8/AndroidResourceInput.java
@@ -4,6 +4,7 @@
 
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.io.InputStream;
 
 /**
@@ -13,9 +14,10 @@
  * allows us to reason about resources, and transitively other resources and code throughout the
  * entire compilation pipeline.
  */
-@Keep
+@KeepForApi
 public interface AndroidResourceInput extends Resource {
-  @Keep
+
+  @KeepForApi
   enum Kind {
     // The AndroidManifest.xml file in proto format.
     MANIFEST,
diff --git a/src/main/java/com/android/tools/r8/AndroidResourceOutput.java b/src/main/java/com/android/tools/r8/AndroidResourceOutput.java
index 6b204b5..ce7fc10 100644
--- a/src/main/java/com/android/tools/r8/AndroidResourceOutput.java
+++ b/src/main/java/com/android/tools/r8/AndroidResourceOutput.java
@@ -4,6 +4,8 @@
 
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /**
  * Base interface for android resources (resource table, manifest, res folder files)
  *
@@ -11,7 +13,7 @@
  * allows us to reason about resources, and transitively other resources and code throughout the
  * entire compilation pipeline.
  */
-@Keep
+@KeepForApi
 public interface AndroidResourceOutput extends Resource {
   // The path, within the app, of the resource.
   ResourcePath getPath();
diff --git a/src/main/java/com/android/tools/r8/AndroidResourceProvider.java b/src/main/java/com/android/tools/r8/AndroidResourceProvider.java
index cb44ff0..1045f70 100644
--- a/src/main/java/com/android/tools/r8/AndroidResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/AndroidResourceProvider.java
@@ -3,10 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.Collection;
 
 /** Android resource provider. */
-@Keep
+@KeepForApi
 public interface AndroidResourceProvider {
 
   // Provide all android resources
diff --git a/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java b/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java
index dee63cc..d3ee009 100644
--- a/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java
+++ b/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java
@@ -8,6 +8,7 @@
 
 import com.android.tools.r8.ProgramResource.Kind;
 import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.ArchiveEntryOrigin;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
@@ -36,7 +37,7 @@
  * <p>The descriptor index is built eagerly upon creating the provider and subsequent requests for
  * resources in the descriptor set will then force the read of zip entry contents.
  */
-@Keep
+@KeepForApi
 public class ArchiveClassFileProvider implements ClassFileResourceProvider, Closeable {
   private final Path archive;
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/ArchiveProgramResourceProvider.java b/src/main/java/com/android/tools/r8/ArchiveProgramResourceProvider.java
index d5dd240..1d98610 100644
--- a/src/main/java/com/android/tools/r8/ArchiveProgramResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/ArchiveProgramResourceProvider.java
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.ProgramResource.Kind;
 import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.ArchiveEntryOrigin;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
@@ -27,14 +28,14 @@
 import java.util.zip.ZipFile;
 
 /** Provider for archives of program resources. */
-@KeepForSubclassing
+@KeepForApi
 public class ArchiveProgramResourceProvider implements ProgramResourceProvider {
 
   interface ArchiveEntryConsumer {
     void accept(ArchiveEntryOrigin entry, InputStream stream) throws IOException;
   }
 
-  @KeepForSubclassing
+  @KeepForApi
   public interface ZipFileSupplier {
     ZipFile open() throws IOException;
   }
diff --git a/src/main/java/com/android/tools/r8/ArchiveProtoAndroidResourceConsumer.java b/src/main/java/com/android/tools/r8/ArchiveProtoAndroidResourceConsumer.java
index f2c4b5d..9bb7f82 100644
--- a/src/main/java/com/android/tools/r8/ArchiveProtoAndroidResourceConsumer.java
+++ b/src/main/java/com/android/tools/r8/ArchiveProtoAndroidResourceConsumer.java
@@ -3,11 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.ArchiveBuilder;
 import com.android.tools.r8.utils.OutputBuilder;
 import java.nio.file.Path;
 
-@Keep
+@KeepForApi
 public class ArchiveProtoAndroidResourceConsumer implements AndroidResourceConsumer {
   private final OutputBuilder outputBuilder;
 
diff --git a/src/main/java/com/android/tools/r8/ArchiveProtoAndroidResourceProvider.java b/src/main/java/com/android/tools/r8/ArchiveProtoAndroidResourceProvider.java
index cacef7b..7af6e19 100644
--- a/src/main/java/com/android/tools/r8/ArchiveProtoAndroidResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/ArchiveProtoAndroidResourceProvider.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8;
 
 import com.android.tools.r8.AndroidResourceInput.Kind;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.ArchiveEntryOrigin;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.FileUtils;
@@ -26,7 +27,7 @@
  * <p>The descriptor index is built eagerly upon creating the provider and subsequent requests for
  * resources in the descriptor set will then force the read of zip entry contents.
  */
-@Keep
+@KeepForApi
 public class ArchiveProtoAndroidResourceProvider implements AndroidResourceProvider {
   private final Path archive;
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/AssertionsConfiguration.java b/src/main/java/com/android/tools/r8/AssertionsConfiguration.java
index 07513c9..a3c957b 100644
--- a/src/main/java/com/android/tools/r8/AssertionsConfiguration.java
+++ b/src/main/java/com/android/tools/r8/AssertionsConfiguration.java
@@ -4,11 +4,12 @@
 
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.MethodReference;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.Reporter;
 
-@Keep
+@KeepForApi
 public class AssertionsConfiguration {
 
   private enum AssertionTransformation {
@@ -78,7 +79,7 @@
    * <p>A builder is obtained by calling {@link
    * BaseCompilerCommand.Builder#addAssertionsConfiguration}.
    */
-  @Keep
+  @KeepForApi
   public static class Builder {
     Reporter reporter;
     private AssertionTransformation transformation;
diff --git a/src/main/java/com/android/tools/r8/BackportedMethodList.java b/src/main/java/com/android/tools/r8/BackportedMethodList.java
index f6644c9..1398cd5 100644
--- a/src/main/java/com/android/tools/r8/BackportedMethodList.java
+++ b/src/main/java/com/android/tools/r8/BackportedMethodList.java
@@ -6,6 +6,7 @@
 
 import com.android.tools.r8.ir.desugar.desugaredlibrary.lint.DesugaredMethodsList;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.lint.DesugaredMethodsListCommand;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.ExceptionUtils;
 import com.android.tools.r8.utils.StringUtils;
@@ -44,7 +45,7 @@
  * The above generates the list of backported methods for a compilation with a min API of <code>
  * apiLevel</code> into the file <code>methods-list.txt</code>.
  */
-@Keep
+@KeepForApi
 public class BackportedMethodList {
 
   static final String USAGE_MESSAGE =
diff --git a/src/main/java/com/android/tools/r8/BackportedMethodListCommand.java b/src/main/java/com/android/tools/r8/BackportedMethodListCommand.java
index 1558357..485dd4f 100644
--- a/src/main/java/com/android/tools/r8/BackportedMethodListCommand.java
+++ b/src/main/java/com/android/tools/r8/BackportedMethodListCommand.java
@@ -7,6 +7,7 @@
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecification;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
@@ -35,7 +36,7 @@
  *     .build();
  * </pre>
  */
-@Keep
+@KeepForApi
 public class BackportedMethodListCommand {
 
   private final boolean printHelp;
@@ -184,7 +185,7 @@
     builder.setMinApiLevel(minApi);
   }
 
-  @Keep
+  @KeepForApi
   public static class Builder {
 
     private final Reporter reporter;
diff --git a/src/main/java/com/android/tools/r8/BaseCommand.java b/src/main/java/com/android/tools/r8/BaseCommand.java
index dd6a740..cc4cffe 100644
--- a/src/main/java/com/android/tools/r8/BaseCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCommand.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8;
 
 import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
 import com.android.tools.r8.utils.AbortException;
@@ -29,7 +30,7 @@
  * <p>For concrete builders, see for example {@link D8Command.Builder} and {@link
  * R8Command.Builder}.
  */
-@Keep
+@KeepForApi
 public abstract class BaseCommand {
 
   private final boolean printHelp;
@@ -103,7 +104,7 @@
    * @param <B> Concrete builder extending this base, e.g., {@link R8Command.Builder} or {@link
    *     D8Command.Builder}.
    */
-  @Keep
+  @KeepForApi
   public abstract static class Builder<C extends BaseCommand, B extends Builder<C, B>> {
 
     private final Reporter reporter;
diff --git a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
index 650ff31..c67603b 100644
--- a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecificationParser;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecification;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.profile.art.ArtProfileConsumer;
 import com.android.tools.r8.profile.art.ArtProfileForRewriting;
@@ -44,7 +45,7 @@
  * <p>For concrete builders, see for example {@link D8Command.Builder} and {@link
  * R8Command.Builder}.
  */
-@Keep
+@KeepForApi
 public abstract class BaseCompilerCommand extends BaseCommand {
 
   private final CompilationMode mode;
@@ -268,7 +269,7 @@
    * @param <B> Concrete builder extending this base, e.g., {@link R8Command.Builder} or {@link
    *     D8Command.Builder}.
    */
-  @Keep
+  @KeepForApi
   public abstract static class Builder<C extends BaseCompilerCommand, B extends Builder<C, B>>
       extends BaseCommand.Builder<C, B> {
 
diff --git a/src/main/java/com/android/tools/r8/ByteBufferProvider.java b/src/main/java/com/android/tools/r8/ByteBufferProvider.java
index cf80266..495c4f6 100644
--- a/src/main/java/com/android/tools/r8/ByteBufferProvider.java
+++ b/src/main/java/com/android/tools/r8/ByteBufferProvider.java
@@ -3,10 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.nio.ByteBuffer;
 
 /** Interface to enable manual memory management for a pool of byte buffers. */
-@KeepForSubclassing
+@KeepForApi
 public interface ByteBufferProvider {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/ByteDataView.java b/src/main/java/com/android/tools/r8/ByteDataView.java
index 65afbb1..6c6af5a 100644
--- a/src/main/java/com/android/tools/r8/ByteDataView.java
+++ b/src/main/java/com/android/tools/r8/ByteDataView.java
@@ -3,10 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.Arrays;
 
 /** Byte data view of a buffer that is possibly larger than the data content. */
-@Keep
+@KeepForApi
 public final class ByteDataView {
   private byte[] buffer;
   private final int offset;
diff --git a/src/main/java/com/android/tools/r8/CancelCompilationChecker.java b/src/main/java/com/android/tools/r8/CancelCompilationChecker.java
index f08cde1..71c1248 100644
--- a/src/main/java/com/android/tools/r8/CancelCompilationChecker.java
+++ b/src/main/java/com/android/tools/r8/CancelCompilationChecker.java
@@ -3,8 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /** Client supplied checker to allow cancelling a compilation before completion. */
-@Keep
+@KeepForApi
 public interface CancelCompilationChecker {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/ClassConflictResolver.java b/src/main/java/com/android/tools/r8/ClassConflictResolver.java
index 8136f17..7dc1a65 100644
--- a/src/main/java/com/android/tools/r8/ClassConflictResolver.java
+++ b/src/main/java/com/android/tools/r8/ClassConflictResolver.java
@@ -3,11 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.references.ClassReference;
 import java.util.Collection;
 
-@Keep
+@KeepForApi
 public interface ClassConflictResolver {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/ClassFileConsumer.java b/src/main/java/com/android/tools/r8/ClassFileConsumer.java
index fa3e5c4..ac8effc 100644
--- a/src/main/java/com/android/tools/r8/ClassFileConsumer.java
+++ b/src/main/java/com/android/tools/r8/ClassFileConsumer.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.ArchiveBuilder;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.DirectoryBuilder;
@@ -24,7 +25,7 @@
  *
  * <p>This consumer can only be provided to R8.
  */
-@KeepForSubclassing
+@KeepForApi
 public interface ClassFileConsumer extends ProgramConsumer {
 
   /**
@@ -51,7 +52,7 @@
   }
 
   /** Forwarding consumer to delegate to an optional existing consumer. */
-  @Keep
+  @KeepForApi
   class ForwardingConsumer implements ClassFileConsumer {
 
     private static final ClassFileConsumer EMPTY_CONSUMER = new ForwardingConsumer(null);
@@ -83,7 +84,7 @@
   }
 
   /** Consumer to write program resources to an output. */
-  @Keep
+  @KeepForApi
   class ArchiveConsumer extends ForwardingConsumer
       implements DataResourceConsumer, InternalProgramOutputPathConsumer {
     private final OutputBuilder outputBuilder;
@@ -164,7 +165,7 @@
   }
 
   /** Directory consumer to write program resources to a directory. */
-  @Keep
+  @KeepForApi
   class DirectoryConsumer extends ForwardingConsumer implements InternalProgramOutputPathConsumer {
     private final OutputBuilder outputBuilder;
     protected final boolean consumeDataResouces;
diff --git a/src/main/java/com/android/tools/r8/ClassFileResourceProvider.java b/src/main/java/com/android/tools/r8/ClassFileResourceProvider.java
index ab6a79d..a8c4a65 100644
--- a/src/main/java/com/android/tools/r8/ClassFileResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/ClassFileResourceProvider.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.io.IOException;
 import java.util.Set;
 
@@ -13,7 +14,7 @@
  * only created on-demand when they are needed by the compiler. If never needed, the resource will
  * never be loaded.
  */
-@KeepForSubclassing
+@KeepForApi
 public interface ClassFileResourceProvider {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/CompatProguardCommandBuilder.java b/src/main/java/com/android/tools/r8/CompatProguardCommandBuilder.java
index 80f679b..3084ee0 100644
--- a/src/main/java/com/android/tools/r8/CompatProguardCommandBuilder.java
+++ b/src/main/java/com/android/tools/r8/CompatProguardCommandBuilder.java
@@ -4,8 +4,10 @@
 
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 // This class is used by the Android Studio Gradle plugin and is thus part of the R8 API.
-@Keep
+@KeepForApi
 public class CompatProguardCommandBuilder extends R8Command.Builder {
   public CompatProguardCommandBuilder() {
     this(true);
diff --git a/src/main/java/com/android/tools/r8/CompilationFailedException.java b/src/main/java/com/android/tools/r8/CompilationFailedException.java
index d618dff..033b1da 100644
--- a/src/main/java/com/android/tools/r8/CompilationFailedException.java
+++ b/src/main/java/com/android/tools/r8/CompilationFailedException.java
@@ -3,11 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /**
  * Exception thrown when compilation failed to complete because of errors previously reported
  * through {@link com.android.tools.r8.DiagnosticsHandler}.
  */
-@Keep
+@KeepForApi
 public class CompilationFailedException extends Exception {
 
   private final boolean cancelled;
diff --git a/src/main/java/com/android/tools/r8/CompilationMode.java b/src/main/java/com/android/tools/r8/CompilationMode.java
index 9288a35..8adcb59 100644
--- a/src/main/java/com/android/tools/r8/CompilationMode.java
+++ b/src/main/java/com/android/tools/r8/CompilationMode.java
@@ -3,8 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /** Compilation mode. */
-@Keep
+@KeepForApi
 public enum CompilationMode {
   /** Preserves debugging information during compilation, eg, line-numbers and locals. */
   DEBUG,
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index 36080ca..55a8199 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -28,6 +28,7 @@
 import com.android.tools.r8.ir.optimize.AssertionsRewriter;
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackSimple;
 import com.android.tools.r8.jar.CfApplicationWriter;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.kotlin.KotlinMetadataRewriter;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.naming.PrefixRewritingNamingLens;
@@ -80,7 +81,7 @@
  * them to DEX bytecode (compiling from Java bytecode for such inputs and merging for DEX inputs),
  * and then writes the result to the directory or zip archive specified by {@code outputPath}.
  */
-@Keep
+@KeepForApi
 public final class D8 {
 
   private D8() {}
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index c210df5..211dfb5 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.inspector.Inspector;
 import com.android.tools.r8.inspector.internal.InspectorImpl;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.naming.MapConsumer;
 import com.android.tools.r8.naming.ProguardMapStringConsumer;
 import com.android.tools.r8.origin.Origin;
@@ -60,7 +61,7 @@
  *     .build();
  * </pre>
  */
-@Keep
+@KeepForApi
 public final class D8Command extends BaseCompilerCommand {
 
   private static class DefaultD8DiagnosticsHandler implements DiagnosticsHandler {
@@ -85,7 +86,7 @@
    *
    * <p>A builder is obtained by calling {@link D8Command#builder}.
    */
-  @Keep
+  @KeepForApi
   public static class Builder extends BaseCompilerCommand.Builder<D8Command, Builder> {
 
     private boolean intermediate = false;
diff --git a/src/main/java/com/android/tools/r8/DataDirectoryResource.java b/src/main/java/com/android/tools/r8/DataDirectoryResource.java
index ed944ae..78a0d49 100644
--- a/src/main/java/com/android/tools/r8/DataDirectoryResource.java
+++ b/src/main/java/com/android/tools/r8/DataDirectoryResource.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.ArchiveEntryOrigin;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
@@ -12,7 +13,7 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
-@Keep
+@KeepForApi
 public interface DataDirectoryResource extends DataResource {
 
   static DataDirectoryResource fromName(String name, Origin origin) {
diff --git a/src/main/java/com/android/tools/r8/DataEntryResource.java b/src/main/java/com/android/tools/r8/DataEntryResource.java
index 855b7a1..e5c01cb 100644
--- a/src/main/java/com/android/tools/r8/DataEntryResource.java
+++ b/src/main/java/com/android/tools/r8/DataEntryResource.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.ArchiveEntryOrigin;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
@@ -16,7 +17,7 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
-@Keep
+@KeepForApi
 public interface DataEntryResource extends DataResource {
 
   /** Get the bytes of the data entry resource. */
diff --git a/src/main/java/com/android/tools/r8/DataResource.java b/src/main/java/com/android/tools/r8/DataResource.java
index eac8b6c..6c9763f 100644
--- a/src/main/java/com/android/tools/r8/DataResource.java
+++ b/src/main/java/com/android/tools/r8/DataResource.java
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
-@Keep
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
+@KeepForApi
 public interface DataResource extends Resource {
   char SEPARATOR = '/';
 
diff --git a/src/main/java/com/android/tools/r8/DataResourceConsumer.java b/src/main/java/com/android/tools/r8/DataResourceConsumer.java
index e306b9b..2a8880d 100644
--- a/src/main/java/com/android/tools/r8/DataResourceConsumer.java
+++ b/src/main/java/com/android/tools/r8/DataResourceConsumer.java
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
-@KeepForSubclassing
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
+@KeepForApi
 public interface DataResourceConsumer {
 
   void accept(DataDirectoryResource directory, DiagnosticsHandler diagnosticsHandler);
diff --git a/src/main/java/com/android/tools/r8/DataResourceProvider.java b/src/main/java/com/android/tools/r8/DataResourceProvider.java
index 5e0a24f..ad77718 100644
--- a/src/main/java/com/android/tools/r8/DataResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/DataResourceProvider.java
@@ -3,10 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
-@KeepForSubclassing
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
+@KeepForApi
 public interface DataResourceProvider {
 
-  @KeepForSubclassing
+  @KeepForApi
   interface Visitor {
     void visit(DataDirectoryResource directory);
     void visit(DataEntryResource file);
diff --git a/src/main/java/com/android/tools/r8/DesugarGraphConsumer.java b/src/main/java/com/android/tools/r8/DesugarGraphConsumer.java
index fd553b3..a50230b 100644
--- a/src/main/java/com/android/tools/r8/DesugarGraphConsumer.java
+++ b/src/main/java/com/android/tools/r8/DesugarGraphConsumer.java
@@ -3,10 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 
 /** Consumer for receiving dependency edges for desugaring. */
-@KeepForSubclassing
+@KeepForApi
 public interface DesugarGraphConsumer {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/DexFilePerClassFileConsumer.java b/src/main/java/com/android/tools/r8/DexFilePerClassFileConsumer.java
index 1675cb2..55f1936 100644
--- a/src/main/java/com/android/tools/r8/DexFilePerClassFileConsumer.java
+++ b/src/main/java/com/android/tools/r8/DexFilePerClassFileConsumer.java
@@ -5,6 +5,7 @@
 
 import static com.android.tools.r8.utils.FileUtils.DEX_EXTENSION;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.ArchiveBuilder;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.DirectoryBuilder;
@@ -31,7 +32,7 @@
  *
  * <p>This consumer receives DEX file content for each Java class-file input.
  */
-@KeepForSubclassing
+@KeepForApi
 public interface DexFilePerClassFileConsumer extends ProgramConsumer, ByteBufferProvider {
 
   static final boolean SHOULD_COMBINE_SYNTHETIC_CLASSES = true;
@@ -93,7 +94,7 @@
   }
 
   /** Forwarding consumer to delegate to an optional existing consumer. */
-  @Keep
+  @KeepForApi
   class ForwardingConsumer implements DexFilePerClassFileConsumer {
 
     private static final DexFilePerClassFileConsumer EMPTY_CONSUMER = new ForwardingConsumer(null);
@@ -138,7 +139,7 @@
   }
 
   /** Consumer to write program resources to an output. */
-  @Keep
+  @KeepForApi
   class ArchiveConsumer extends ForwardingConsumer
       implements DataResourceConsumer, InternalProgramOutputPathConsumer {
     private final OutputBuilder outputBuilder;
@@ -231,7 +232,7 @@
   }
 
   /** Directory consumer to write program resources to a directory. */
-  @Keep
+  @KeepForApi
   class DirectoryConsumer extends ForwardingConsumer
       implements DataResourceConsumer, InternalProgramOutputPathConsumer {
     private final OutputBuilder outputBuilder;
diff --git a/src/main/java/com/android/tools/r8/DexIndexedConsumer.java b/src/main/java/com/android/tools/r8/DexIndexedConsumer.java
index 39f5b2e..9e7c06b 100644
--- a/src/main/java/com/android/tools/r8/DexIndexedConsumer.java
+++ b/src/main/java/com/android/tools/r8/DexIndexedConsumer.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
 import com.android.tools.r8.utils.ArchiveBuilder;
@@ -34,7 +35,7 @@
  * <p>This consumer receives DEX file content using standard indexed-multidex for programs larger
  * than a single DEX file. This is the default consumer for DEX programs.
  */
-@KeepForSubclassing
+@KeepForApi
 public interface DexIndexedConsumer extends ProgramConsumer, ByteBufferProvider {
 
   /**
@@ -78,7 +79,7 @@
   }
 
   /** Forwarding consumer to delegate to an optional existing consumer. */
-  @Keep
+  @KeepForApi
   class ForwardingConsumer implements DexIndexedConsumer {
 
     private static final DexIndexedConsumer EMPTY_CONSUMER = new ForwardingConsumer(null);
@@ -111,7 +112,7 @@
   }
 
   /** Consumer to write program resources to an output. */
-  @Keep
+  @KeepForApi
   class ArchiveConsumer extends ForwardingConsumer
       implements DataResourceConsumer, InternalProgramOutputPathConsumer {
     protected final OutputBuilder outputBuilder;
@@ -211,7 +212,7 @@
     }
   }
 
-  @Keep
+  @KeepForApi
   class DirectoryConsumer extends ForwardingConsumer
       implements DataResourceConsumer, InternalProgramOutputPathConsumer {
     private final Path directory;
diff --git a/src/main/java/com/android/tools/r8/Diagnostic.java b/src/main/java/com/android/tools/r8/Diagnostic.java
index 3184d54..bf05be1 100644
--- a/src/main/java/com/android/tools/r8/Diagnostic.java
+++ b/src/main/java/com/android/tools/r8/Diagnostic.java
@@ -3,13 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-/**
- * Interface for all diagnostic message produced by D8 and R8.
- */
-@Keep
+/** Interface for all diagnostic message produced by D8 and R8. */
+@KeepForApi
 public interface Diagnostic {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/DiagnosticsHandler.java b/src/main/java/com/android/tools/r8/DiagnosticsHandler.java
index a332327..88ad2c8 100644
--- a/src/main/java/com/android/tools/r8/DiagnosticsHandler.java
+++ b/src/main/java/com/android/tools/r8/DiagnosticsHandler.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import java.io.PrintStream;
@@ -12,7 +13,7 @@
  *
  * <p>During compilation the warning and info methods will be called.
  */
-@Keep
+@KeepForApi
 public interface DiagnosticsHandler {
 
   /** Should be considered private. */
diff --git a/src/main/java/com/android/tools/r8/DiagnosticsLevel.java b/src/main/java/com/android/tools/r8/DiagnosticsLevel.java
index a022b0d..9497a86 100644
--- a/src/main/java/com/android/tools/r8/DiagnosticsLevel.java
+++ b/src/main/java/com/android/tools/r8/DiagnosticsLevel.java
@@ -3,8 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /** Levels of diagnostics messages reported by the compiler. */
-@Keep
+@KeepForApi
 public enum DiagnosticsLevel {
   ERROR,
   WARNING,
diff --git a/src/main/java/com/android/tools/r8/DirectoryClassFileProvider.java b/src/main/java/com/android/tools/r8/DirectoryClassFileProvider.java
index 50aff3f..53f15ba 100644
--- a/src/main/java/com/android/tools/r8/DirectoryClassFileProvider.java
+++ b/src/main/java/com/android/tools/r8/DirectoryClassFileProvider.java
@@ -7,6 +7,7 @@
 import static com.android.tools.r8.utils.FileUtils.isClassFile;
 
 import com.android.tools.r8.ProgramResource.Kind;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.google.common.collect.Sets;
 import java.io.File;
@@ -15,11 +16,8 @@
 import java.util.HashSet;
 import java.util.Set;
 
-/**
- * Lazy resource provider returning class file resources based
- * on filesystem directory content.
- */
-@Keep
+/** Lazy resource provider returning class file resources based on filesystem directory content. */
+@KeepForApi
 public final class DirectoryClassFileProvider implements ClassFileResourceProvider {
   private final Path root;
 
diff --git a/src/main/java/com/android/tools/r8/ExtractMarker.java b/src/main/java/com/android/tools/r8/ExtractMarker.java
index 79ec8a5..99080f9 100644
--- a/src/main/java/com/android/tools/r8/ExtractMarker.java
+++ b/src/main/java/com/android/tools/r8/ExtractMarker.java
@@ -8,6 +8,7 @@
 import com.android.tools.r8.dex.ApplicationReader;
 import com.android.tools.r8.dex.Marker;
 import com.android.tools.r8.graph.DexApplication;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.AndroidApp;
@@ -37,7 +38,7 @@
  *       .build());
  * </pre>
  */
-@Keep
+@KeepForApi
 public class ExtractMarker {
 
   private static class MarkerInfoPrintConsumer implements MarkerInfoConsumer {
diff --git a/src/main/java/com/android/tools/r8/ExtractMarkerCommand.java b/src/main/java/com/android/tools/r8/ExtractMarkerCommand.java
index 831530f..c6d1968 100644
--- a/src/main/java/com/android/tools/r8/ExtractMarkerCommand.java
+++ b/src/main/java/com/android/tools/r8/ExtractMarkerCommand.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8;
 
 import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
 import com.android.tools.r8.utils.Pair;
@@ -17,11 +18,11 @@
 import java.util.function.BiConsumer;
 
 /** Immutable command structure for an invocation of the {@link ExtractMarker} tool. */
-@Keep
+@KeepForApi
 public class ExtractMarkerCommand {
 
   /** Builder for constructing a {@link ExtractMarkerCommand}. */
-  @Keep
+  @KeepForApi
   public static class Builder {
     private boolean printHelp = false;
     private final List<Path> programFiles = new ArrayList<>();
diff --git a/src/main/java/com/android/tools/r8/FeatureSplit.java b/src/main/java/com/android/tools/r8/FeatureSplit.java
index 08f54e6..97e6cb2 100644
--- a/src/main/java/com/android/tools/r8/FeatureSplit.java
+++ b/src/main/java/com/android/tools/r8/FeatureSplit.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -27,7 +28,7 @@
  *     .build();
  * </pre>
  */
-@Keep
+@KeepForApi
 public class FeatureSplit {
 
   public static final FeatureSplit BASE =
@@ -85,7 +86,7 @@
    *
    * <p>A builder is obtained by calling addFeatureSplit on a {@link R8Command.Builder}.
    */
-  @Keep
+  @KeepForApi
   public static class Builder {
     private ProgramConsumer programConsumer;
     private final List<ProgramResourceProvider> programResourceProviders = new ArrayList<>();
diff --git a/src/main/java/com/android/tools/r8/GenerateMainDexList.java b/src/main/java/com/android/tools/r8/GenerateMainDexList.java
index 182d156..6f51728 100644
--- a/src/main/java/com/android/tools/r8/GenerateMainDexList.java
+++ b/src/main/java/com/android/tools/r8/GenerateMainDexList.java
@@ -16,6 +16,7 @@
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.SubtypingInfo;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.profile.rewriting.ProfileCollectionAdditions;
 import com.android.tools.r8.shaking.Enqueuer;
 import com.android.tools.r8.shaking.EnqueuerFactory;
@@ -35,7 +36,7 @@
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 
-@Keep
+@KeepForApi
 public class GenerateMainDexList {
   private final Timing timing = new Timing("maindex");
   private final InternalOptions options;
diff --git a/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java b/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
index 337fad7..b782e91 100644
--- a/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
+++ b/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
@@ -5,6 +5,7 @@
 
 import com.android.tools.r8.experimental.graphinfo.GraphConsumer;
 import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.CommandLineOrigin;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.shaking.ProguardConfigurationParser;
@@ -23,7 +24,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-@Keep
+@KeepForApi
 public class GenerateMainDexListCommand extends BaseCommand {
 
   private final List<ProguardConfigurationRule> mainDexKeepRules;
@@ -32,7 +33,7 @@
   private final DexItemFactory factory;
   private final Reporter reporter;
 
-  @Keep
+  @KeepForApi
   public static class Builder extends BaseCommand.Builder<GenerateMainDexListCommand, Builder> {
 
     private final DexItemFactory factory = new DexItemFactory();
diff --git a/src/main/java/com/android/tools/r8/GlobalSyntheticsConsumer.java b/src/main/java/com/android/tools/r8/GlobalSyntheticsConsumer.java
index 1f982ce..88e9f55 100644
--- a/src/main/java/com/android/tools/r8/GlobalSyntheticsConsumer.java
+++ b/src/main/java/com/android/tools/r8/GlobalSyntheticsConsumer.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 
 /**
@@ -18,7 +19,7 @@
  * application. It is valid to merge just the globals in such a final step. See {@code
  * GlobalSyntheticsResourceProvider}.
  */
-@Keep
+@KeepForApi
 public interface GlobalSyntheticsConsumer {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java b/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java
index ef754ba..c9590ea 100644
--- a/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java
+++ b/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java
@@ -39,6 +39,7 @@
 import com.android.tools.r8.ir.desugar.records.RecordDesugaring;
 import com.android.tools.r8.ir.desugar.varhandle.VarHandleDesugaring;
 import com.android.tools.r8.ir.desugar.varhandle.VarHandleDesugaringEventConsumer;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.naming.RecordRewritingNamingLens;
 import com.android.tools.r8.naming.VarHandleDesugaringRewritingNamingLens;
 import com.android.tools.r8.origin.CommandLineOrigin;
@@ -68,7 +69,7 @@
  * The GlobalSyntheticsGenerator, a tool for generating a dex file for all possible global
  * synthetics.
  */
-@Keep
+@KeepForApi
 public class GlobalSyntheticsGenerator {
 
   @SuppressWarnings("ReferenceEquality")
diff --git a/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorCommand.java b/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorCommand.java
index 1d85164..44f54ba 100644
--- a/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorCommand.java
+++ b/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorCommand.java
@@ -8,6 +8,7 @@
 import com.android.tools.r8.errors.CompilationError;
 import com.android.tools.r8.errors.DexFileOverflowDiagnostic;
 import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.AbortException;
 import com.android.tools.r8.utils.AndroidApiLevel;
@@ -25,7 +26,7 @@
 /**
  * Immutable command structure for an invocation of the {@link GlobalSyntheticsGenerator} compiler.
  */
-@Keep
+@KeepForApi
 public final class GlobalSyntheticsGeneratorCommand {
 
   private final ProgramConsumer programConsumer;
@@ -152,7 +153,7 @@
    *
    * <p>A builder is obtained by calling {@link GlobalSyntheticsGeneratorCommand#builder}.
    */
-  @Keep
+  @KeepForApi
   public static class Builder {
 
     private ProgramConsumer programConsumer = null;
diff --git a/src/main/java/com/android/tools/r8/GlobalSyntheticsResourceProvider.java b/src/main/java/com/android/tools/r8/GlobalSyntheticsResourceProvider.java
index 4cfdbb1..73a0841 100644
--- a/src/main/java/com/android/tools/r8/GlobalSyntheticsResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/GlobalSyntheticsResourceProvider.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import java.io.InputStream;
 
@@ -12,7 +13,7 @@
  * <p>The global synthetic information can only be obtained by consuming it from a previous
  * compilation unit for the same compiler version. See {@code GlobalSyntheticsConsumer}.
  */
-@Keep
+@KeepForApi
 public interface GlobalSyntheticsResourceProvider {
 
   /** Get the origin of the global synthetics resource. */
diff --git a/src/main/java/com/android/tools/r8/InputDependencyGraphConsumer.java b/src/main/java/com/android/tools/r8/InputDependencyGraphConsumer.java
index 20b0a30..9aa0b01 100644
--- a/src/main/java/com/android/tools/r8/InputDependencyGraphConsumer.java
+++ b/src/main/java/com/android/tools/r8/InputDependencyGraphConsumer.java
@@ -3,11 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import java.nio.file.Path;
 
 /** Consumer for receiving file dependencies from inputs. */
-@KeepForSubclassing
+@KeepForApi
 public interface InputDependencyGraphConsumer {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/JarSizeCompare.java b/src/main/java/com/android/tools/r8/JarSizeCompare.java
deleted file mode 100644
index 8e8388b..0000000
--- a/src/main/java/com/android/tools/r8/JarSizeCompare.java
+++ /dev/null
@@ -1,484 +0,0 @@
-// 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.
-package com.android.tools.r8;
-
-import com.android.tools.r8.dex.ApplicationReader;
-import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.Code;
-import com.android.tools.r8.graph.DexApplication;
-import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.graph.DexEncodedField;
-import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.graph.DexProgramClass;
-import com.android.tools.r8.naming.ClassNameMapper;
-import com.android.tools.r8.naming.ClassNamingForNameMapper;
-import com.android.tools.r8.naming.MemberNaming.FieldSignature;
-import com.android.tools.r8.naming.MemberNaming.MethodSignature;
-import com.android.tools.r8.utils.AndroidApiLevel;
-import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.AndroidAppConsumers;
-import com.android.tools.r8.utils.DescriptorUtils;
-import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.Timing;
-import com.google.common.collect.ImmutableMap;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.function.BiConsumer;
-
-/**
- * JarSizeCompare outputs the class, method, field sizes of the given JAR files. For each input, a
- * ProGuard map can be passed that is used to resolve minified names.
- *
- * <p>By default, only shows methods where R8's DEX output is 5 or more instructions larger than
- * ProGuard+D8's output. Pass {@code --threshold 0} to display all methods.
- */
-public class JarSizeCompare {
-
-  private static final String USAGE =
-      "Arguments:\n"
-          + "    [--threshold <threshold>]\n"
-          + "    [--lib <lib.jar>]\n"
-          + "    --input <name1> <input1.jar> [<map1.txt>]\n"
-          + "    --input <name2> <input2.jar> [<map2.txt>] ...\n"
-          + "\n"
-          + "JarSizeCompare outputs the class, method, field sizes of the given JAR files.\n"
-          + "For each input, a ProGuard map can be passed that is used to resolve minified"
-          + " names.\n";
-
-  private static final ImmutableMap<String, String> R8_RELOCATIONS =
-      ImmutableMap.<String, String>builder()
-          .put("com.google.common", "com.android.tools.r8.com.google.common")
-          .put("com.google.gson", "com.android.tools.r8.com.google.gson")
-          .put("com.google.thirdparty", "com.android.tools.r8.com.google.thirdparty")
-          .put("org.apache.commons", "com.android.tools.r8.org.apache.commons")
-          .put("org.objectweb.asm", "com.android.tools.r8.org.objectweb.asm")
-          .put("it.unimi.dsi.fastutil", "com.android.tools.r8.it.unimi.dsi.fastutil")
-          .build();
-
-  private final List<Path> libraries;
-  private final List<InputParameter> inputParameters;
-  private final int threshold;
-  private final InternalOptions options;
-  private int pgIndex;
-  private int r8Index;
-
-  private JarSizeCompare(
-      List<Path> libraries, List<InputParameter> inputParameters, int threshold) {
-    this.libraries = libraries;
-    this.inputParameters = inputParameters;
-    this.threshold = threshold;
-    options = new InternalOptions();
-  }
-
-  public void run() throws Exception {
-    List<String> names = new ArrayList<>();
-    List<InputApplication> inputApplicationList = new ArrayList<>();
-    Timing timing = new Timing("JarSizeCompare");
-    for (InputParameter inputParameter : inputParameters) {
-      AndroidApp inputApp = inputParameter.getInputApp(libraries);
-      DexApplication input = inputParameter.getReader(options, inputApp, timing);
-      AndroidAppConsumers appConsumer = new AndroidAppConsumers();
-      D8.run(
-          D8Command.builder(inputApp)
-              .setMinApiLevel(AndroidApiLevel.P.getLevel())
-              .setProgramConsumer(appConsumer.wrapDexIndexedConsumer(null))
-              .build());
-      DexApplication d8Input = inputParameter.getReader(options, appConsumer.build(), timing);
-      InputApplication inputApplication =
-          new InputApplication(input, translateClassNames(input, input.classes()));
-      InputApplication d8Classes =
-          new InputApplication(input, translateClassNames(input, d8Input.classes()));
-      names.add(inputParameter.name + "-input");
-      inputApplicationList.add(inputApplication);
-      names.add(inputParameter.name + "-d8");
-      inputApplicationList.add(d8Classes);
-    }
-    if (threshold != 0) {
-      pgIndex = names.indexOf("pg-d8");
-      r8Index = names.indexOf("r8-d8");
-    }
-    Map<String, InputClass[]> inputClasses = new HashMap<>();
-    for (int i = 0; i < names.size(); i++) {
-      InputApplication classes = inputApplicationList.get(i);
-      for (String className : classes.getClasses()) {
-        inputClasses.computeIfAbsent(className, k -> new InputClass[names.size()])[i] =
-            classes.getInputClass(className);
-      }
-    }
-    for (Entry<String, Map<String, InputClass[]>> library : byLibrary(inputClasses)) {
-      System.out.println();
-      System.out.println("=".repeat(100));
-      String commonPrefix = getCommonPrefix(library.getValue().keySet());
-      if (library.getKey().isEmpty()) {
-        System.out.println("PROGRAM (" + commonPrefix + ")");
-      } else {
-        System.out.println("LIBRARY: " + library.getKey() + " (" + commonPrefix + ")");
-      }
-      printLibrary(library.getValue(), commonPrefix);
-    }
-  }
-
-  private Map<String, DexProgramClass> translateClassNames(
-      DexApplication input, Collection<DexProgramClass> classes) {
-    Map<String, DexProgramClass> result = new HashMap<>();
-    ClassNameMapper classNameMapper = input.getProguardMap();
-    for (DexProgramClass programClass : classes) {
-      ClassNamingForNameMapper classNaming;
-      if (classNameMapper == null) {
-        classNaming = null;
-      } else {
-        classNaming = classNameMapper.getClassNaming(programClass.type);
-      }
-      String type =
-          classNaming == null ? programClass.type.toSourceString() : classNaming.originalName;
-      result.put(type, programClass);
-    }
-    return result;
-  }
-
-  private String getCommonPrefix(Set<String> classes) {
-    if (classes.size() <= 1) {
-      return "";
-    }
-    String commonPrefix = null;
-    for (String clazz : classes) {
-      if (clazz.equals("r8.GeneratedOutlineSupport")) {
-        continue;
-      }
-      if (commonPrefix == null) {
-        commonPrefix = clazz;
-      } else {
-        int i = 0;
-        while (i < clazz.length()
-            && i < commonPrefix.length()
-            && clazz.charAt(i) == commonPrefix.charAt(i)) {
-          i++;
-        }
-        commonPrefix = commonPrefix.substring(0, i);
-      }
-    }
-    return commonPrefix;
-  }
-
-  private void printLibrary(Map<String, InputClass[]> classMap, String commonPrefix) {
-    List<Entry<String, InputClass[]>> classes = new ArrayList<>(classMap.entrySet());
-    classes.sort(Comparator.comparing(Entry::getKey));
-    for (Entry<String, InputClass[]> clazz : classes) {
-      printClass(
-          clazz.getKey().substring(commonPrefix.length()), new ClassCompare(clazz.getValue()));
-    }
-  }
-
-  private void printClass(String name, ClassCompare inputClasses) {
-    List<MethodSignature> methods = getMethods(inputClasses);
-    List<FieldSignature> fields = getFields(inputClasses);
-    if (methods.isEmpty() && fields.isEmpty()) {
-      return;
-    }
-    System.out.println(name);
-    for (MethodSignature sig : methods) {
-      printSignature(getMethodString(sig), inputClasses.sizes(sig));
-    }
-    for (FieldSignature sig : fields) {
-      printSignature(getFieldString(sig), inputClasses.sizes(sig));
-    }
-  }
-
-  private String getMethodString(MethodSignature sig) {
-    StringBuilder builder = new StringBuilder().append('(');
-    for (int i = 0; i < sig.parameters.length; i++) {
-      builder.append(DescriptorUtils.javaTypeToShorty(sig.parameters[i]));
-    }
-    builder.append(')').append(DescriptorUtils.javaTypeToShorty(sig.type)).append(' ');
-    return builder.append(sig.name).toString();
-  }
-
-  private String getFieldString(FieldSignature sig) {
-    return DescriptorUtils.javaTypeToShorty(sig.type) + ' ' + sig.name;
-  }
-
-  private void printSignature(String key, int[] sizes) {
-    System.out.print(padItem(key));
-    for (int size : sizes) {
-      System.out.print(padValue(size));
-    }
-    System.out.print('\n');
-  }
-
-  private List<MethodSignature> getMethods(ClassCompare inputClasses) {
-    List<MethodSignature> methods = new ArrayList<>();
-    for (MethodSignature methodSignature : inputClasses.getMethods()) {
-      if (threshold == 0 || methodExceedsThreshold(inputClasses, methodSignature)) {
-        methods.add(methodSignature);
-      }
-    }
-    return methods;
-  }
-
-  private boolean methodExceedsThreshold(
-      ClassCompare inputClasses, MethodSignature methodSignature) {
-    assert threshold > 0;
-    assert pgIndex != r8Index;
-    int pgSize = inputClasses.size(methodSignature, pgIndex);
-    int r8Size = inputClasses.size(methodSignature, r8Index);
-    return pgSize != -1 && r8Size != -1 && pgSize + threshold <= r8Size;
-  }
-
-  private List<FieldSignature> getFields(ClassCompare inputClasses) {
-    return threshold == 0 ? inputClasses.getFields() : Collections.emptyList();
-  }
-
-  private String padItem(String s) {
-    return String.format("%-52s", s);
-  }
-
-  private String padValue(int v) {
-    return String.format("%8s", v == -1 ? "---" : v);
-  }
-
-  private List<Map.Entry<String, Map<String, InputClass[]>>> byLibrary(
-      Map<String, InputClass[]> inputClasses) {
-    Map<String, Map<String, InputClass[]>> byLibrary = new HashMap<>();
-    for (Entry<String, InputClass[]> entry : inputClasses.entrySet()) {
-      Map<String, InputClass[]> library =
-          byLibrary.computeIfAbsent(getLibraryName(entry.getKey()), k -> new HashMap<>());
-      library.put(entry.getKey(), entry.getValue());
-    }
-    List<Entry<String, Map<String, InputClass[]>>> list = new ArrayList<>(byLibrary.entrySet());
-    list.sort(Comparator.comparing(Entry::getKey));
-    return list;
-  }
-
-  private String getLibraryName(String className) {
-    for (Entry<String, String> relocation : R8_RELOCATIONS.entrySet()) {
-      if (className.startsWith(relocation.getValue())) {
-        return relocation.getKey();
-      }
-    }
-    return "";
-  }
-
-  static class InputParameter {
-
-    private final String name;
-    private final Path jar;
-    private final Path map;
-
-    InputParameter(String name, Path jar, Path map) {
-      this.name = name;
-      this.jar = jar;
-      this.map = map;
-    }
-
-    DexApplication getReader(InternalOptions options, AndroidApp inputApp, Timing timing)
-        throws Exception {
-      ApplicationReader applicationReader = new ApplicationReader(inputApp, options, timing);
-      return applicationReader.read(map == null ? null : StringResource.fromFile(map)).toDirect();
-    }
-
-    AndroidApp getInputApp(List<Path> libraries) {
-      return AndroidApp.builder().addLibraryFiles(libraries).addProgramFiles(jar).build();
-    }
-  }
-
-  static class InputApplication {
-
-    private final DexApplication dexApplication;
-    private final Map<String, DexProgramClass> classMap;
-
-    private InputApplication(DexApplication dexApplication, Map<String, DexProgramClass> classMap) {
-      this.dexApplication = dexApplication;
-      this.classMap = classMap;
-    }
-
-    public Set<String> getClasses() {
-      return classMap.keySet();
-    }
-
-    private InputClass getInputClass(String type) {
-      DexProgramClass inputClass = classMap.get(type);
-      ClassNameMapper proguardMap = dexApplication.getProguardMap();
-      return new InputClass(inputClass, proguardMap);
-    }
-  }
-
-  static class InputClass {
-    private final DexProgramClass programClass;
-    private final ClassNameMapper proguardMap;
-
-    InputClass(DexClass dexClass, ClassNameMapper proguardMap) {
-      this.programClass = dexClass == null ? null : dexClass.asProgramClass();
-      this.proguardMap = proguardMap;
-    }
-
-    void forEachMethod(BiConsumer<MethodSignature, DexEncodedMethod> consumer) {
-      if (programClass == null) {
-        return;
-      }
-      programClass.forEachMethod(
-          dexEncodedMethod -> {
-            MethodSignature originalSignature =
-                proguardMap == null
-                    ? null
-                    : proguardMap.originalSignatureOf(dexEncodedMethod.getReference());
-            MethodSignature signature =
-                MethodSignature.fromDexMethod(dexEncodedMethod.getReference());
-            consumer.accept(
-                originalSignature == null ? signature : originalSignature, dexEncodedMethod);
-          });
-    }
-
-    void forEachField(BiConsumer<FieldSignature, DexEncodedField> consumer) {
-      if (programClass == null) {
-        return;
-      }
-      programClass.forEachField(
-          dexEncodedField -> {
-            FieldSignature originalSignature =
-                proguardMap == null
-                    ? null
-                    : proguardMap.originalSignatureOf(dexEncodedField.getReference());
-            FieldSignature signature = FieldSignature.fromDexField(dexEncodedField.getReference());
-            consumer.accept(
-                originalSignature == null ? signature : originalSignature, dexEncodedField);
-          });
-    }
-  }
-
-  private static class ClassCompare {
-    final Map<MethodSignature, DexEncodedMethod[]> methods = new HashMap<>();
-    final Map<FieldSignature, DexEncodedField[]> fields = new HashMap<>();
-    final int classes;
-
-    ClassCompare(InputClass[] inputs) {
-      for (int i = 0; i < inputs.length; i++) {
-        InputClass inputClass = inputs[i];
-        int finalI = i;
-        if (inputClass == null) {
-          continue;
-        }
-        inputClass.forEachMethod(
-            (sig, m) ->
-                methods.computeIfAbsent(sig, o -> new DexEncodedMethod[inputs.length])[finalI] = m);
-        inputClass.forEachField(
-            (sig, f) ->
-                fields.computeIfAbsent(sig, o -> new DexEncodedField[inputs.length])[finalI] = f);
-      }
-      classes = inputs.length;
-    }
-
-    List<MethodSignature> getMethods() {
-      List<MethodSignature> methods = new ArrayList<>(this.methods.keySet());
-      methods.sort(Comparator.comparing(MethodSignature::toString));
-      return methods;
-    }
-
-    List<FieldSignature> getFields() {
-      List<FieldSignature> fields = new ArrayList<>(this.fields.keySet());
-      fields.sort(Comparator.comparing(FieldSignature::toString));
-      return fields;
-    }
-
-    int size(MethodSignature method, int classIndex) {
-      DexEncodedMethod dexEncodedMethod = methods.get(method)[classIndex];
-      if (dexEncodedMethod == null) {
-        return -1;
-      }
-      Code code = dexEncodedMethod.getCode();
-      if (code == null) {
-        return 0;
-      }
-      if (code.isCfCode()) {
-        return code.asCfCode().getInstructions().size();
-      }
-      if (code.isDexCode()) {
-        return code.asDexCode().instructions.length;
-      }
-      throw new Unreachable();
-    }
-
-    int[] sizes(MethodSignature method) {
-      int[] result = new int[classes];
-      for (int i = 0; i < classes; i++) {
-        result[i] = size(method, i);
-      }
-      return result;
-    }
-
-    int size(FieldSignature field, int classIndex) {
-      return fields.get(field)[classIndex] == null ? -1 : 1;
-    }
-
-    int[] sizes(FieldSignature field) {
-      int[] result = new int[classes];
-      for (int i = 0; i < classes; i++) {
-        result[i] = size(field, i);
-      }
-      return result;
-    }
-  }
-
-  public static void main(String[] args) throws Exception {
-    JarSizeCompare program = JarSizeCompare.parse(args);
-    if (program == null) {
-      System.out.println(USAGE);
-    } else {
-      program.run();
-    }
-  }
-
-  public static JarSizeCompare parse(String[] args) {
-    int i = 0;
-    int threshold = 0;
-    List<Path> libraries = new ArrayList<>();
-    List<InputParameter> inputs = new ArrayList<>();
-    Set<String> names = new HashSet<>();
-    while (i < args.length) {
-      if (args[i].equals("--threshold") && i + 1 < args.length) {
-        threshold = Integer.parseInt(args[i + 1]);
-        i += 2;
-      } else if (args[i].equals("--lib") && i + 1 < args.length) {
-        libraries.add(Paths.get(args[i + 1]));
-        i += 2;
-      } else if (args[i].equals("--input") && i + 2 < args.length) {
-        String name = args[i + 1];
-        Path jar = Paths.get(args[i + 2]);
-        Path map = null;
-        if (i + 3 < args.length && !args[i + 3].startsWith("-")) {
-          map = Paths.get(args[i + 3]);
-          i += 4;
-        } else {
-          i += 3;
-        }
-        inputs.add(new InputParameter(name, jar, map));
-        if (!names.add(name)) {
-          System.out.println("Duplicate name: " + name);
-          return null;
-        }
-      } else {
-        return null;
-      }
-    }
-    if (inputs.size() < 2) {
-      return null;
-    }
-    if (threshold != 0 && (!names.contains("r8") || !names.contains("pg"))) {
-      System.out.println(
-          "You must either specify names \"pg\" and \"r8\" for input files "
-              + "or use \"--threshold 0\".");
-      return null;
-    }
-    return new JarSizeCompare(libraries, inputs, threshold);
-  }
-}
diff --git a/src/main/java/com/android/tools/r8/JdkClassFileProvider.java b/src/main/java/com/android/tools/r8/JdkClassFileProvider.java
index bd40b44..28999a3 100644
--- a/src/main/java/com/android/tools/r8/JdkClassFileProvider.java
+++ b/src/main/java/com/android/tools/r8/JdkClassFileProvider.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8;
 
 import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
 import com.android.tools.r8.utils.DescriptorUtils;
@@ -34,7 +35,7 @@
  * <code>lib/rt.jar</code> will be loaded. JDK's of version 9 or higher system module classes will
  * be loaded using <code>lib/jrt-fs.jar/<code>.
  */
-@Keep
+@KeepForApi
 public class JdkClassFileProvider implements ClassFileResourceProvider, Closeable {
   private Origin origin;
   private final Set<String> descriptors = new HashSet<>();
diff --git a/src/main/java/com/android/tools/r8/KeepForRetraceApi.java b/src/main/java/com/android/tools/r8/KeepForRetraceApi.java
deleted file mode 100644
index 5ed253c..0000000
--- a/src/main/java/com/android/tools/r8/KeepForRetraceApi.java
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2021, 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.
-
-package com.android.tools.r8;
-
-@KeepForRetraceApi
-public @interface KeepForRetraceApi {}
diff --git a/src/main/java/com/android/tools/r8/KeepForSubclassing.java b/src/main/java/com/android/tools/r8/KeepForSubclassing.java
deleted file mode 100644
index 6e57114..0000000
--- a/src/main/java/com/android/tools/r8/KeepForSubclassing.java
+++ /dev/null
@@ -1,9 +0,0 @@
-// 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.
-package com.android.tools.r8;
-
-@Keep
-public @interface KeepForSubclassing {
-
-}
diff --git a/src/main/java/com/android/tools/r8/L8.java b/src/main/java/com/android/tools/r8/L8.java
index 7950354..1c1e64c 100644
--- a/src/main/java/com/android/tools/r8/L8.java
+++ b/src/main/java/com/android/tools/r8/L8.java
@@ -15,6 +15,7 @@
 import com.android.tools.r8.ir.desugar.TypeRewriter;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryAmender;
 import com.android.tools.r8.jar.CfApplicationWriter;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.naming.PrefixRewritingNamingLens;
 import com.android.tools.r8.naming.VarHandleDesugaringRewritingNamingLens;
 import com.android.tools.r8.naming.signature.GenericSignatureRewriter;
@@ -34,10 +35,8 @@
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 
-/**
- * The L8 compiler.
- */
-@Keep
+/** The L8 compiler. */
+@KeepForApi
 public class L8 {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/L8Command.java b/src/main/java/com/android/tools/r8/L8Command.java
index 679dd95..664eae4 100644
--- a/src/main/java/com/android/tools/r8/L8Command.java
+++ b/src/main/java/com/android/tools/r8/L8Command.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.horizontalclassmerging.HorizontalClassMerger;
 import com.android.tools.r8.inspector.Inspector;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.profile.art.ArtProfileForRewriting;
 import com.android.tools.r8.utils.AndroidApiLevel;
@@ -37,7 +38,7 @@
 import java.util.function.Consumer;
 
 /** Immutable command structure for an invocation of the {@link L8} library compiler. */
-@Keep
+@KeepForApi
 public final class L8Command extends BaseCompilerCommand {
 
   private final D8Command d8Command;
@@ -252,7 +253,7 @@
    *
    * <p>A builder is obtained by calling {@link L8Command#builder}.
    */
-  @Keep
+  @KeepForApi
   public static class Builder extends BaseCompilerCommand.Builder<L8Command, Builder> {
 
     private final List<Pair<List<String>, Origin>> proguardConfigStrings = new ArrayList<>();
diff --git a/src/main/java/com/android/tools/r8/MapIdEnvironment.java b/src/main/java/com/android/tools/r8/MapIdEnvironment.java
index f1e4260..7278811 100644
--- a/src/main/java/com/android/tools/r8/MapIdEnvironment.java
+++ b/src/main/java/com/android/tools/r8/MapIdEnvironment.java
@@ -3,8 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /** Environment made available when defining a custom map id for a build. */
-@Keep
+@KeepForApi
 public interface MapIdEnvironment {
 
   /** Get the computed hash for the mapping file content. */
diff --git a/src/main/java/com/android/tools/r8/MapIdProvider.java b/src/main/java/com/android/tools/r8/MapIdProvider.java
index 9af775f..576400d 100644
--- a/src/main/java/com/android/tools/r8/MapIdProvider.java
+++ b/src/main/java/com/android/tools/r8/MapIdProvider.java
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /**
  * Interface for providing a custom map-id to the compiler.
  *
@@ -11,7 +13,7 @@
  * mapping file information for builds. For example, by including it in the source-file part of
  * program stacktraces. See {@code SourceFileProvider}.
  */
-@Keep
+@KeepForApi
 @FunctionalInterface
 public interface MapIdProvider {
 
diff --git a/src/main/java/com/android/tools/r8/MarkerInfo.java b/src/main/java/com/android/tools/r8/MarkerInfo.java
index 6c5925d..91b8d9a 100644
--- a/src/main/java/com/android/tools/r8/MarkerInfo.java
+++ b/src/main/java/com/android/tools/r8/MarkerInfo.java
@@ -3,8 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /** Information present in a given marker. */
-@Keep
+@KeepForApi
 public interface MarkerInfo {
 
   /** Get the tool that has generated the marker. */
diff --git a/src/main/java/com/android/tools/r8/MarkerInfoConsumer.java b/src/main/java/com/android/tools/r8/MarkerInfoConsumer.java
index 87342e4..d52d1d5 100644
--- a/src/main/java/com/android/tools/r8/MarkerInfoConsumer.java
+++ b/src/main/java/com/android/tools/r8/MarkerInfoConsumer.java
@@ -3,8 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /** Interface for consumers of the marker information. */
-@Keep
+@KeepForApi
 public interface MarkerInfoConsumer {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/MarkerInfoConsumerData.java b/src/main/java/com/android/tools/r8/MarkerInfoConsumerData.java
index 1b2d500..8640785 100644
--- a/src/main/java/com/android/tools/r8/MarkerInfoConsumerData.java
+++ b/src/main/java/com/android/tools/r8/MarkerInfoConsumerData.java
@@ -3,11 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import java.util.Collection;
 
 /** Information about which markers are present in a given input. */
-@Keep
+@KeepForApi
 public interface MarkerInfoConsumerData {
 
   Origin getInputOrigin();
diff --git a/src/main/java/com/android/tools/r8/OutputMode.java b/src/main/java/com/android/tools/r8/OutputMode.java
index 7092479..4a76273 100644
--- a/src/main/java/com/android/tools/r8/OutputMode.java
+++ b/src/main/java/com/android/tools/r8/OutputMode.java
@@ -3,8 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /** Enumeration of the possible output formats of compilation. */
-@Keep
+@KeepForApi
 public enum OutputMode {
 
   /** Produce DEX files using standard indexed-multidex for programs larger that a single file. */
diff --git a/src/main/java/com/android/tools/r8/ParseFlagInfo.java b/src/main/java/com/android/tools/r8/ParseFlagInfo.java
index 93e6c02..a9566ed 100644
--- a/src/main/java/com/android/tools/r8/ParseFlagInfo.java
+++ b/src/main/java/com/android/tools/r8/ParseFlagInfo.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.List;
 
 /**
@@ -11,7 +12,7 @@
  * <p>Note that this information is purly for usage information and is not an exact semantics of
  * flags.
  */
-@Keep
+@KeepForApi
 public interface ParseFlagInfo {
 
   /** Get the primary format description of the flag (including arguments). */
diff --git a/src/main/java/com/android/tools/r8/ParseFlagPrinter.java b/src/main/java/com/android/tools/r8/ParseFlagPrinter.java
index 3f30806..cc35672 100644
--- a/src/main/java/com/android/tools/r8/ParseFlagPrinter.java
+++ b/src/main/java/com/android/tools/r8/ParseFlagPrinter.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.StringUtils;
 import java.util.ArrayList;
 import java.util.List;
@@ -12,7 +13,7 @@
  *
  * <p>This utility can be used to support wrapping the compilers command-line interface.
  */
-@Keep
+@KeepForApi
 public class ParseFlagPrinter {
 
   private final List<ParseFlagInfo> flags = new ArrayList<>();
diff --git a/src/main/java/com/android/tools/r8/PartitionMapConsumer.java b/src/main/java/com/android/tools/r8/PartitionMapConsumer.java
index ea232d4..0fd3a7f 100644
--- a/src/main/java/com/android/tools/r8/PartitionMapConsumer.java
+++ b/src/main/java/com/android/tools/r8/PartitionMapConsumer.java
@@ -4,10 +4,11 @@
 
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.retrace.MappingPartition;
 import com.android.tools.r8.retrace.MappingPartitionMetadata;
 
-@Keep
+@KeepForApi
 public interface PartitionMapConsumer extends Finishable {
 
   void acceptMappingPartition(MappingPartition mappingPartition);
diff --git a/src/main/java/com/android/tools/r8/ProgramConsumer.java b/src/main/java/com/android/tools/r8/ProgramConsumer.java
index b3143a0..1b75bed 100644
--- a/src/main/java/com/android/tools/r8/ProgramConsumer.java
+++ b/src/main/java/com/android/tools/r8/ProgramConsumer.java
@@ -3,10 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /**
  * Base for all program consumers to allow abstracting which concrete consumer is provided to D8/R8.
  */
-@KeepForSubclassing
+@KeepForApi
 public interface ProgramConsumer {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/ProgramResource.java b/src/main/java/com/android/tools/r8/ProgramResource.java
index 671c2c3..7d2aead 100644
--- a/src/main/java/com/android/tools/r8/ProgramResource.java
+++ b/src/main/java/com/android/tools/r8/ProgramResource.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
 import com.android.tools.r8.utils.StreamUtils;
@@ -16,16 +17,16 @@
 /**
  * Represents program application resources.
  *
- * The content kind or format of a program resource can be either a Java class-file or an Android
- * DEX file. In both cases, the resource must be able to provide the content as a byte stream.
- * A resource may optionally include a set describing the class descriptors for each type that is
+ * <p>The content kind or format of a program resource can be either a Java class-file or an Android
+ * DEX file. In both cases, the resource must be able to provide the content as a byte stream. A
+ * resource may optionally include a set describing the class descriptors for each type that is
  * defined by the resource.
  */
-@KeepForSubclassing
+@KeepForApi
 public interface ProgramResource extends Resource {
 
   /** Type of program-format kinds. */
-  @Keep
+  @KeepForApi
   enum Kind {
     /** Format-kind for Java class-file resources. */
     CF,
@@ -78,7 +79,7 @@
   Set<String> getClassDescriptors();
 
   /** File-based program resource. */
-  @Keep
+  @KeepForApi
   class FileResource implements ProgramResource {
     private final Origin origin;
     private final Kind kind;
@@ -127,7 +128,7 @@
   }
 
   /** Byte-content based program resource. */
-  @Keep
+  @KeepForApi
   class ByteResource implements ProgramResource {
     private final Origin origin;
     private final Kind kind;
diff --git a/src/main/java/com/android/tools/r8/ProgramResourceProvider.java b/src/main/java/com/android/tools/r8/ProgramResourceProvider.java
index b0620b1..f75e570 100644
--- a/src/main/java/com/android/tools/r8/ProgramResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/ProgramResourceProvider.java
@@ -3,11 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.io.IOException;
 import java.util.Collection;
 
 /** Program resource provider. */
-@KeepForSubclassing
+@KeepForApi
 public interface ProgramResourceProvider {
 
   Collection<ProgramResource> getProgramResources() throws ResourceException;
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 8be855e..d0264fc 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -58,6 +58,7 @@
 import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackSimple;
 import com.android.tools.r8.ir.optimize.templates.CfUtilityMethodsForCodeOptimizations;
 import com.android.tools.r8.jar.CfApplicationWriter;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.kotlin.KotlinMetadataRewriter;
 import com.android.tools.r8.kotlin.KotlinMetadataUtils;
 import com.android.tools.r8.naming.IdentifierMinifier;
@@ -166,7 +167,7 @@
  * them to DEX bytecode, using {@code androidJar} as the reference of the system runtime library,
  * and then writes the result to the directory or zip archive specified by {@code outputPath}.
  */
-@Keep
+@KeepForApi
 public class R8 {
 
   private final Timing timing;
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 1decde2..b4ac86e 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -16,6 +16,7 @@
 import com.android.tools.r8.inspector.Inspector;
 import com.android.tools.r8.inspector.internal.InspectorImpl;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibrarySpecification;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.keepanno.asm.KeepEdgeReader;
 import com.android.tools.r8.keepanno.ast.KeepDeclaration;
 import com.android.tools.r8.keepanno.keeprules.KeepRuleExtractor;
@@ -86,7 +87,7 @@
  *     .build();
  * </pre>
  */
-@Keep
+@KeepForApi
 public final class R8Command extends BaseCompilerCommand {
 
   /**
@@ -94,7 +95,7 @@
    *
    * <p>A builder is obtained by calling {@link R8Command#builder}.
    */
-  @Keep
+  @KeepForApi
   public static class Builder extends BaseCompilerCommand.Builder<R8Command, Builder> {
 
     private static class DefaultR8DiagnosticsHandler implements DiagnosticsHandler {
@@ -134,7 +135,8 @@
     private final List<FeatureSplit> featureSplits = new ArrayList<>();
     private String synthesizedClassPrefix = "";
     private boolean enableMissingLibraryApiModeling = false;
-    private boolean enableExperimentalKeepAnnotations = false;
+    private boolean enableExperimentalKeepAnnotations =
+        System.getProperty("com.android.tools.r8.enableKeepAnnotations") != null;
     private SemanticVersion fakeCompilerVersion = null;
     private AndroidResourceProvider androidResourceProvider = null;
     private AndroidResourceConsumer androidResourceConsumer = null;
diff --git a/src/main/java/com/android/tools/r8/Resource.java b/src/main/java/com/android/tools/r8/Resource.java
index 50c50cc..cadabb5 100644
--- a/src/main/java/com/android/tools/r8/Resource.java
+++ b/src/main/java/com/android/tools/r8/Resource.java
@@ -4,22 +4,23 @@
 
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 
 /**
  * Base interface for application resources.
  *
- * Resources are inputs to the compilation that are provided from outside sources, e.g., the
- * command-line interface or API clients such as gradle. Each resource has an associated
- * {@link Origin} which is some opaque description of where the resource comes from. The D8/R8
- * compiler does not assume any particular structure of origin and does not rely on it for
- * compilation. The origin will be provided to diagnostics handlers so that they may detail what
- * resource was cause of some particular error.
+ * <p>Resources are inputs to the compilation that are provided from outside sources, e.g., the
+ * command-line interface or API clients such as gradle. Each resource has an associated {@link
+ * Origin} which is some opaque description of where the resource comes from. The D8/R8 compiler
+ * does not assume any particular structure of origin and does not rely on it for compilation. The
+ * origin will be provided to diagnostics handlers so that they may detail what resource was cause
+ * of some particular error.
  *
- * The D8/R8 compilers uses default implementations for various file-system resources, but the
+ * <p>The D8/R8 compilers uses default implementations for various file-system resources, but the
  * client is free to provide their own.
  */
-@KeepForSubclassing
+@KeepForApi
 public interface Resource {
   /**
    * Get the origin of the resource.
diff --git a/src/main/java/com/android/tools/r8/ResourceException.java b/src/main/java/com/android/tools/r8/ResourceException.java
index 2726b92..48d5b81 100644
--- a/src/main/java/com/android/tools/r8/ResourceException.java
+++ b/src/main/java/com/android/tools/r8/ResourceException.java
@@ -3,15 +3,16 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 
 /**
  * Checked exception for resource related failures.
  *
- * For example, this is the expected exception that must be thrown if a resource fails to produce
+ * <p>For example, this is the expected exception that must be thrown if a resource fails to produce
  * its content. See {@link ProgramResource#getByteStream()} and {@link StringResource#getString()}.
  */
-@Keep
+@KeepForApi
 public class ResourceException extends Exception {
 
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/ResourcePath.java b/src/main/java/com/android/tools/r8/ResourcePath.java
index eab4d7e..dafa2ef 100644
--- a/src/main/java/com/android/tools/r8/ResourcePath.java
+++ b/src/main/java/com/android/tools/r8/ResourcePath.java
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
-@Keep
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
+@KeepForApi
 public interface ResourcePath {
 
   // The location within the apk, bundle or resource directory, e.g., res/xml/foo.xml
diff --git a/src/main/java/com/android/tools/r8/ResourceShrinker.java b/src/main/java/com/android/tools/r8/ResourceShrinker.java
index f23dddc..cbedb8f 100644
--- a/src/main/java/com/android/tools/r8/ResourceShrinker.java
+++ b/src/main/java/com/android/tools/r8/ResourceShrinker.java
@@ -47,6 +47,7 @@
 import com.android.tools.r8.graph.DexValue;
 import com.android.tools.r8.ir.code.SingleConstant;
 import com.android.tools.r8.ir.code.WideConstant;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.MethodReference;
 import com.android.tools.r8.utils.AndroidApp;
@@ -71,16 +72,17 @@
  *
  * <p>This class extracts all integer constants and string constants, which might refer to resource.
  * More specifically, we look for the following while analyzing dex:
+ *
  * <ul>
  *   <li>const instructions that might load integers or strings
- *   <li>static fields that have an initial value. This initial value might be integer, string,
- *   or array of integers.
+ *   <li>static fields that have an initial value. This initial value might be integer, string, or
+ *       array of integers.
  *   <li>integer array payloads. Only payloads referenced in fill-array-data instructions will be
- *   processed. More specifically, if a payload is referenced in fill-array-data, and we are able
- *   to determine that array is not array of integers, payload will be ignored. Otherwise, it will
- *   be processed once fill-array-data-payload instruction is encountered.
+ *       processed. More specifically, if a payload is referenced in fill-array-data, and we are
+ *       able to determine that array is not array of integers, payload will be ignored. Otherwise,
+ *       it will be processed once fill-array-data-payload instruction is encountered.
  *   <li>all annotations (class, field, method) that contain annotation element whose value is
- *   integer, string or array of integers are processed.
+ *       integer, string or array of integers are processed.
  * </ul>
  *
  * <p>Please note that switch payloads are not analyzed. Although they might contain integer
@@ -92,10 +94,10 @@
 
 // TODO(b/121121779) Remove keep if possible.
 @Deprecated
-@Keep
+@KeepForApi
 final public class ResourceShrinker {
 
-  @Keep
+  @KeepForApi
   public final static class Command extends BaseCommand {
 
     Command(AndroidApp app) {
@@ -108,7 +110,7 @@
     }
   }
 
-  @Keep
+  @KeepForApi
   public final static class Builder extends BaseCommand.Builder<Command, Builder> {
 
     @Override
@@ -126,7 +128,7 @@
    * Classes that would like to process data relevant to resource shrinking should implement this
    * interface.
    */
-  @KeepForSubclassing
+  @KeepForApi
   public interface ReferenceChecker {
 
     /**
diff --git a/src/main/java/com/android/tools/r8/SourceFileEnvironment.java b/src/main/java/com/android/tools/r8/SourceFileEnvironment.java
index 86a7211..263db17 100644
--- a/src/main/java/com/android/tools/r8/SourceFileEnvironment.java
+++ b/src/main/java/com/android/tools/r8/SourceFileEnvironment.java
@@ -3,8 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /** Environment made available when defining a custom map id for a build. */
-@Keep
+@KeepForApi
 public interface SourceFileEnvironment {
 
   /** Get the computed `id` for the mapping file. @See MapIdProvider */
diff --git a/src/main/java/com/android/tools/r8/SourceFileProvider.java b/src/main/java/com/android/tools/r8/SourceFileProvider.java
index a0a58cc..bed5a07 100644
--- a/src/main/java/com/android/tools/r8/SourceFileProvider.java
+++ b/src/main/java/com/android/tools/r8/SourceFileProvider.java
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
 /**
  * Interface for providing a custom source file to the compiler.
  *
@@ -10,7 +12,7 @@
  * output program. The source file attribute is present in the stacktraces computed by the JVM and
  * DEX runtimes, thus it can be used to identify builds.
  */
-@Keep
+@KeepForApi
 @FunctionalInterface
 public interface SourceFileProvider {
 
diff --git a/src/main/java/com/android/tools/r8/StringConsumer.java b/src/main/java/com/android/tools/r8/StringConsumer.java
index 2583572..c417223 100644
--- a/src/main/java/com/android/tools/r8/StringConsumer.java
+++ b/src/main/java/com/android/tools/r8/StringConsumer.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
 import com.android.tools.r8.utils.ExceptionDiagnostic;
@@ -14,7 +15,7 @@
 import java.nio.file.Path;
 
 /** Interface for receiving String resource. */
-@KeepForSubclassing
+@KeepForApi
 public interface StringConsumer extends Finishable {
 
   /**
@@ -37,7 +38,7 @@
   }
 
   /** Empty consumer to request the production of the resource but ignore its value. */
-  @Keep
+  @KeepForApi
   class EmptyConsumer implements StringConsumer {
 
     private static final EmptyConsumer EMPTY_CONSUMER = new EmptyConsumer();
@@ -54,7 +55,7 @@
   }
 
   /** Forwarding consumer to delegate to an optional existing consumer. */
-  @Keep
+  @KeepForApi
   class ForwardingConsumer implements StringConsumer {
 
     private final StringConsumer consumer;
@@ -80,7 +81,7 @@
   }
 
   /** File consumer to write contents to a file-system file. */
-  @Keep // TODO(b/121121779) Consider deprecating the R8 provided file writing.
+  @KeepForApi
   class FileConsumer extends ForwardingConsumer {
 
     private final Path outputPath;
diff --git a/src/main/java/com/android/tools/r8/SwissArmyKnife.java b/src/main/java/com/android/tools/r8/SwissArmyKnife.java
index b6eae99..b9dd50f 100644
--- a/src/main/java/com/android/tools/r8/SwissArmyKnife.java
+++ b/src/main/java/com/android/tools/r8/SwissArmyKnife.java
@@ -50,9 +50,6 @@
       case "jardiff":
         JarDiff.main(shift(args));
         break;
-      case "jarsizecompare":
-        JarSizeCompare.main(shift(args));
-        break;
       case "maindex":
         GenerateMainDexList.main(shift(args));
         break;
diff --git a/src/main/java/com/android/tools/r8/SyntheticInfoConsumer.java b/src/main/java/com/android/tools/r8/SyntheticInfoConsumer.java
index 2bfc5b2..da1774f 100644
--- a/src/main/java/com/android/tools/r8/SyntheticInfoConsumer.java
+++ b/src/main/java/com/android/tools/r8/SyntheticInfoConsumer.java
@@ -3,7 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
-@Keep
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+
+@KeepForApi
 public interface SyntheticInfoConsumer {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/SyntheticInfoConsumerData.java b/src/main/java/com/android/tools/r8/SyntheticInfoConsumerData.java
index be28596..a42b337 100644
--- a/src/main/java/com/android/tools/r8/SyntheticInfoConsumerData.java
+++ b/src/main/java/com/android/tools/r8/SyntheticInfoConsumerData.java
@@ -3,10 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 
 /** Information about a compiler synthesized class. */
-@Keep
+@KeepForApi
 public interface SyntheticInfoConsumerData {
 
   /** Get the reference for the compiler synthesized class. */
diff --git a/src/main/java/com/android/tools/r8/TextInputStream.java b/src/main/java/com/android/tools/r8/TextInputStream.java
index 433df09..486e3d1 100644
--- a/src/main/java/com/android/tools/r8/TextInputStream.java
+++ b/src/main/java/com/android/tools/r8/TextInputStream.java
@@ -4,10 +4,11 @@
 
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.io.InputStream;
 import java.nio.charset.Charset;
 
-@Keep
+@KeepForApi
 public interface TextInputStream {
 
   InputStream getInputStream();
diff --git a/src/main/java/com/android/tools/r8/TextOutputStream.java b/src/main/java/com/android/tools/r8/TextOutputStream.java
index 224d9da..c545c7f 100644
--- a/src/main/java/com/android/tools/r8/TextOutputStream.java
+++ b/src/main/java/com/android/tools/r8/TextOutputStream.java
@@ -4,10 +4,11 @@
 
 package com.android.tools.r8;
 
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.io.OutputStream;
 import java.nio.charset.Charset;
 
-@Keep
+@KeepForApi
 public interface TextOutputStream {
 
   OutputStream getOutputStream();
diff --git a/src/main/java/com/android/tools/r8/androidapi/AndroidApiUnknownReferenceDiagnostic.java b/src/main/java/com/android/tools/r8/androidapi/AndroidApiUnknownReferenceDiagnostic.java
index fba87df..286d165 100644
--- a/src/main/java/com/android/tools/r8/androidapi/AndroidApiUnknownReferenceDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/androidapi/AndroidApiUnknownReferenceDiagnostic.java
@@ -4,12 +4,12 @@
 
 package com.android.tools.r8.androidapi;
 
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.graph.DexReference;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class AndroidApiUnknownReferenceDiagnostic extends AndroidApiDiagnostic {
 
   private final DexReference reference;
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
index 74a107a..8232b0c 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
@@ -60,7 +60,6 @@
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 public class ApplicationReader {
@@ -87,10 +86,8 @@
     return read((StringResource) null);
   }
 
-  public LazyLoadedDexApplication read(
-      StringResource proguardMap)
-      throws IOException {
-    ExecutorService executor = Executors.newSingleThreadExecutor();
+  public LazyLoadedDexApplication read(StringResource proguardMap) throws IOException {
+    ExecutorService executor = options.getThreadingModule().createSingleThreadedExecutorService();
     try {
       return read(proguardMap, executor);
     } finally {
diff --git a/src/main/java/com/android/tools/r8/diagnostic/DefinitionClassContext.java b/src/main/java/com/android/tools/r8/diagnostic/DefinitionClassContext.java
index e1530bf..5db9876 100644
--- a/src/main/java/com/android/tools/r8/diagnostic/DefinitionClassContext.java
+++ b/src/main/java/com/android/tools/r8/diagnostic/DefinitionClassContext.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.diagnostic;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 
-@Keep
+@KeepForApi
 public interface DefinitionClassContext extends DefinitionContext {
 
   /** Returns the reference of the class context. */
diff --git a/src/main/java/com/android/tools/r8/diagnostic/DefinitionContext.java b/src/main/java/com/android/tools/r8/diagnostic/DefinitionContext.java
index d05e123..19549be 100644
--- a/src/main/java/com/android/tools/r8/diagnostic/DefinitionContext.java
+++ b/src/main/java/com/android/tools/r8/diagnostic/DefinitionContext.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.diagnostic;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 
 /** A context that references a missing definition in the program, classpath, or library. */
-@Keep
+@KeepForApi
 public interface DefinitionContext {
 
   /** The origin of the context. */
diff --git a/src/main/java/com/android/tools/r8/diagnostic/DefinitionFieldContext.java b/src/main/java/com/android/tools/r8/diagnostic/DefinitionFieldContext.java
index b3c4981..6cfce6b 100644
--- a/src/main/java/com/android/tools/r8/diagnostic/DefinitionFieldContext.java
+++ b/src/main/java/com/android/tools/r8/diagnostic/DefinitionFieldContext.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.diagnostic;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.FieldReference;
 
-@Keep
+@KeepForApi
 public interface DefinitionFieldContext extends DefinitionContext {
 
   /** Returns the reference of the field context. */
diff --git a/src/main/java/com/android/tools/r8/diagnostic/DefinitionMethodContext.java b/src/main/java/com/android/tools/r8/diagnostic/DefinitionMethodContext.java
index 86742db..f64785d 100644
--- a/src/main/java/com/android/tools/r8/diagnostic/DefinitionMethodContext.java
+++ b/src/main/java/com/android/tools/r8/diagnostic/DefinitionMethodContext.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.diagnostic;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.MethodReference;
 
-@Keep
+@KeepForApi
 public interface DefinitionMethodContext extends DefinitionContext {
 
   /** Returns the reference of the method context. */
diff --git a/src/main/java/com/android/tools/r8/diagnostic/MissingClassInfo.java b/src/main/java/com/android/tools/r8/diagnostic/MissingClassInfo.java
index 41f255a..2d22b50 100644
--- a/src/main/java/com/android/tools/r8/diagnostic/MissingClassInfo.java
+++ b/src/main/java/com/android/tools/r8/diagnostic/MissingClassInfo.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.diagnostic;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 
-@Keep
+@KeepForApi
 public interface MissingClassInfo extends MissingDefinitionInfo {
 
   /** Returns the reference of the missing class. */
diff --git a/src/main/java/com/android/tools/r8/diagnostic/MissingDefinitionInfo.java b/src/main/java/com/android/tools/r8/diagnostic/MissingDefinitionInfo.java
index 03fe322..7bdbee8 100644
--- a/src/main/java/com/android/tools/r8/diagnostic/MissingDefinitionInfo.java
+++ b/src/main/java/com/android/tools/r8/diagnostic/MissingDefinitionInfo.java
@@ -4,13 +4,13 @@
 
 package com.android.tools.r8.diagnostic;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.Collection;
 
 /**
  * Information about the contexts that references an item that was not part of the compilation unit.
  */
-@Keep
+@KeepForApi
 public interface MissingDefinitionInfo {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/diagnostic/MissingDefinitionsDiagnostic.java b/src/main/java/com/android/tools/r8/diagnostic/MissingDefinitionsDiagnostic.java
index b3111be..d7ab801 100644
--- a/src/main/java/com/android/tools/r8/diagnostic/MissingDefinitionsDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/diagnostic/MissingDefinitionsDiagnostic.java
@@ -5,14 +5,14 @@
 package com.android.tools.r8.diagnostic;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.Collection;
 
 /**
  * Information about items that are not part of the compilation unit, but which are referenced from
  * a reachable program location.
  */
-@Keep
+@KeepForApi
 public interface MissingDefinitionsDiagnostic extends Diagnostic {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/diagnostic/MissingFieldInfo.java b/src/main/java/com/android/tools/r8/diagnostic/MissingFieldInfo.java
index 1ae6df1..70530de 100644
--- a/src/main/java/com/android/tools/r8/diagnostic/MissingFieldInfo.java
+++ b/src/main/java/com/android/tools/r8/diagnostic/MissingFieldInfo.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.diagnostic;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.FieldReference;
 
-@Keep
+@KeepForApi
 public interface MissingFieldInfo extends MissingDefinitionInfo {
 
   /** Returns the reference of the missing field. */
diff --git a/src/main/java/com/android/tools/r8/diagnostic/MissingMethodInfo.java b/src/main/java/com/android/tools/r8/diagnostic/MissingMethodInfo.java
index 3cf8cc0..51601b6 100644
--- a/src/main/java/com/android/tools/r8/diagnostic/MissingMethodInfo.java
+++ b/src/main/java/com/android/tools/r8/diagnostic/MissingMethodInfo.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.diagnostic;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.MethodReference;
 
-@Keep
+@KeepForApi
 public interface MissingMethodInfo extends MissingDefinitionInfo {
 
   /** Returns the reference of the missing method. */
diff --git a/src/main/java/com/android/tools/r8/errors/AssumeNoSideEffectsRuleForObjectMembersDiagnostic.java b/src/main/java/com/android/tools/r8/errors/AssumeNoSideEffectsRuleForObjectMembersDiagnostic.java
index cb4fafb..d6ccb95 100644
--- a/src/main/java/com/android/tools/r8/errors/AssumeNoSideEffectsRuleForObjectMembersDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/AssumeNoSideEffectsRuleForObjectMembersDiagnostic.java
@@ -4,8 +4,8 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.references.MethodReference;
@@ -15,7 +15,7 @@
 import java.util.List;
 import java.util.Set;
 
-@Keep
+@KeepForApi
 public class AssumeNoSideEffectsRuleForObjectMembersDiagnostic implements Diagnostic {
 
   private final List<MethodReference> methods;
diff --git a/src/main/java/com/android/tools/r8/errors/AssumeValuesMissingStaticFieldDiagnostic.java b/src/main/java/com/android/tools/r8/errors/AssumeValuesMissingStaticFieldDiagnostic.java
index 38f6a46..1f65efd 100644
--- a/src/main/java/com/android/tools/r8/errors/AssumeValuesMissingStaticFieldDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/AssumeValuesMissingStaticFieldDiagnostic.java
@@ -4,13 +4,13 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class AssumeValuesMissingStaticFieldDiagnostic implements Diagnostic {
 
   private final DexType fieldHolder;
diff --git a/src/main/java/com/android/tools/r8/errors/CheckDiscardDiagnostic.java b/src/main/java/com/android/tools/r8/errors/CheckDiscardDiagnostic.java
index 82ab8f4..3f67044 100644
--- a/src/main/java/com/android/tools/r8/errors/CheckDiscardDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/CheckDiscardDiagnostic.java
@@ -4,8 +4,8 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.graph.ProgramDefinition;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.shaking.GraphReporter;
@@ -15,7 +15,7 @@
 import java.io.PrintStream;
 import java.util.List;
 
-@Keep
+@KeepForApi
 public class CheckDiscardDiagnostic implements Diagnostic {
 
   private final List<String> messages;
diff --git a/src/main/java/com/android/tools/r8/errors/CheckEnumUnboxedDiagnostic.java b/src/main/java/com/android/tools/r8/errors/CheckEnumUnboxedDiagnostic.java
index 3339192..d30dbc7 100644
--- a/src/main/java/com/android/tools/r8/errors/CheckEnumUnboxedDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/CheckEnumUnboxedDiagnostic.java
@@ -5,16 +5,16 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexProgramClass;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.google.common.collect.ImmutableList;
 import java.util.Comparator;
 import java.util.List;
 
-@Keep
+@KeepForApi
 public class CheckEnumUnboxedDiagnostic implements Diagnostic {
 
   private final List<String> messages;
diff --git a/src/main/java/com/android/tools/r8/errors/ClassFileOverflowDiagnostic.java b/src/main/java/com/android/tools/r8/errors/ClassFileOverflowDiagnostic.java
index f9d49f0..6bcc568 100644
--- a/src/main/java/com/android/tools/r8/errors/ClassFileOverflowDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/ClassFileOverflowDiagnostic.java
@@ -4,11 +4,11 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public abstract class ClassFileOverflowDiagnostic implements Diagnostic {
 
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/errors/CodeSizeOverflowDiagnostic.java b/src/main/java/com/android/tools/r8/errors/CodeSizeOverflowDiagnostic.java
index 5359ee0..15de75d 100644
--- a/src/main/java/com/android/tools/r8/errors/CodeSizeOverflowDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/CodeSizeOverflowDiagnostic.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.MethodPosition;
 import com.android.tools.r8.position.Position;
@@ -13,7 +13,7 @@
  * Diagnostic information about a class file which could not be generated as the code size of a
  * method overflowed the limit.
  */
-@Keep
+@KeepForApi
 public class CodeSizeOverflowDiagnostic extends ClassFileOverflowDiagnostic {
 
   private final MethodReference method;
diff --git a/src/main/java/com/android/tools/r8/errors/ConstantDynamicDesugarDiagnostic.java b/src/main/java/com/android/tools/r8/errors/ConstantDynamicDesugarDiagnostic.java
index d80b530..543e79b 100644
--- a/src/main/java/com/android/tools/r8/errors/ConstantDynamicDesugarDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/ConstantDynamicDesugarDiagnostic.java
@@ -3,12 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
 /** Common type for all diagnostics related to constant-dynamic desugaring. */
-@Keep
+@KeepForApi
 public class ConstantDynamicDesugarDiagnostic implements DesugarDiagnostic {
 
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/errors/ConstantPoolOverflowDiagnostic.java b/src/main/java/com/android/tools/r8/errors/ConstantPoolOverflowDiagnostic.java
index 3c39f22..006cda5 100644
--- a/src/main/java/com/android/tools/r8/errors/ConstantPoolOverflowDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/ConstantPoolOverflowDiagnostic.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.references.ClassReference;
 
@@ -11,7 +11,7 @@
  * Diagnostic information about a class file which could not be generated as the size of the
  * required constant pool overflowed the limit.
  */
-@Keep
+@KeepForApi
 public class ConstantPoolOverflowDiagnostic extends ClassFileOverflowDiagnostic {
 
   private final int constantPoolSize;
diff --git a/src/main/java/com/android/tools/r8/errors/DesugarDiagnostic.java b/src/main/java/com/android/tools/r8/errors/DesugarDiagnostic.java
index 27b5a39..b541ff1 100644
--- a/src/main/java/com/android/tools/r8/errors/DesugarDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/DesugarDiagnostic.java
@@ -4,8 +4,8 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /** Common interface type for all diagnostics related to desugaring. */
-@Keep
+@KeepForApi
 public interface DesugarDiagnostic extends Diagnostic {}
diff --git a/src/main/java/com/android/tools/r8/errors/DexFileOverflowDiagnostic.java b/src/main/java/com/android/tools/r8/errors/DexFileOverflowDiagnostic.java
index 9427603..1930a3a 100644
--- a/src/main/java/com/android/tools/r8/errors/DexFileOverflowDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/DexFileOverflowDiagnostic.java
@@ -4,8 +4,8 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.dex.VirtualFile;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
@@ -16,7 +16,7 @@
  * compiling for legacy multidex but there are too many classes that need to fit in the main DEX
  * file, e.g., classes.dex.
  */
-@Keep
+@KeepForApi
 public class DexFileOverflowDiagnostic implements Diagnostic {
   private final boolean hasMainDexSpecification;
   private final long numOfMethods;
diff --git a/src/main/java/com/android/tools/r8/errors/DuplicateTypeInProgramAndLibraryDiagnostic.java b/src/main/java/com/android/tools/r8/errors/DuplicateTypeInProgramAndLibraryDiagnostic.java
index 5af3923..27ba93f 100644
--- a/src/main/java/com/android/tools/r8/errors/DuplicateTypeInProgramAndLibraryDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/DuplicateTypeInProgramAndLibraryDiagnostic.java
@@ -4,13 +4,13 @@
 
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.references.ClassReference;
 import com.google.common.collect.ImmutableList;
 import java.util.List;
 
-@Keep
+@KeepForApi
 public class DuplicateTypeInProgramAndLibraryDiagnostic extends DuplicateTypesDiagnostic {
 
   public DuplicateTypeInProgramAndLibraryDiagnostic(
diff --git a/src/main/java/com/android/tools/r8/errors/DuplicateTypesDiagnostic.java b/src/main/java/com/android/tools/r8/errors/DuplicateTypesDiagnostic.java
index 6aa7234..dde2df2 100644
--- a/src/main/java/com/android/tools/r8/errors/DuplicateTypesDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/DuplicateTypesDiagnostic.java
@@ -4,7 +4,7 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.references.ClassReference;
@@ -12,7 +12,7 @@
 import com.android.tools.r8.utils.StringUtils;
 import java.util.Collection;
 
-@Keep
+@KeepForApi
 public class DuplicateTypesDiagnostic implements Diagnostic {
 
   private final ClassReference type;
diff --git a/src/main/java/com/android/tools/r8/errors/IgnoredBackportMethodDiagnostic.java b/src/main/java/com/android/tools/r8/errors/IgnoredBackportMethodDiagnostic.java
index 8f56ecf..f3b5171 100644
--- a/src/main/java/com/android/tools/r8/errors/IgnoredBackportMethodDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/IgnoredBackportMethodDiagnostic.java
@@ -3,13 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.references.MethodReference;
 
-@Keep
+@KeepForApi
 public class IgnoredBackportMethodDiagnostic implements DesugarDiagnostic {
 
   private final DexMethod backport;
diff --git a/src/main/java/com/android/tools/r8/errors/IncompleteNestNestDesugarDiagnosic.java b/src/main/java/com/android/tools/r8/errors/IncompleteNestNestDesugarDiagnosic.java
index c888069..0a59a42 100644
--- a/src/main/java/com/android/tools/r8/errors/IncompleteNestNestDesugarDiagnosic.java
+++ b/src/main/java/com/android/tools/r8/errors/IncompleteNestNestDesugarDiagnosic.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class IncompleteNestNestDesugarDiagnosic extends NestDesugarDiagnostic {
 
   public IncompleteNestNestDesugarDiagnosic(Origin origin, Position position, String message) {
diff --git a/src/main/java/com/android/tools/r8/errors/InlinableStaticFinalFieldPreconditionDiagnostic.java b/src/main/java/com/android/tools/r8/errors/InlinableStaticFinalFieldPreconditionDiagnostic.java
index 45b40d2..833d7b6 100644
--- a/src/main/java/com/android/tools/r8/errors/InlinableStaticFinalFieldPreconditionDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/InlinableStaticFinalFieldPreconditionDiagnostic.java
@@ -4,8 +4,8 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.graph.DexField;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.references.FieldReference;
@@ -16,7 +16,7 @@
 import java.util.Collection;
 import java.util.List;
 
-@Keep
+@KeepForApi
 public class InlinableStaticFinalFieldPreconditionDiagnostic implements Diagnostic {
 
   private final ProguardIfRule rule;
diff --git a/src/main/java/com/android/tools/r8/errors/InterfaceDesugarDiagnostic.java b/src/main/java/com/android/tools/r8/errors/InterfaceDesugarDiagnostic.java
index afc2115..6156e58 100644
--- a/src/main/java/com/android/tools/r8/errors/InterfaceDesugarDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/InterfaceDesugarDiagnostic.java
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /** Common interface type for all diagnostics related to interface-method desugaring. */
-@Keep
+@KeepForApi
 public interface InterfaceDesugarDiagnostic extends DesugarDiagnostic {}
diff --git a/src/main/java/com/android/tools/r8/errors/InterfaceDesugarMissingTypeDiagnostic.java b/src/main/java/com/android/tools/r8/errors/InterfaceDesugarMissingTypeDiagnostic.java
index b3f3fd6..33487ab 100644
--- a/src/main/java/com/android/tools/r8/errors/InterfaceDesugarMissingTypeDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/InterfaceDesugarMissingTypeDiagnostic.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.references.ClassReference;
@@ -11,7 +11,7 @@
 /**
  * Diagnostic for missing types needed for correct desugaring of default/static interface methods.
  */
-@Keep
+@KeepForApi
 public class InterfaceDesugarMissingTypeDiagnostic implements DesugarDiagnostic {
 
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/errors/InvalidLibrarySuperclassDiagnostic.java b/src/main/java/com/android/tools/r8/errors/InvalidLibrarySuperclassDiagnostic.java
index 2392f0a..d120176 100644
--- a/src/main/java/com/android/tools/r8/errors/InvalidLibrarySuperclassDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/InvalidLibrarySuperclassDiagnostic.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.references.ClassReference;
@@ -16,7 +16,7 @@
  * Diagnostic for super types of library classes which are not library classes but required for
  * desugaring.
  */
-@Keep
+@KeepForApi
 public class InvalidLibrarySuperclassDiagnostic implements DesugarDiagnostic {
 
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/errors/MissingNestHostNestDesugarDiagnostic.java b/src/main/java/com/android/tools/r8/errors/MissingNestHostNestDesugarDiagnostic.java
index 2b3cbab..483467b 100644
--- a/src/main/java/com/android/tools/r8/errors/MissingNestHostNestDesugarDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/MissingNestHostNestDesugarDiagnostic.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class MissingNestHostNestDesugarDiagnostic extends NestDesugarDiagnostic {
 
   public MissingNestHostNestDesugarDiagnostic(Origin origin, Position position, String message) {
diff --git a/src/main/java/com/android/tools/r8/errors/NestDesugarDiagnostic.java b/src/main/java/com/android/tools/r8/errors/NestDesugarDiagnostic.java
index 8662eee..c2ee108 100644
--- a/src/main/java/com/android/tools/r8/errors/NestDesugarDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/NestDesugarDiagnostic.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class NestDesugarDiagnostic implements DesugarDiagnostic {
 
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/errors/ProguardKeepRuleDiagnostic.java b/src/main/java/com/android/tools/r8/errors/ProguardKeepRuleDiagnostic.java
index 10d8c1f..95cf81e 100644
--- a/src/main/java/com/android/tools/r8/errors/ProguardKeepRuleDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/ProguardKeepRuleDiagnostic.java
@@ -4,8 +4,8 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /** Base interface for diagnostics related to proguard keep rules. */
-@Keep
+@KeepForApi
 public interface ProguardKeepRuleDiagnostic extends Diagnostic {}
diff --git a/src/main/java/com/android/tools/r8/errors/StartupClassesNonStartupFractionDiagnostic.java b/src/main/java/com/android/tools/r8/errors/StartupClassesNonStartupFractionDiagnostic.java
index e024130..b59f642 100644
--- a/src/main/java/com/android/tools/r8/errors/StartupClassesNonStartupFractionDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/StartupClassesNonStartupFractionDiagnostic.java
@@ -5,9 +5,9 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexProgramClass;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.profile.startup.profile.StartupProfile;
@@ -15,7 +15,7 @@
 import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap;
 import java.util.List;
 
-@Keep
+@KeepForApi
 public class StartupClassesNonStartupFractionDiagnostic implements Diagnostic {
 
   private final int numberOfStartupClasses;
diff --git a/src/main/java/com/android/tools/r8/errors/StartupClassesOverflowDiagnostic.java b/src/main/java/com/android/tools/r8/errors/StartupClassesOverflowDiagnostic.java
index 00290a2..c200087 100644
--- a/src/main/java/com/android/tools/r8/errors/StartupClassesOverflowDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/StartupClassesOverflowDiagnostic.java
@@ -5,13 +5,13 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
-@Keep
+@KeepForApi
 public class StartupClassesOverflowDiagnostic implements Diagnostic {
 
   private final int numberOfStartupDexFiles;
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedConstDynamicDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedConstDynamicDiagnostic.java
index b75f686..513d395 100644
--- a/src/main/java/com/android/tools/r8/errors/UnsupportedConstDynamicDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedConstDynamicDiagnostic.java
@@ -3,12 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.utils.InternalOptions;
 
-@Keep
+@KeepForApi
 public class UnsupportedConstDynamicDiagnostic extends UnsupportedFeatureDiagnostic {
 
   // API: MUST NOT CHANGE!
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedConstMethodHandleDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedConstMethodHandleDiagnostic.java
index 375adf1..2850821 100644
--- a/src/main/java/com/android/tools/r8/errors/UnsupportedConstMethodHandleDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedConstMethodHandleDiagnostic.java
@@ -5,11 +5,11 @@
 
 import static com.android.tools.r8.utils.InternalOptions.constantMethodHandleApiLevel;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class UnsupportedConstMethodHandleDiagnostic extends UnsupportedFeatureDiagnostic {
 
   // API: MUST NOT CHANGE!
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedConstMethodTypeDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedConstMethodTypeDiagnostic.java
index 5809011..f31a632 100644
--- a/src/main/java/com/android/tools/r8/errors/UnsupportedConstMethodTypeDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedConstMethodTypeDiagnostic.java
@@ -5,11 +5,11 @@
 
 import static com.android.tools.r8.utils.InternalOptions.constantMethodTypeApiLevel;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class UnsupportedConstMethodTypeDiagnostic extends UnsupportedFeatureDiagnostic {
 
   // API: MUST NOT CHANGE!
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedDefaultInterfaceMethodDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedDefaultInterfaceMethodDiagnostic.java
index 6905dcc..77f64f5 100644
--- a/src/main/java/com/android/tools/r8/errors/UnsupportedDefaultInterfaceMethodDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedDefaultInterfaceMethodDiagnostic.java
@@ -5,11 +5,11 @@
 
 import static com.android.tools.r8.utils.InternalOptions.defaultInterfaceMethodsApiLevel;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class UnsupportedDefaultInterfaceMethodDiagnostic extends UnsupportedFeatureDiagnostic {
 
   // API: MUST NOT CHANGE!
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedDesugaredLibraryConfigurationVersionDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedDesugaredLibraryConfigurationVersionDiagnostic.java
index 7e2455a..736a075 100644
--- a/src/main/java/com/android/tools/r8/errors/UnsupportedDesugaredLibraryConfigurationVersionDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedDesugaredLibraryConfigurationVersionDiagnostic.java
@@ -4,11 +4,11 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class UnsupportedDesugaredLibraryConfigurationVersionDiagnostic implements Diagnostic {
 
   private static final String dagRoot = "https://developer.android.com";
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedFeatureDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedFeatureDiagnostic.java
index 1ac0482..c3be292 100644
--- a/src/main/java/com/android/tools/r8/errors/UnsupportedFeatureDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedFeatureDiagnostic.java
@@ -4,12 +4,12 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.utils.AndroidApiLevel;
 
-@Keep
+@KeepForApi
 public abstract class UnsupportedFeatureDiagnostic implements Diagnostic {
 
   public static String makeMessage(
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedInvokeCustomDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedInvokeCustomDiagnostic.java
index ca67569..27fb2e9 100644
--- a/src/main/java/com/android/tools/r8/errors/UnsupportedInvokeCustomDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedInvokeCustomDiagnostic.java
@@ -5,11 +5,11 @@
 
 import static com.android.tools.r8.utils.InternalOptions.invokeCustomApiLevel;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class UnsupportedInvokeCustomDiagnostic extends UnsupportedFeatureDiagnostic {
 
   // API: MUST NOT CHANGE!
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedInvokePolymorphicMethodHandleDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedInvokePolymorphicMethodHandleDiagnostic.java
index 23718f3..b88f49b 100644
--- a/src/main/java/com/android/tools/r8/errors/UnsupportedInvokePolymorphicMethodHandleDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedInvokePolymorphicMethodHandleDiagnostic.java
@@ -5,11 +5,11 @@
 
 import static com.android.tools.r8.utils.InternalOptions.invokePolymorphicOnMethodHandleApiLevel;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class UnsupportedInvokePolymorphicMethodHandleDiagnostic
     extends UnsupportedFeatureDiagnostic {
 
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedInvokePolymorphicVarHandleDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedInvokePolymorphicVarHandleDiagnostic.java
index 49f73a6..8f3f111 100644
--- a/src/main/java/com/android/tools/r8/errors/UnsupportedInvokePolymorphicVarHandleDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedInvokePolymorphicVarHandleDiagnostic.java
@@ -5,11 +5,11 @@
 
 import static com.android.tools.r8.utils.InternalOptions.invokePolymorphicOnVarHandleApiLevel;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class UnsupportedInvokePolymorphicVarHandleDiagnostic extends UnsupportedFeatureDiagnostic {
 
   // API: MUST NOT CHANGE!
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedMainDexListUsageDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedMainDexListUsageDiagnostic.java
index 9bcbcba..fdaa15c 100644
--- a/src/main/java/com/android/tools/r8/errors/UnsupportedMainDexListUsageDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedMainDexListUsageDiagnostic.java
@@ -4,7 +4,7 @@
 package com.android.tools.r8.errors;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
@@ -13,7 +13,7 @@
  *
  * <p>See b/181858113 for context.
  */
-@Keep
+@KeepForApi
 public class UnsupportedMainDexListUsageDiagnostic implements Diagnostic {
   private final Origin origin;
 
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedPrivateInterfaceMethodDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedPrivateInterfaceMethodDiagnostic.java
index 0a52151..79fe57d 100644
--- a/src/main/java/com/android/tools/r8/errors/UnsupportedPrivateInterfaceMethodDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedPrivateInterfaceMethodDiagnostic.java
@@ -5,11 +5,11 @@
 
 import static com.android.tools.r8.utils.InternalOptions.privateInterfaceMethodsApiLevel;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class UnsupportedPrivateInterfaceMethodDiagnostic extends UnsupportedFeatureDiagnostic {
 
   // API: MUST NOT CHANGE!
diff --git a/src/main/java/com/android/tools/r8/errors/UnsupportedStaticInterfaceMethodDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnsupportedStaticInterfaceMethodDiagnostic.java
index 3220744..1e6734f 100644
--- a/src/main/java/com/android/tools/r8/errors/UnsupportedStaticInterfaceMethodDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnsupportedStaticInterfaceMethodDiagnostic.java
@@ -5,11 +5,11 @@
 
 import static com.android.tools.r8.utils.InternalOptions.staticInterfaceMethodsApiLevel;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class UnsupportedStaticInterfaceMethodDiagnostic extends UnsupportedFeatureDiagnostic {
 
   // API: MUST NOT CHANGE!
diff --git a/src/main/java/com/android/tools/r8/errors/UnusedProguardKeepRuleDiagnostic.java b/src/main/java/com/android/tools/r8/errors/UnusedProguardKeepRuleDiagnostic.java
index 2d2b326..ae1f370 100644
--- a/src/main/java/com/android/tools/r8/errors/UnusedProguardKeepRuleDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/errors/UnusedProguardKeepRuleDiagnostic.java
@@ -3,12 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.errors;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.shaking.ProguardConfigurationRule;
 
-@Keep
+@KeepForApi
 public class UnusedProguardKeepRuleDiagnostic implements ProguardKeepRuleDiagnostic {
 
   private final ProguardConfigurationRule rule;
diff --git a/src/main/java/com/android/tools/r8/experimental/graphinfo/AnnotationGraphNode.java b/src/main/java/com/android/tools/r8/experimental/graphinfo/AnnotationGraphNode.java
index 7baa5fa..86f1b88 100644
--- a/src/main/java/com/android/tools/r8/experimental/graphinfo/AnnotationGraphNode.java
+++ b/src/main/java/com/android/tools/r8/experimental/graphinfo/AnnotationGraphNode.java
@@ -3,10 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.experimental.graphinfo;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.Objects;
 
-@Keep
+@KeepForApi
 public final class AnnotationGraphNode extends GraphNode {
 
   private final GraphNode annotatedNode;
diff --git a/src/main/java/com/android/tools/r8/experimental/graphinfo/ClassGraphNode.java b/src/main/java/com/android/tools/r8/experimental/graphinfo/ClassGraphNode.java
index fa55609..2ce20ed 100644
--- a/src/main/java/com/android/tools/r8/experimental/graphinfo/ClassGraphNode.java
+++ b/src/main/java/com/android/tools/r8/experimental/graphinfo/ClassGraphNode.java
@@ -3,10 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.experimental.graphinfo;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 
-@Keep
+@KeepForApi
 public final class ClassGraphNode extends GraphNode {
 
   private final ClassReference reference;
diff --git a/src/main/java/com/android/tools/r8/experimental/graphinfo/FieldGraphNode.java b/src/main/java/com/android/tools/r8/experimental/graphinfo/FieldGraphNode.java
index 836058f..723016e 100644
--- a/src/main/java/com/android/tools/r8/experimental/graphinfo/FieldGraphNode.java
+++ b/src/main/java/com/android/tools/r8/experimental/graphinfo/FieldGraphNode.java
@@ -3,10 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.experimental.graphinfo;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.FieldReference;
 
-@Keep
+@KeepForApi
 public final class FieldGraphNode extends GraphNode {
 
   private final FieldReference reference;
diff --git a/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphConsumer.java b/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphConsumer.java
index 3c7bda1..5de4325 100644
--- a/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphConsumer.java
+++ b/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphConsumer.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.experimental.graphinfo;
 
-import com.android.tools.r8.KeepForSubclassing;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@KeepForSubclassing
+@KeepForApi
 public interface GraphConsumer {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphNode.java b/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphNode.java
index 640035a..603fbf1 100644
--- a/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphNode.java
+++ b/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphNode.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.experimental.graphinfo;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public abstract class GraphNode {
 
   private static final GraphNode CYCLE =
diff --git a/src/main/java/com/android/tools/r8/experimental/graphinfo/KeepRuleGraphNode.java b/src/main/java/com/android/tools/r8/experimental/graphinfo/KeepRuleGraphNode.java
index 67feaf7..a75a45f 100644
--- a/src/main/java/com/android/tools/r8/experimental/graphinfo/KeepRuleGraphNode.java
+++ b/src/main/java/com/android/tools/r8/experimental/graphinfo/KeepRuleGraphNode.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.experimental.graphinfo;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.position.TextPosition;
@@ -16,7 +16,7 @@
 
 // Note: this could potentially be merged with ConditionalKeepRuleGraphNode
 // and an empty precondition set.
-@Keep
+@KeepForApi
 public final class KeepRuleGraphNode extends GraphNode {
 
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/experimental/graphinfo/MethodGraphNode.java b/src/main/java/com/android/tools/r8/experimental/graphinfo/MethodGraphNode.java
index 7a92a91..bf42338 100644
--- a/src/main/java/com/android/tools/r8/experimental/graphinfo/MethodGraphNode.java
+++ b/src/main/java/com/android/tools/r8/experimental/graphinfo/MethodGraphNode.java
@@ -3,10 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.experimental.graphinfo;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.MethodReference;
 
-@Keep
+@KeepForApi
 public final class MethodGraphNode extends GraphNode {
 
   private final MethodReference reference;
diff --git a/src/main/java/com/android/tools/r8/inspector/BooleanValueInspector.java b/src/main/java/com/android/tools/r8/inspector/BooleanValueInspector.java
index 105f577..ff8226d 100644
--- a/src/main/java/com/android/tools/r8/inspector/BooleanValueInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/BooleanValueInspector.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface BooleanValueInspector extends ValueInspector {
   boolean getBooleanValue();
 }
diff --git a/src/main/java/com/android/tools/r8/inspector/ByteValueInspector.java b/src/main/java/com/android/tools/r8/inspector/ByteValueInspector.java
index 045476d..d375f1d 100644
--- a/src/main/java/com/android/tools/r8/inspector/ByteValueInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/ByteValueInspector.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface ByteValueInspector extends ValueInspector {
   byte getByteValue();
 }
diff --git a/src/main/java/com/android/tools/r8/inspector/CharValueInspector.java b/src/main/java/com/android/tools/r8/inspector/CharValueInspector.java
index 05d5c2b..a9f16c0 100644
--- a/src/main/java/com/android/tools/r8/inspector/CharValueInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/CharValueInspector.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface CharValueInspector extends ValueInspector {
   char getCharValue();
 }
diff --git a/src/main/java/com/android/tools/r8/inspector/ClassInspector.java b/src/main/java/com/android/tools/r8/inspector/ClassInspector.java
index 6234592..5cbf8e8 100644
--- a/src/main/java/com/android/tools/r8/inspector/ClassInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/ClassInspector.java
@@ -3,12 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 import java.util.function.Consumer;
 
 /** Inspector for a class or interface definition. */
-@Keep
+@KeepForApi
 public interface ClassInspector {
 
   /** Get the class reference for the class of this inspector. */
diff --git a/src/main/java/com/android/tools/r8/inspector/DoubleValueInspector.java b/src/main/java/com/android/tools/r8/inspector/DoubleValueInspector.java
index e9ac7e1..5d5b294 100644
--- a/src/main/java/com/android/tools/r8/inspector/DoubleValueInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/DoubleValueInspector.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface DoubleValueInspector extends ValueInspector {
   double getDoubleValue();
 }
diff --git a/src/main/java/com/android/tools/r8/inspector/FieldInspector.java b/src/main/java/com/android/tools/r8/inspector/FieldInspector.java
index 5d2e656..9bacff4 100644
--- a/src/main/java/com/android/tools/r8/inspector/FieldInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/FieldInspector.java
@@ -3,12 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.FieldReference;
 import java.util.Optional;
 
 /** Inspector for a field definition. */
-@Keep
+@KeepForApi
 public interface FieldInspector {
 
   /** Get the field reference for the field of this inspector. */
diff --git a/src/main/java/com/android/tools/r8/inspector/FloatValueInspector.java b/src/main/java/com/android/tools/r8/inspector/FloatValueInspector.java
index a7be463..8ba7de3 100644
--- a/src/main/java/com/android/tools/r8/inspector/FloatValueInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/FloatValueInspector.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface FloatValueInspector extends ValueInspector {
   float getFloatValue();
 }
diff --git a/src/main/java/com/android/tools/r8/inspector/Inspector.java b/src/main/java/com/android/tools/r8/inspector/Inspector.java
index 880b450..9313f21 100644
--- a/src/main/java/com/android/tools/r8/inspector/Inspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/Inspector.java
@@ -3,11 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.function.Consumer;
 
 /** Inspector providing access to various parts of an application. */
-@Keep
+@KeepForApi
 public interface Inspector {
 
   /** Iterate all classes and interfaces defined by the program (order unspecified). */
diff --git a/src/main/java/com/android/tools/r8/inspector/IntValueInspector.java b/src/main/java/com/android/tools/r8/inspector/IntValueInspector.java
index 6b43ac8..4b8530e 100644
--- a/src/main/java/com/android/tools/r8/inspector/IntValueInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/IntValueInspector.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface IntValueInspector extends ValueInspector {
   int getIntValue();
 }
diff --git a/src/main/java/com/android/tools/r8/inspector/LongValueInspector.java b/src/main/java/com/android/tools/r8/inspector/LongValueInspector.java
index 987721e..3a911ee 100644
--- a/src/main/java/com/android/tools/r8/inspector/LongValueInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/LongValueInspector.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface LongValueInspector extends ValueInspector {
   long getLongValue();
 }
diff --git a/src/main/java/com/android/tools/r8/inspector/MethodInspector.java b/src/main/java/com/android/tools/r8/inspector/MethodInspector.java
index 41cc8de..587fafa 100644
--- a/src/main/java/com/android/tools/r8/inspector/MethodInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/MethodInspector.java
@@ -3,11 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.MethodReference;
 
 /** Inspector for a method definition. */
-@Keep
+@KeepForApi
 public interface MethodInspector {
 
   /** Get the method reference for the method of this inspector. */
diff --git a/src/main/java/com/android/tools/r8/inspector/ShortValueInspector.java b/src/main/java/com/android/tools/r8/inspector/ShortValueInspector.java
index 6b01df3..519e01f 100644
--- a/src/main/java/com/android/tools/r8/inspector/ShortValueInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/ShortValueInspector.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface ShortValueInspector extends ValueInspector {
   short getShortValue();
 }
diff --git a/src/main/java/com/android/tools/r8/inspector/StringValueInspector.java b/src/main/java/com/android/tools/r8/inspector/StringValueInspector.java
index 5336948..7d47ab0 100644
--- a/src/main/java/com/android/tools/r8/inspector/StringValueInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/StringValueInspector.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface StringValueInspector extends ValueInspector {
   String getStringValue();
 }
diff --git a/src/main/java/com/android/tools/r8/inspector/ValueInspector.java b/src/main/java/com/android/tools/r8/inspector/ValueInspector.java
index 84f1fe0..a60db9c 100644
--- a/src/main/java/com/android/tools/r8/inspector/ValueInspector.java
+++ b/src/main/java/com/android/tools/r8/inspector/ValueInspector.java
@@ -3,11 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.inspector;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.TypeReference;
 
 /** Inspector for a JVM representable value. */
-@Keep
+@KeepForApi
 public interface ValueInspector {
 
   /** Get the type reference describing the type of the value. */
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/NullOrAbstractValue.java b/src/main/java/com/android/tools/r8/ir/analysis/value/NullOrAbstractValue.java
index 6eaf130..85534f3 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/NullOrAbstractValue.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/NullOrAbstractValue.java
@@ -14,6 +14,7 @@
   private final AbstractValue value;
 
   private NullOrAbstractValue(AbstractValue value) {
+    assert !value.isSingleNumberValue();
     this.value = value;
   }
 
@@ -44,9 +45,14 @@
   }
 
   @Override
-  public NullOrAbstractValue rewrittenWithLens(
+  public AbstractValue rewrittenWithLens(
       AppView<AppInfoWithLiveness> appView, DexType newType, GraphLens lens, GraphLens codeLens) {
-    return new NullOrAbstractValue(value.rewrittenWithLens(appView, newType, lens, codeLens));
+    AbstractValue rewrittenValue = value.rewrittenWithLens(appView, newType, lens, codeLens);
+    if (rewrittenValue.isSingleNumberValue()) {
+      // Reference type rewritten to primitive.
+      return unknown();
+    }
+    return new NullOrAbstractValue(rewrittenValue);
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/DexConstantOptimizer.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/DexConstantOptimizer.java
index 51f6094..740c180 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/DexConstantOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/DexConstantOptimizer.java
@@ -232,6 +232,10 @@
   }
 
   private void shortenLiveRanges(IRCode code, ConstantCanonicalizer canonicalizer) {
+    if (options.debug) {
+      // Shorten live ranges seems to regress code size in debug mode.
+      return;
+    }
     if (options.testing.disableShortenLiveRanges) {
       return;
     }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecificationParser.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecificationParser.java
index 8f7f2b6..d993797 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecificationParser.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanDesugaredLibrarySpecificationParser.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.TopLevelFlagsBuilder;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanRewritingFlags.HumanEmulatedInterfaceDescriptor;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.memberparser.HumanFieldParser;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.memberparser.HumanMethodParser;
 import com.android.tools.r8.origin.Origin;
@@ -35,7 +36,7 @@
 
 public class HumanDesugaredLibrarySpecificationParser {
 
-  public static final int CURRENT_HUMAN_CONFIGURATION_FORMAT_VERSION = 100;
+  public static final int CURRENT_HUMAN_CONFIGURATION_FORMAT_VERSION = 101;
 
   static final String IDENTIFIER_KEY = "identifier";
   static final String REQUIRED_COMPILATION_API_LEVEL_KEY = "required_compilation_api_level";
@@ -49,6 +50,8 @@
   static final String API_LEVEL_BELOW_OR_EQUAL_KEY = "api_level_below_or_equal";
   static final String API_LEVEL_GREATER_OR_EQUAL_KEY = "api_level_greater_or_equal";
   static final String API_GENERIC_TYPES_CONVERSION = "api_generic_types_conversion";
+  static final String REWRITTEN_TYPE_KEY = "rewrittenType";
+  static final String EMULATED_METHODS_KEY = "emulatedMethods";
   static final String WRAPPER_CONVERSION_KEY = "wrapper_conversion";
   static final String WRAPPER_CONVERSION_EXCLUDING_KEY = "wrapper_conversion_excluding";
   static final String CUSTOM_CONVERSION_KEY = "custom_conversion";
@@ -63,7 +66,6 @@
       "retarget_method_with_emulated_dispatch";
   static final String REWRITE_DERIVED_PREFIX_KEY = "rewrite_derived_prefix";
   static final String EMULATE_INTERFACE_KEY = "emulate_interface";
-  static final String DONT_REWRITE_KEY = "dont_rewrite";
   static final String DONT_RETARGET_KEY = "dont_retarget";
   static final String BACKPORT_KEY = "backport";
   static final String AMEND_LIBRARY_METHOD_KEY = "amend_library_method";
@@ -343,9 +345,15 @@
     if (jsonFlagSet.has(EMULATE_INTERFACE_KEY)) {
       for (Map.Entry<String, JsonElement> itf :
           jsonFlagSet.get(EMULATE_INTERFACE_KEY).getAsJsonObject().entrySet()) {
-        builder.putEmulatedInterface(
-            stringDescriptorToDexType(itf.getKey()),
-            stringDescriptorToDexType(itf.getValue().getAsString()));
+        if (itf.getValue().isJsonPrimitive()) {
+          builder.putLegacyEmulatedInterface(
+              stringDescriptorToDexType(itf.getKey()),
+              stringDescriptorToDexType(itf.getValue().getAsString()));
+        } else {
+          builder.putSpecifiedEmulatedInterface(
+              stringDescriptorToDexType(itf.getKey()),
+              parseEmulatedInterfaceDescriptor(itf.getValue()));
+        }
       }
     }
     if (jsonFlagSet.has(CUSTOM_CONVERSION_KEY)) {
@@ -369,12 +377,6 @@
             parseMethods(wrapper.getValue().getAsJsonArray()));
       }
     }
-    if (jsonFlagSet.has(DONT_REWRITE_KEY)) {
-      JsonArray dontRewrite = jsonFlagSet.get(DONT_REWRITE_KEY).getAsJsonArray();
-      for (JsonElement rewrite : dontRewrite) {
-        builder.addDontRewriteInvocation(parseMethod(rewrite.getAsString()));
-      }
-    }
     if (jsonFlagSet.has(DONT_RETARGET_KEY)) {
       JsonArray dontRetarget = jsonFlagSet.get(DONT_RETARGET_KEY).getAsJsonArray();
       for (JsonElement rewrite : dontRetarget) {
@@ -397,6 +399,21 @@
     }
   }
 
+  private HumanEmulatedInterfaceDescriptor parseEmulatedInterfaceDescriptor(JsonElement value) {
+    JsonObject jsonObject = value.getAsJsonObject();
+    DexType rewrittenType =
+        stringDescriptorToDexType(required(jsonObject, REWRITTEN_TYPE_KEY).getAsString());
+    Set<DexMethod> emulatedMethods = Sets.newIdentityHashSet();
+    if (jsonObject.has(EMULATED_METHODS_KEY)) {
+      JsonArray methods = jsonObject.get(EMULATED_METHODS_KEY).getAsJsonArray();
+      for (JsonElement method : methods) {
+        methodParser.parseMethod(method.getAsString());
+        emulatedMethods.add(methodParser.getMethod());
+      }
+    }
+    return new HumanEmulatedInterfaceDescriptor(rewrittenType, emulatedMethods);
+  }
+
   private Set<DexMethod> parseMethods(JsonArray array) {
     Set<DexMethod> methods = Sets.newIdentityHashSet();
     for (JsonElement method : array) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanRewritingFlags.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanRewritingFlags.java
index cae75f2..daf641b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanRewritingFlags.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/HumanRewritingFlags.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification;
 
 import com.android.tools.r8.graph.DexField;
+import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.FieldAccessFlags;
@@ -27,7 +28,7 @@
   private final Set<String> dontRewritePrefix;
   private final Set<String> maintainPrefix;
   private final Map<String, Map<String, String>> rewriteDerivedPrefix;
-  private final Map<DexType, DexType> emulatedInterfaces;
+  private final Map<DexType, HumanEmulatedInterfaceDescriptor> emulatedInterfaces;
   private final Map<DexField, DexField> retargetStaticField;
   private final Map<DexMethod, DexType> covariantRetarget;
   private final Map<DexMethod, DexType> retargetMethodToType;
@@ -37,7 +38,6 @@
   private final Map<DexMethod, DexMethod[]> apiGenericTypesConversion;
   private final Map<DexType, DexType> legacyBackport;
   private final Map<DexType, DexType> customConversions;
-  private final Set<DexMethod> dontRewriteInvocation;
   private final Set<DexType> dontRetarget;
   private final Map<DexType, Set<DexMethod>> wrapperConversions;
   private final Set<DexMethod> neverOutlineApi;
@@ -49,7 +49,7 @@
       Set<String> dontRewritePrefix,
       Set<String> maintainPrefix,
       Map<String, Map<String, String>> rewriteDerivedPrefix,
-      Map<DexType, DexType> emulateLibraryInterface,
+      Map<DexType, HumanEmulatedInterfaceDescriptor> emulateLibraryInterface,
       Map<DexField, DexField> retargetStaticField,
       Map<DexMethod, DexType> covariantRetarget,
       Map<DexMethod, DexType> retargetMethodToType,
@@ -59,7 +59,6 @@
       Map<DexMethod, DexMethod[]> apiGenericTypesConversion,
       Map<DexType, DexType> legacyBackport,
       Map<DexType, DexType> customConversion,
-      Set<DexMethod> dontRewriteInvocation,
       Set<DexType> dontRetarget,
       Map<DexType, Set<DexMethod>> wrapperConversion,
       Set<DexMethod> neverOutlineApi,
@@ -79,7 +78,6 @@
     this.apiGenericTypesConversion = apiGenericTypesConversion;
     this.legacyBackport = legacyBackport;
     this.customConversions = customConversion;
-    this.dontRewriteInvocation = dontRewriteInvocation;
     this.dontRetarget = dontRetarget;
     this.wrapperConversions = wrapperConversion;
     this.neverOutlineApi = neverOutlineApi;
@@ -104,13 +102,92 @@
         ImmutableMap.of(),
         ImmutableMap.of(),
         ImmutableSet.of(),
-        ImmutableSet.of(),
         ImmutableMap.of(),
         ImmutableSet.of(),
         ImmutableMap.of(),
         ImmutableMap.of());
   }
 
+  public static class HumanEmulatedInterfaceDescriptor {
+    private final DexType rewrittenType;
+    private final Set<DexMethod> emulatedMethods;
+
+    public HumanEmulatedInterfaceDescriptor(DexType rewrittenType, Set<DexMethod> emulatedMethods) {
+      this.rewrittenType = rewrittenType;
+      this.emulatedMethods = emulatedMethods;
+    }
+
+    public boolean isLegacy() {
+      return false;
+    }
+
+    public DexType getRewrittenType() {
+      return rewrittenType;
+    }
+
+    public Set<DexMethod> getEmulatedMethods() {
+      return emulatedMethods;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+      if (!(obj instanceof HumanEmulatedInterfaceDescriptor)) {
+        return false;
+      }
+      HumanEmulatedInterfaceDescriptor other = (HumanEmulatedInterfaceDescriptor) obj;
+      return rewrittenType.isIdenticalTo(other.getRewrittenType())
+          && getEmulatedMethods().equals(other.getEmulatedMethods());
+    }
+
+    @Override
+    public int hashCode() {
+      return 7 * rewrittenType.hashCode() + getEmulatedMethods().hashCode();
+    }
+
+    public HumanEmulatedInterfaceDescriptor merge(HumanEmulatedInterfaceDescriptor other) {
+      if (!rewrittenType.isIdenticalTo(other.getRewrittenType())) {
+        throw new UnsupportedOperationException(
+            "Emulated interface descriptor can only be merged on the same rewritten type.");
+      }
+      ImmutableSet.Builder<DexMethod> builder = ImmutableSet.builder();
+      builder.addAll(getEmulatedMethods());
+      builder.addAll(other.getEmulatedMethods());
+      return new HumanEmulatedInterfaceDescriptor(rewrittenType, builder.build());
+    }
+
+    public boolean containsEmulatedMethod(DexMethod reference, DexItemFactory factory) {
+      return getEmulatedMethods().contains(reference);
+    }
+  }
+
+  // TODO(b/309735284): Temporary work-around.
+  public static class LegacyHumanEmulatedInterfaceDescriptor
+      extends HumanEmulatedInterfaceDescriptor {
+
+    public LegacyHumanEmulatedInterfaceDescriptor(DexType rewrittenType) {
+      super(rewrittenType, ImmutableSet.of());
+    }
+
+    @Override
+    public boolean isLegacy() {
+      return true;
+    }
+
+    @Override
+    public HumanEmulatedInterfaceDescriptor merge(HumanEmulatedInterfaceDescriptor other) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean containsEmulatedMethod(DexMethod reference, DexItemFactory factory) {
+      // Equivalence for parsing specification with format version 100.
+      DexMethod dontRewrite =
+          factory.createMethod(
+              factory.iteratorType, factory.createProto(factory.voidType), "remove");
+      return !reference.isIdenticalTo(dontRewrite);
+    }
+  }
+
   public static Builder builder(Reporter reporter, Origin origin) {
     return new Builder(reporter, origin);
   }
@@ -133,7 +210,6 @@
         apiGenericTypesConversion,
         legacyBackport,
         customConversions,
-        dontRewriteInvocation,
         dontRetarget,
         wrapperConversions,
         neverOutlineApi,
@@ -157,7 +233,7 @@
     return rewriteDerivedPrefix;
   }
 
-  public Map<DexType, DexType> getEmulatedInterfaces() {
+  public Map<DexType, HumanEmulatedInterfaceDescriptor> getEmulatedInterfaces() {
     return emulatedInterfaces;
   }
 
@@ -201,10 +277,6 @@
     return customConversions;
   }
 
-  public Set<DexMethod> getDontRewriteInvocation() {
-    return dontRewriteInvocation;
-  }
-
   public Set<DexType> getDontRetarget() {
     return dontRetarget;
   }
@@ -241,7 +313,7 @@
     private final Set<String> dontRewritePrefix;
     private final Set<String> maintainPrefix;
     private final Map<String, Map<String, String>> rewriteDerivedPrefix;
-    private final Map<DexType, DexType> emulatedInterfaces;
+    private final Map<DexType, HumanEmulatedInterfaceDescriptor> emulatedInterfaces;
     private final Map<DexField, DexField> retargetStaticField;
     private final Map<DexMethod, DexType> covariantRetarget;
     private final Map<DexMethod, DexType> retargetMethodToType;
@@ -251,7 +323,6 @@
     private final Map<DexMethod, DexMethod[]> apiGenericTypesConversion;
     private final Map<DexType, DexType> legacyBackport;
     private final Map<DexType, DexType> customConversions;
-    private final Set<DexMethod> dontRewriteInvocation;
     private final Set<DexType> dontRetarget;
     private final Map<DexType, Set<DexMethod>> wrapperConversions;
     private final Set<DexMethod> neverOutlineApi;
@@ -277,7 +348,6 @@
           new IdentityHashMap<>(),
           new IdentityHashMap<>(),
           Sets.newIdentityHashSet(),
-          Sets.newIdentityHashSet(),
           new IdentityHashMap<>(),
           Sets.newIdentityHashSet(),
           new IdentityHashMap<>(),
@@ -291,7 +361,7 @@
         Set<String> dontRewritePrefix,
         Set<String> maintainPrefix,
         Map<String, Map<String, String>> rewriteDerivedPrefix,
-        Map<DexType, DexType> emulateLibraryInterface,
+        Map<DexType, HumanEmulatedInterfaceDescriptor> emulateLibraryInterface,
         Map<DexField, DexField> retargetStaticField,
         Map<DexMethod, DexType> covariantRetarget,
         Map<DexMethod, DexType> retargetMethodToType,
@@ -301,7 +371,6 @@
         Map<DexMethod, DexMethod[]> apiConversionCollection,
         Map<DexType, DexType> backportCoreLibraryMember,
         Map<DexType, DexType> customConversions,
-        Set<DexMethod> dontRewriteInvocation,
         Set<DexType> dontRetargetLibMember,
         Map<DexType, Set<DexMethod>> wrapperConversions,
         Set<DexMethod> neverOutlineApi,
@@ -325,8 +394,6 @@
       this.apiGenericTypesConversion = new IdentityHashMap<>(apiConversionCollection);
       this.legacyBackport = new IdentityHashMap<>(backportCoreLibraryMember);
       this.customConversions = new IdentityHashMap<>(customConversions);
-      this.dontRewriteInvocation = Sets.newIdentityHashSet();
-      this.dontRewriteInvocation.addAll(dontRewriteInvocation);
       this.dontRetarget = Sets.newIdentityHashSet();
       this.dontRetarget.addAll(dontRetargetLibMember);
       this.wrapperConversions = new IdentityHashMap<>(wrapperConversions);
@@ -383,15 +450,25 @@
       return this;
     }
 
-    public Builder putEmulatedInterface(DexType interfaceType, DexType rewrittenType) {
+    public Builder putLegacyEmulatedInterface(DexType interfaceType, DexType rewrittenType) {
       put(
           emulatedInterfaces,
           interfaceType,
-          rewrittenType,
+          new LegacyHumanEmulatedInterfaceDescriptor(rewrittenType),
           HumanDesugaredLibrarySpecificationParser.EMULATE_INTERFACE_KEY);
       return this;
     }
 
+    public Builder putSpecifiedEmulatedInterface(
+        DexType interfaceType, HumanEmulatedInterfaceDescriptor newDescriptor) {
+      assert newDescriptor != null;
+      HumanEmulatedInterfaceDescriptor oldDescriptor = emulatedInterfaces.get(interfaceType);
+      HumanEmulatedInterfaceDescriptor mergedDescriptor =
+          oldDescriptor == null ? newDescriptor : newDescriptor.merge(oldDescriptor);
+      emulatedInterfaces.put(interfaceType, mergedDescriptor);
+      return this;
+    }
+
     public Builder putCustomConversion(DexType dexType, DexType conversionType) {
       put(
           customConversions,
@@ -482,11 +559,6 @@
       return this;
     }
 
-    public Builder addDontRewriteInvocation(DexMethod dontRewrite) {
-      dontRewriteInvocation.add(dontRewrite);
-      return this;
-    }
-
     public Builder addDontRetargetLibMember(DexType dontRetargetLibMember) {
       dontRetarget.add(dontRetargetLibMember);
       return this;
@@ -523,7 +595,6 @@
           ImmutableMap.copyOf(apiGenericTypesConversion),
           ImmutableMap.copyOf(legacyBackport),
           ImmutableMap.copyOf(customConversions),
-          ImmutableSet.copyOf(dontRewriteInvocation),
           ImmutableSet.copyOf(dontRetarget),
           ImmutableMap.copyOf(wrapperConversions),
           ImmutableSet.copyOf(neverOutlineApi),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java
index 269be28..cb907d1 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.graph.MethodAccessFlags;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.ApiLevelRange;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanRewritingFlags.HumanEmulatedInterfaceDescriptor;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.Reporter;
 import java.util.HashSet;
@@ -88,11 +89,11 @@
     deduplicateRewritePrefix(flags, otherFlags, commonBuilder, builder);
     deduplicateRewriteDifferentPrefix(flags, otherFlags, commonBuilder, builder);
 
-    deduplicateFlags(
+    deduplicateEmulatedInterfaceFlags(
         flags.getEmulatedInterfaces(),
         otherFlags.getEmulatedInterfaces(),
-        commonBuilder::putEmulatedInterface,
-        builder::putEmulatedInterface);
+        commonBuilder::putSpecifiedEmulatedInterface,
+        builder::putSpecifiedEmulatedInterface);
     deduplicateFlags(
         flags.getRetargetMethodToType(),
         otherFlags.getRetargetMethodToType(),
@@ -115,11 +116,6 @@
         builder::putCustomConversion);
 
     deduplicateFlags(
-        flags.getDontRewriteInvocation(),
-        otherFlags.getDontRewriteInvocation(),
-        commonBuilder::addDontRewriteInvocation,
-        builder::addDontRewriteInvocation);
-    deduplicateFlags(
         flags.getDontRetarget(),
         otherFlags.getDontRetarget(),
         commonBuilder::addDontRetargetLibMember,
@@ -214,6 +210,22 @@
   }
 
   @SuppressWarnings("ReferenceEquality")
+  private static <T extends DexItem> void deduplicateEmulatedInterfaceFlags(
+      Map<T, HumanEmulatedInterfaceDescriptor> flags,
+      Map<T, HumanEmulatedInterfaceDescriptor> otherFlags,
+      BiConsumer<T, HumanEmulatedInterfaceDescriptor> common,
+      BiConsumer<T, HumanEmulatedInterfaceDescriptor> specific) {
+    flags.forEach(
+        (k, v) -> {
+          if (otherFlags.get(k) == v) {
+            common.accept(k, v);
+          } else {
+            specific.accept(k, v);
+          }
+        });
+  }
+
+  @SuppressWarnings("ReferenceEquality")
   private static <T extends DexItem> void deduplicateFlags(
       Map<T, DexType> flags,
       Map<T, DexType> otherFlags,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.java
index 2096b33..d5dc102 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationJsonExporter.java
@@ -14,8 +14,8 @@
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.CURRENT_HUMAN_CONFIGURATION_FORMAT_VERSION;
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.CUSTOM_CONVERSION_KEY;
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.DONT_RETARGET_KEY;
-import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.DONT_REWRITE_KEY;
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.DONT_REWRITE_PREFIX_KEY;
+import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.EMULATED_METHODS_KEY;
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.EMULATE_INTERFACE_KEY;
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.IDENTIFIER_KEY;
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.LIBRARY_FLAGS_KEY;
@@ -28,6 +28,7 @@
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.RETARGET_STATIC_FIELD_KEY;
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.REWRITE_DERIVED_PREFIX_KEY;
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.REWRITE_PREFIX_KEY;
+import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.REWRITTEN_TYPE_KEY;
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.SHRINKER_CONFIG_KEY;
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.SUPPORT_ALL_CALLBACKS_FROM_LIBRARY_KEY;
 import static com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecificationParser.SYNTHESIZED_LIBRARY_CLASSES_PACKAGE_PREFIX_KEY;
@@ -116,10 +117,18 @@
         toJson.put(MAINTAIN_PREFIX_KEY, stringSetToString(flags.getMaintainPrefix()));
       }
       if (!flags.getEmulatedInterfaces().isEmpty()) {
-        toJson.put(EMULATE_INTERFACE_KEY, mapToString(flags.getEmulatedInterfaces()));
-      }
-      if (!flags.getDontRewriteInvocation().isEmpty()) {
-        toJson.put(DONT_REWRITE_KEY, setToString(flags.getDontRewriteInvocation()));
+        TreeMap<String, Map<String, Object>> emulatedInterfaces = new TreeMap<>();
+        flags
+            .getEmulatedInterfaces()
+            .forEach(
+                (itf, descriptor) -> {
+                  TreeMap<String, Object> value = new TreeMap<>();
+                  assert !descriptor.isLegacy();
+                  emulatedInterfaces.put(toString(itf), value);
+                  value.put(REWRITTEN_TYPE_KEY, toString(descriptor.getRewrittenType()));
+                  value.put(EMULATED_METHODS_KEY, setToString(descriptor.getEmulatedMethods()));
+                });
+        toJson.put(EMULATE_INTERFACE_KEY, emulatedInterfaces);
       }
       if (!flags.getRetargetStaticField().isEmpty()) {
         toJson.put(RETARGET_STATIC_FIELD_KEY, mapToString(flags.getRetargetStaticField()));
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsList.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsList.java
index 49ab63a..c050445 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsList.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsList.java
@@ -6,22 +6,20 @@
 
 import com.android.tools.r8.ClassFileResourceProvider;
 import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.ProgramResourceProvider;
 import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.StringResource;
 import com.android.tools.r8.Version;
 import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.ExceptionUtils;
 import com.android.tools.r8.utils.Reporter;
-import com.android.tools.r8.utils.ThreadUtils;
 import java.io.IOException;
 import java.util.Collection;
 import java.util.List;
-import java.util.concurrent.ExecutorService;
 
-@Keep
+@KeepForApi
 public class DesugaredMethodsList extends GenerateDesugaredLibraryLintFiles {
 
   private final AndroidApiLevel minApi;
@@ -51,23 +49,18 @@
       System.out.println("DesugaredMethodsList " + Version.getVersionString());
       return;
     }
-    ExecutorService executorService = ThreadUtils.getExecutorService(ThreadUtils.NOT_SPECIFIED);
-    try {
-      ExceptionUtils.withD8CompilationHandler(
-          command.getReporter(),
-          () ->
-              new DesugaredMethodsList(
-                      command.getMinApi(),
-                      command.isAndroidPlatformBuild(),
-                      command.getReporter(),
-                      command.getDesugarLibrarySpecification(),
-                      command.getDesugarLibraryImplementation(),
-                      command.getOutputConsumer(),
-                      command.getLibrary())
-                  .run());
-    } finally {
-      executorService.shutdown();
-    }
+    ExceptionUtils.withD8CompilationHandler(
+        command.getReporter(),
+        () ->
+            new DesugaredMethodsList(
+                    command.getMinApi(),
+                    command.isAndroidPlatformBuild(),
+                    command.getReporter(),
+                    command.getDesugarLibrarySpecification(),
+                    command.getDesugarLibraryImplementation(),
+                    command.getOutputConsumer(),
+                    command.getLibrary())
+                .run());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsListCommand.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsListCommand.java
index f5152cb..1eb157f 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsListCommand.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/DesugaredMethodsListCommand.java
@@ -8,7 +8,6 @@
 import com.android.tools.r8.ArchiveProgramResourceProvider;
 import com.android.tools.r8.ClassFileResourceProvider;
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.ParseFlagInfo;
 import com.android.tools.r8.ParseFlagInfoImpl;
 import com.android.tools.r8.ParseFlagPrinter;
@@ -16,6 +15,7 @@
 import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.StringResource;
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.Reporter;
 import com.android.tools.r8.utils.StringDiagnostic;
@@ -28,7 +28,7 @@
 import java.util.Collection;
 import java.util.List;
 
-@Keep
+@KeepForApi
 public class DesugaredMethodsListCommand {
 
   private final boolean help;
@@ -131,7 +131,7 @@
     return new Builder(diagnosticsHandler);
   }
 
-  @Keep
+  @KeepForApi
   public static class Builder {
 
     private int minApi = AndroidApiLevel.B.getLevel();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/EmulatedInterfaceDescriptor.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/EmulatedInterfaceDescriptor.java
index 80ca5b3..e3a9dff 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/EmulatedInterfaceDescriptor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/EmulatedInterfaceDescriptor.java
@@ -6,6 +6,7 @@
 
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.DexType;
+import com.google.common.collect.ImmutableMap;
 import java.util.Map;
 import java.util.Objects;
 
@@ -34,6 +35,18 @@
     return emulatedMethods;
   }
 
+  public EmulatedInterfaceDescriptor merge(EmulatedInterfaceDescriptor other) {
+    if (!rewrittenType.isIdenticalTo(other.getRewrittenType())) {
+      throw new UnsupportedOperationException(
+          "Emulated interface descriptor can only be merged on the same rewritten type.");
+    }
+    ImmutableMap.Builder<DexMethod, EmulatedDispatchMethodDescriptor> builder =
+        ImmutableMap.builder();
+    builder.putAll(getEmulatedMethods());
+    builder.putAll(other.getEmulatedMethods());
+    return new EmulatedInterfaceDescriptor(rewrittenType, builder.build());
+  }
+
   @Override
   public Object[] toJsonStruct(
       MultiAPILevelMachineDesugaredLibrarySpecificationJsonExporter exporter) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineRewritingFlags.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineRewritingFlags.java
index d27ba9b..f28dae7 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineRewritingFlags.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineRewritingFlags.java
@@ -362,8 +362,8 @@
         emulatedVirtualRetargetThroughEmulatedInterface = ImmutableMap.builder();
     private final ImmutableMap.Builder<DexMethod, DexMethod[]> apiGenericTypesConversion =
         ImmutableMap.builder();
-    private final ImmutableMap.Builder<DexType, EmulatedInterfaceDescriptor> emulatedInterfaces =
-        ImmutableMap.builder();
+    private final Map<DexType, EmulatedInterfaceDescriptor> emulatedInterfaces =
+        new IdentityHashMap<>();
     private final LinkedHashMap<DexType, WrapperDescriptor> wrappers = new LinkedHashMap<>();
     private final ImmutableMap.Builder<DexType, DexType> legacyBackport = ImmutableMap.builder();
     private final ImmutableSet.Builder<DexType> dontRetarget = ImmutableSet.builder();
@@ -409,8 +409,12 @@
       nonEmulatedVirtualRetarget.put(src, dest);
     }
 
-    public void putEmulatedInterface(DexType src, EmulatedInterfaceDescriptor descriptor) {
-      emulatedInterfaces.put(src, descriptor);
+    public void putEmulatedInterface(DexType src, EmulatedInterfaceDescriptor newDescriptor) {
+      assert newDescriptor != null;
+      EmulatedInterfaceDescriptor oldDescriptor = emulatedInterfaces.get(src);
+      EmulatedInterfaceDescriptor mergedDescriptor =
+          oldDescriptor == null ? newDescriptor : newDescriptor.merge(oldDescriptor);
+      emulatedInterfaces.put(src, mergedDescriptor);
     }
 
     public void putEmulatedVirtualRetarget(DexMethod src, EmulatedDispatchMethodDescriptor dest) {
@@ -487,7 +491,7 @@
           emulatedVirtualRetarget.build(),
           emulatedVirtualRetargetThroughEmulatedInterface.build(),
           apiGenericTypesConversion.build(),
-          emulatedInterfaces.build(),
+          ImmutableMap.copyOf(emulatedInterfaces),
           wrappers,
           legacyBackport.build(),
           dontRetarget.build(),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineEmulatedInterfaceConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineEmulatedInterfaceConverter.java
index 6cb30a4..c908340 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineEmulatedInterfaceConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineEmulatedInterfaceConverter.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.graph.DexReference;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanRewritingFlags;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanRewritingFlags.HumanEmulatedInterfaceDescriptor;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.DerivedMethod;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.EmulatedDispatchMethodDescriptor;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.EmulatedInterfaceDescriptor;
@@ -43,9 +44,9 @@
       AppInfoWithClassHierarchy appInfo,
       MachineRewritingFlags.Builder builder,
       BiConsumer<String, Set<? extends DexReference>> warnConsumer) {
-    Map<DexType, DexType> emulateInterfaces = rewritingFlags.getEmulatedInterfaces();
-    Set<DexMethod> dontRewriteInvocation = rewritingFlags.getDontRewriteInvocation();
-    processEmulatedInterfaceHierarchy(appInfo, emulateInterfaces);
+    Map<DexType, HumanEmulatedInterfaceDescriptor> emulateInterfaces =
+        rewritingFlags.getEmulatedInterfaces();
+    processEmulatedInterfaceHierarchy(appInfo, emulateInterfaces.keySet());
     for (DexType itf : emulateInterfaces.keySet()) {
       DexClass itfClass = appInfo.contextIndependentDefinitionFor(itf);
       if (itfClass == null) {
@@ -53,15 +54,20 @@
         continue;
       }
       Map<DexMethod, EmulatedDispatchMethodDescriptor> emulatedMethods = new IdentityHashMap<>();
+      HumanEmulatedInterfaceDescriptor humanDescriptor = emulateInterfaces.get(itf);
       itfClass.forEachClassMethodMatching(
-          m -> m.isDefaultMethod() && !dontRewriteInvocation.contains(m.getReference()),
+          m ->
+              m.isDefaultMethod()
+                  && humanDescriptor.containsEmulatedMethod(
+                      m.getReference(), appInfo.dexItemFactory()),
           method ->
               emulatedMethods.put(
                   method.getReference(),
                   computeEmulatedDispatchDescriptor(
                       method.getReference(), rewritingFlags, appInfo)));
       builder.putEmulatedInterface(
-          itf, new EmulatedInterfaceDescriptor(emulateInterfaces.get(itf), emulatedMethods));
+          itf,
+          new EmulatedInterfaceDescriptor(humanDescriptor.getRewrittenType(), emulatedMethods));
     }
     warnConsumer.accept("Missing emulated interfaces: ", missingEmulatedInterface);
   }
@@ -74,7 +80,10 @@
         appInfo
             .dexItemFactory()
             .createMethod(
-                rewritingFlags.getEmulatedInterfaces().get(method.getHolderType()),
+                rewritingFlags
+                    .getEmulatedInterfaces()
+                    .get(method.getHolderType())
+                    .getRewrittenType(),
                 method.getProto(),
                 method.getName());
     DerivedMethod interfaceMethod = new DerivedMethod(itfDexMethod);
@@ -148,9 +157,9 @@
   }
 
   private void processEmulatedInterfaceHierarchy(
-      AppInfoWithClassHierarchy appInfo, Map<DexType, DexType> emulateInterfaces) {
+      AppInfoWithClassHierarchy appInfo, Set<DexType> emulateInterfaces) {
     Set<DexType> processed = Sets.newIdentityHashSet();
-    ArrayList<DexType> emulatedInterfacesSorted = new ArrayList<>(emulateInterfaces.keySet());
+    ArrayList<DexType> emulatedInterfacesSorted = new ArrayList<>(emulateInterfaces);
     emulatedInterfacesSorted.sort(DexType::compareTo);
     for (DexType interfaceType : emulatedInterfacesSorted) {
       processEmulatedInterfaceHierarchy(appInfo, emulateInterfaces, interfaceType, processed);
@@ -159,7 +168,7 @@
 
   private void processEmulatedInterfaceHierarchy(
       AppInfoWithClassHierarchy appInfo,
-      Map<DexType, DexType> emulateInterfaces,
+      Set<DexType> emulateInterfaces,
       DexType interfaceType,
       Set<DexType> processed) {
     if (processed.contains(interfaceType)) {
@@ -175,7 +184,7 @@
         WorkList.newIdentityWorkList(Arrays.asList(theInterface.interfaces.values));
     while (!workList.isEmpty()) {
       DexType next = workList.next();
-      if (emulateInterfaces.containsKey(next)) {
+      if (emulateInterfaces.contains(next)) {
         processEmulatedInterfaceHierarchy(appInfo, emulateInterfaces, next, processed);
         emulatedInterfaceHierarchy.get(next).add(interfaceType);
         DexClass nextClass = appInfo.definitionFor(next);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachinePrefixConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachinePrefixConverter.java
index ae3214b..d7bef31 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachinePrefixConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachinePrefixConverter.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanRewritingFlags;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanRewritingFlags.HumanEmulatedInterfaceDescriptor;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.MachineRewritingFlags;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.google.common.collect.ImmutableMap;
@@ -120,8 +121,10 @@
         });
   }
 
-  private void rewriteEmulatedInterface(Map<DexType, DexType> emulateLibraryInterface) {
-    emulateLibraryInterface.forEach(builder::rewriteDerivedTypeOnly);
+  private void rewriteEmulatedInterface(
+      Map<DexType, HumanEmulatedInterfaceDescriptor> emulateLibraryInterface) {
+    emulateLibraryInterface.forEach(
+        (k, v) -> builder.rewriteDerivedTypeOnly(k, v.getRewrittenType()));
   }
 
   private void rewriteValues(
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineRetargetConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineRetargetConverter.java
index 1197688..9eaeb9d 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineRetargetConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineRetargetConverter.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.graph.DexReference;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanRewritingFlags;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanRewritingFlags.HumanEmulatedInterfaceDescriptor;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.DerivedMethod;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.EmulatedDispatchMethodDescriptor;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.machinespecification.MachineRewritingFlags;
@@ -248,7 +249,8 @@
       AppInfoWithClassHierarchy appInfo,
       HumanRewritingFlags humanRewritingFlags) {
     // Answers true if this method is already managed through emulated interface dispatch.
-    Map<DexType, DexType> emulateLibraryInterface = humanRewritingFlags.getEmulatedInterfaces();
+    Map<DexType, HumanEmulatedInterfaceDescriptor> emulateLibraryInterface =
+        humanRewritingFlags.getEmulatedInterfaces();
     if (emulateLibraryInterface.isEmpty()) {
       return false;
     }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LegacyToHumanSpecificationConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LegacyToHumanSpecificationConverter.java
index 5feb934..c36af1c 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LegacyToHumanSpecificationConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LegacyToHumanSpecificationConverter.java
@@ -18,6 +18,7 @@
 import com.android.tools.r8.ir.desugar.desugaredlibrary.ApiLevelRange;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanDesugaredLibrarySpecification;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanRewritingFlags;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanRewritingFlags.HumanEmulatedInterfaceDescriptor;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.HumanTopLevelFlags;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.MultiAPILevelHumanDesugaredLibrarySpecification;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.humanspecification.MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator;
@@ -32,6 +33,7 @@
 import com.android.tools.r8.utils.Timing;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
 import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -201,7 +203,12 @@
     flags
         .getRewritePrefix()
         .forEach((prefix, rewritten) -> rewritePrefix(builder, prefix, rewritten));
-    flags.getEmulateLibraryInterface().forEach(builder::putEmulatedInterface);
+    flags
+        .getEmulateLibraryInterface()
+        .forEach(
+            (type, rewrittenType) ->
+                convertEmulatedInterface(
+                    builder, app, type, rewrittenType, flags.getDontRewriteInvocation()));
     flags.getBackportCoreLibraryMember().forEach(builder::putLegacyBackport);
     flags.getCustomConversions().forEach(builder::putCustomConversion);
     flags.getDontRetargetLibMember().forEach(builder::addDontRetargetLibMember);
@@ -209,14 +216,27 @@
     flags
         .getRetargetCoreLibMember()
         .forEach((name, typeMap) -> convertRetargetCoreLibMember(builder, app, name, typeMap));
-    flags
-        .getDontRewriteInvocation()
-        .forEach(pair -> convertDontRewriteInvocation(builder, app, pair));
     HumanRewritingFlags humanFlags = builder.build();
     timing.end();
     return humanFlags;
   }
 
+  private void convertEmulatedInterface(
+      HumanRewritingFlags.Builder builder,
+      DexApplication app,
+      DexType type,
+      DexType rewrittenType,
+      List<Pair<DexType, DexString>> dontRewriteInvocation) {
+    DexClass dexClass = app.definitionFor(type);
+    Set<DexMethod> emulatedMethods = Sets.newIdentityHashSet();
+    Set<DexMethod> dontRewrite = convertDontRewriteInvocation(builder, app, dontRewriteInvocation);
+    dexClass
+        .virtualMethods(m -> m.isDefaultMethod() && !dontRewrite.contains(m.getReference()))
+        .forEach(m -> emulatedMethods.add(m.getReference()));
+    builder.putSpecifiedEmulatedInterface(
+        type, new HumanEmulatedInterfaceDescriptor(rewrittenType, emulatedMethods));
+  }
+
   private void rewritePrefix(HumanRewritingFlags.Builder builder, String prefix, String rewritten) {
     // Legacy hacks: The human specification matches on class' types so we need different
     // rewritings.
@@ -239,15 +259,21 @@
     builder.putRewritePrefix(prefix, rewritten);
   }
 
-  private void convertDontRewriteInvocation(
-      HumanRewritingFlags.Builder builder, DexApplication app, Pair<DexType, DexString> pair) {
-    DexClass dexClass = app.definitionFor(pair.getFirst());
-    assert dexClass != null;
-    List<DexClassAndMethod> methodsWithName =
-        findMethodsWithName(pair.getSecond(), dexClass, builder, app);
-    for (DexClassAndMethod dexClassAndMethod : methodsWithName) {
-      builder.addDontRewriteInvocation(dexClassAndMethod.getReference());
+  private Set<DexMethod> convertDontRewriteInvocation(
+      HumanRewritingFlags.Builder builder,
+      DexApplication app,
+      List<Pair<DexType, DexString>> dontRewriteInvocation) {
+    Set<DexMethod> result = Sets.newIdentityHashSet();
+    for (Pair<DexType, DexString> pair : dontRewriteInvocation) {
+      DexClass dexClass = app.definitionFor(pair.getFirst());
+      assert dexClass != null;
+      List<DexClassAndMethod> methodsWithName =
+          findMethodsWithName(pair.getSecond(), dexClass, builder, app);
+      for (DexClassAndMethod dexClassAndMethod : methodsWithName) {
+        result.add(dexClassAndMethod.getReference());
+      }
     }
+    return result;
   }
 
   @SuppressWarnings("MixedMutabilityReturnType")
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriterDiagnostic.java b/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriterDiagnostic.java
index ce17cc0..dddbe5e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriterDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriterDiagnostic.java
@@ -5,11 +5,11 @@
 package com.android.tools.r8.ir.optimize;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class ServiceLoaderRewriterDiagnostic implements Diagnostic {
 
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/MutableFieldOptimizationInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/info/MutableFieldOptimizationInfo.java
index 21fca73..9617c85 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/MutableFieldOptimizationInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/MutableFieldOptimizationInfo.java
@@ -67,7 +67,10 @@
   }
 
   private MutableFieldOptimizationInfo setAbstractValue(AbstractValue abstractValue) {
-    assert getAbstractValue().isUnknown() || abstractValue.isNonTrivial();
+    assert getAbstractValue().isUnknown()
+        || abstractValue.isNonTrivial()
+        || (getAbstractValue().isNullOrAbstractValue()
+            && getAbstractValue().asNullOrAbstractValue().getNonNullValue().isSingleFieldValue());
     this.abstractValue = abstractValue;
     return this;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningDiagnostic.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningDiagnostic.java
index 9d0e1d1..12a82bb 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningDiagnostic.java
@@ -5,11 +5,11 @@
 package com.android.tools.r8.ir.optimize.inliner;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class WhyAreYouNotInliningDiagnostic implements Diagnostic {
 
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/apiconverter/APIConversionCfCodeProvider.java b/src/main/java/com/android/tools/r8/ir/synthetic/apiconverter/APIConversionCfCodeProvider.java
index 9bd1ba2..1233526 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/apiconverter/APIConversionCfCodeProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/apiconverter/APIConversionCfCodeProvider.java
@@ -10,6 +10,7 @@
 import com.android.tools.r8.cf.code.CfLoad;
 import com.android.tools.r8.cf.code.CfReturn;
 import com.android.tools.r8.cf.code.CfReturnVoid;
+import com.android.tools.r8.errors.CompilationError;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.CfCode;
 import com.android.tools.r8.graph.DexField;
@@ -94,7 +95,7 @@
     generatePushReceiver(instructions, isStatic);
     generateParameterConvertAndLoads(instructions, isStatic);
     generateForwardingCall(instructions);
-    generateReturnConversion(instructions);
+    generateReturnConversion(instructions, isStatic);
     generateReturn(instructions);
     return standardCfCodeFromInstructions(instructions);
   }
@@ -108,12 +109,29 @@
     }
   }
 
-  private void generateReturnConversion(List<CfInstruction> instructions) {
+  private void generateReturnConversion(List<CfInstruction> instructions, boolean isStatic) {
     if (returnConversion != null) {
-      instructions.add(new CfInvoke(Opcodes.INVOKESTATIC, returnConversion, false));
+      generateConversion(instructions, returnConversion, isStatic);
     }
   }
 
+  private void generateConversion(
+      List<CfInstruction> instructions, DexMethod conversion, boolean isStatic) {
+    if (conversion.getArity() == 2) {
+      // If there is a second parameter, D8/R8 passes the  receiver as the second parameter.
+      if (isStatic) {
+        throw new CompilationError("Unsupported conversion with two parameters on static method");
+      }
+      generatePushReceiver(instructions, isStatic);
+    } else if (conversion.getArity() != 1) {
+      throw new CompilationError(
+          "Unsupported conversion with invalid number of parameters ("
+              + conversion.getArity()
+              + ")");
+    }
+    instructions.add(new CfInvoke(Opcodes.INVOKESTATIC, conversion, false));
+  }
+
   private void generateForwardingCall(List<CfInstruction> instructions) {
     instructions.add(new CfInvoke(forwardCallOpcode, forwardMethod, itfCall));
   }
@@ -125,7 +143,7 @@
       ValueType valueType = valueTypeFromForwardMethod(forwardMethod.getParameter(i));
       instructions.add(new CfLoad(valueType, localIndex));
       if (parameterConversions[i] != null) {
-        instructions.add(new CfInvoke(Opcodes.INVOKESTATIC, parameterConversions[i], false));
+        generateConversion(instructions, parameterConversions[i], isStatic);
       }
       localIndex += valueType.isWide() ? 2 : 1;
     }
diff --git a/src/main/java/com/android/tools/r8/naming/MapVersion.java b/src/main/java/com/android/tools/r8/naming/MapVersion.java
index 0698a2e..2b3b13b 100644
--- a/src/main/java/com/android/tools/r8/naming/MapVersion.java
+++ b/src/main/java/com/android/tools/r8/naming/MapVersion.java
@@ -3,11 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.naming;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.naming.mappinginformation.MapVersionMappingInformation;
 import com.android.tools.r8.utils.structural.Ordered;
 
-@Keep
+@KeepForApi
 public enum MapVersion implements Ordered<MapVersion> {
   MAP_VERSION_UNKNOWN("unknown"),
   MAP_VERSION_NONE("none"),
diff --git a/src/main/java/com/android/tools/r8/naming/MappingComposeException.java b/src/main/java/com/android/tools/r8/naming/MappingComposeException.java
index f443d0e..33c3382 100644
--- a/src/main/java/com/android/tools/r8/naming/MappingComposeException.java
+++ b/src/main/java/com/android/tools/r8/naming/MappingComposeException.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.naming;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public class MappingComposeException extends Exception {
 
   public MappingComposeException(String message) {
diff --git a/src/main/java/com/android/tools/r8/naming/mappinginformation/MappingInformationDiagnostics.java b/src/main/java/com/android/tools/r8/naming/mappinginformation/MappingInformationDiagnostics.java
index cc0da51..fb06257 100644
--- a/src/main/java/com/android/tools/r8/naming/mappinginformation/MappingInformationDiagnostics.java
+++ b/src/main/java/com/android/tools/r8/naming/mappinginformation/MappingInformationDiagnostics.java
@@ -5,12 +5,12 @@
 package com.android.tools.r8.naming.mappinginformation;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.position.TextPosition;
 
-@Keep
+@KeepForApi
 public class MappingInformationDiagnostics implements Diagnostic {
 
   private final String message;
diff --git a/src/main/java/com/android/tools/r8/origin/ArchiveEntryOrigin.java b/src/main/java/com/android/tools/r8/origin/ArchiveEntryOrigin.java
index 37ae662..2deafeb 100644
--- a/src/main/java/com/android/tools/r8/origin/ArchiveEntryOrigin.java
+++ b/src/main/java/com/android/tools/r8/origin/ArchiveEntryOrigin.java
@@ -4,12 +4,10 @@
 
 package com.android.tools.r8.origin;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-/**
- * Origin representing an entry in an archive.
- */
-@Keep
+/** Origin representing an entry in an archive. */
+@KeepForApi
 public class ArchiveEntryOrigin extends Origin {
 
   final String entryName;
diff --git a/src/main/java/com/android/tools/r8/origin/Origin.java b/src/main/java/com/android/tools/r8/origin/Origin.java
index 0f3d320..9f05156 100644
--- a/src/main/java/com/android/tools/r8/origin/Origin.java
+++ b/src/main/java/com/android/tools/r8/origin/Origin.java
@@ -4,26 +4,26 @@
 
 package com.android.tools.r8.origin;
 
-import com.android.tools.r8.KeepForSubclassing;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.ArrayList;
 import java.util.List;
 
 /**
  * Origin description of a resource.
  *
- * <p>An origin is a list of parts that describe where a resource originates from. The first part
- * is the most recent part and is associated with the present resource, each successive part is
- * then associated with the context of the previous part.
+ * <p>An origin is a list of parts that describe where a resource originates from. The first part is
+ * the most recent part and is associated with the present resource, each successive part is then
+ * associated with the context of the previous part.
  *
- * <p>For example, for a class file, say {@code my/class/Foo.class}, that is contained within a
- * jar archive, say {@code myjar.jar}, the Origin of of this resource will be {@code
+ * <p>For example, for a class file, say {@code my/class/Foo.class}, that is contained within a jar
+ * archive, say {@code myjar.jar}, the Origin of of this resource will be {@code
  * myjar.jar:my/class/Foo.class} where each part is separated by a colon.
  *
  * <p>There are two top-most origins which have no parent: {@code Origin.root()} and {@code
  * Origin.unknown()}. The former is the parent of any file path, while the latter is an unknown
  * origin (e.g., for generated resources of raw bytes).
  */
-@KeepForSubclassing
+@KeepForApi
 public abstract class Origin implements Comparable<Origin> {
 
   private static final Origin ROOT =
diff --git a/src/main/java/com/android/tools/r8/origin/PathOrigin.java b/src/main/java/com/android/tools/r8/origin/PathOrigin.java
index 0ff8080..491b5de 100644
--- a/src/main/java/com/android/tools/r8/origin/PathOrigin.java
+++ b/src/main/java/com/android/tools/r8/origin/PathOrigin.java
@@ -4,13 +4,11 @@
 
 package com.android.tools.r8.origin;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.nio.file.Path;
 
-/**
- * Path component in an origin description.
- */
-@Keep
+/** Path component in an origin description. */
+@KeepForApi
 public class PathOrigin extends Origin {
 
   private final Path path;
diff --git a/src/main/java/com/android/tools/r8/position/MethodPosition.java b/src/main/java/com/android/tools/r8/position/MethodPosition.java
index 12a7d8d..efb4226 100644
--- a/src/main/java/com/android/tools/r8/position/MethodPosition.java
+++ b/src/main/java/com/android/tools/r8/position/MethodPosition.java
@@ -3,17 +3,17 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.position;
 
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.graph.ProgramMethod;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.MethodReference;
 import com.android.tools.r8.references.TypeReference;
 import java.util.List;
 import java.util.stream.Collectors;
 
 /** A {@link Position} denoting a method. */
-@Keep
+@KeepForApi
 public class MethodPosition implements Position {
 
   private final MethodReference method;
diff --git a/src/main/java/com/android/tools/r8/position/Position.java b/src/main/java/com/android/tools/r8/position/Position.java
index 1fae6e6..cd77f3c 100644
--- a/src/main/java/com/android/tools/r8/position/Position.java
+++ b/src/main/java/com/android/tools/r8/position/Position.java
@@ -4,13 +4,13 @@
 
 package com.android.tools.r8.position;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /**
  * Represent a position in a resource, it can for example be line in a text file or the byte offset
  * in a binary stream.
  */
-@Keep
+@KeepForApi
 public interface Position {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/position/TextPosition.java b/src/main/java/com/android/tools/r8/position/TextPosition.java
index 730bd75..3b4a69e 100644
--- a/src/main/java/com/android/tools/r8/position/TextPosition.java
+++ b/src/main/java/com/android/tools/r8/position/TextPosition.java
@@ -3,13 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.position;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /**
- * A {@link Position} in a text file determined by line and column.
- * Line and column numbers start at 1.
+ * A {@link Position} in a text file determined by line and column. Line and column numbers start at
+ * 1.
  */
-@Keep
+@KeepForApi
 public class TextPosition implements Position {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/position/TextRange.java b/src/main/java/com/android/tools/r8/position/TextRange.java
index 62c5c39..ed69268 100644
--- a/src/main/java/com/android/tools/r8/position/TextRange.java
+++ b/src/main/java/com/android/tools/r8/position/TextRange.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.position;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public class TextRange implements Position {
   private final TextPosition start;
   private final TextPosition end;
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileBuilder.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileBuilder.java
index 57a7856..20f9443 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileBuilder.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileBuilder.java
@@ -4,12 +4,12 @@
 
 package com.android.tools.r8.profile.art;
 
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.TextInputStream;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.function.Consumer;
 
 /** API for building an ART profile. */
-@Keep
+@KeepForApi
 public interface ArtProfileBuilder {
 
   /** API for adding information about a class rule to the compiler. */
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileClassRuleBuilder.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileClassRuleBuilder.java
index eaeab93..a5259f9 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileClassRuleBuilder.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileClassRuleBuilder.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.profile.art;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 
 /** API for defining a class rule for an ART profile. */
-@Keep
+@KeepForApi
 public interface ArtProfileClassRuleBuilder {
 
   ArtProfileClassRuleBuilder setClassReference(ClassReference classReference);
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileClassRuleInfo.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileClassRuleInfo.java
index 7ba6bbe..6dcde1d 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileClassRuleInfo.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileClassRuleInfo.java
@@ -4,7 +4,8 @@
 
 package com.android.tools.r8.profile.art;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
 
-@Keep
+@KeepForApi(kind = KeepItemKind.ONLY_CLASS)
 public interface ArtProfileClassRuleInfo {}
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileConsumer.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileConsumer.java
index b395a12..d1ea7f8 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileConsumer.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileConsumer.java
@@ -5,14 +5,14 @@
 package com.android.tools.r8.profile.art;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.TextOutputStream;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /**
  * API for consuming an ART profile provided by the compiler, which has been rewritten to match the
  * residual, optimized app.
  */
-@Keep
+@KeepForApi
 public interface ArtProfileConsumer {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleBuilder.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleBuilder.java
index 4bae3b3..d8c15c6 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleBuilder.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleBuilder.java
@@ -4,12 +4,12 @@
 
 package com.android.tools.r8.profile.art;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.MethodReference;
 import java.util.function.Consumer;
 
 /** API for defining a method rule for an ART profile. */
-@Keep
+@KeepForApi
 public interface ArtProfileMethodRuleBuilder {
 
   ArtProfileMethodRuleBuilder setMethodReference(MethodReference methodReference);
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfo.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfo.java
index 6a176ab..ddf9a92 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfo.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfo.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.profile.art;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface ArtProfileMethodRuleInfo {
 
   /** Returns true if this method rule method rule is flagged as hot ('H'). */
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfoBuilder.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfoBuilder.java
index 11f8b42..13f122c 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfoBuilder.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfoBuilder.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.profile.art;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /** API for providing metadata related to a method rule for an ART profile. */
-@Keep
+@KeepForApi
 public interface ArtProfileMethodRuleInfoBuilder {
 
   ArtProfileMethodRuleInfoBuilder setIsHot(boolean isHot);
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileProvider.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileProvider.java
index 87450e5..0192f9c 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileProvider.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileProvider.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.profile.art;
 
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.Resource;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /** API for providing an ART profile to the compiler. */
-@Keep
+@KeepForApi
 public interface ArtProfileProvider extends Resource {
 
   void getArtProfile(ArtProfileBuilder profileBuilder);
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileRuleConsumer.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileRuleConsumer.java
index beab144..d5b349c 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileRuleConsumer.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileRuleConsumer.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.profile.art;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.MethodReference;
 
@@ -13,7 +13,7 @@
  * #acceptClassRule} and {@link #acceptMethodRule} for each class and method rule (respectively) in
  * the profile.
  */
-@Keep
+@KeepForApi
 public interface ArtProfileRuleConsumer {
 
   /** Provides information about a specific class rule to the consumer. */
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileRulePredicate.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileRulePredicate.java
index ea843f2..3fc6194 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileRulePredicate.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileRulePredicate.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.profile.art;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.MethodReference;
 
-@Keep
+@KeepForApi
 public interface ArtProfileRulePredicate {
 
   boolean testClassRule(ClassReference classReference, ArtProfileClassRuleInfo classRuleInfo);
diff --git a/src/main/java/com/android/tools/r8/profile/art/HumanReadableArtProfileParserBuilder.java b/src/main/java/com/android/tools/r8/profile/art/HumanReadableArtProfileParserBuilder.java
index 9caa97e..e8b58dd 100644
--- a/src/main/java/com/android/tools/r8/profile/art/HumanReadableArtProfileParserBuilder.java
+++ b/src/main/java/com/android/tools/r8/profile/art/HumanReadableArtProfileParserBuilder.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.profile.art;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /**
  * A builder for configuring a parser for the human-readable ART profile format.
@@ -12,7 +12,7 @@
  * @see <a href="https://developer.android.com/topic/performance/baselineprofiles">ART Baseline
  *     Profiles</a>
  */
-@Keep
+@KeepForApi
 public interface HumanReadableArtProfileParserBuilder {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/profile/art/diagnostic/HumanReadableArtProfileParserErrorDiagnostic.java b/src/main/java/com/android/tools/r8/profile/art/diagnostic/HumanReadableArtProfileParserErrorDiagnostic.java
index d93b5f6..4fba1b9 100644
--- a/src/main/java/com/android/tools/r8/profile/art/diagnostic/HumanReadableArtProfileParserErrorDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/profile/art/diagnostic/HumanReadableArtProfileParserErrorDiagnostic.java
@@ -5,11 +5,11 @@
 package com.android.tools.r8.profile.art.diagnostic;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class HumanReadableArtProfileParserErrorDiagnostic implements Diagnostic {
 
   private final String rule;
diff --git a/src/main/java/com/android/tools/r8/references/ArrayReference.java b/src/main/java/com/android/tools/r8/references/ArrayReference.java
index 6699f2b..bcd7a94 100644
--- a/src/main/java/com/android/tools/r8/references/ArrayReference.java
+++ b/src/main/java/com/android/tools/r8/references/ArrayReference.java
@@ -3,15 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.references;
 
-import com.android.tools.r8.Keep;
-import com.android.tools.r8.KeepForRetraceApi;
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.DescriptorUtils;
 import java.util.Objects;
 
 /** Reference to an array type. */
-@Keep
-@KeepForRetraceApi
+@KeepForApi
 public final class ArrayReference implements TypeReference {
 
   private final int dimensions;
diff --git a/src/main/java/com/android/tools/r8/references/ClassReference.java b/src/main/java/com/android/tools/r8/references/ClassReference.java
index 392b4a4..08891ae 100644
--- a/src/main/java/com/android/tools/r8/references/ClassReference.java
+++ b/src/main/java/com/android/tools/r8/references/ClassReference.java
@@ -3,13 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.references;
 
-import com.android.tools.r8.Keep;
-import com.android.tools.r8.KeepForRetraceApi;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.DescriptorUtils;
 
 /** Reference to a class type or interface type. */
-@Keep
-@KeepForRetraceApi
+@KeepForApi
 public final class ClassReference implements TypeReference {
 
   private final String descriptor;
diff --git a/src/main/java/com/android/tools/r8/references/FieldReference.java b/src/main/java/com/android/tools/r8/references/FieldReference.java
index 90f4b91..4e09c36 100644
--- a/src/main/java/com/android/tools/r8/references/FieldReference.java
+++ b/src/main/java/com/android/tools/r8/references/FieldReference.java
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.references;
 
-import com.android.tools.r8.Keep;
-import com.android.tools.r8.KeepForRetraceApi;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.Objects;
 
 /**
@@ -13,8 +12,7 @@
  * <p>A field reference is always fully qualified with both a qualified holder type as well as the
  * type of the field.
  */
-@Keep
-@KeepForRetraceApi
+@KeepForApi
 public final class FieldReference {
   private final ClassReference holderClass;
   private final String fieldName;
diff --git a/src/main/java/com/android/tools/r8/references/MethodReference.java b/src/main/java/com/android/tools/r8/references/MethodReference.java
index 3339916..788f1d9 100644
--- a/src/main/java/com/android/tools/r8/references/MethodReference.java
+++ b/src/main/java/com/android/tools/r8/references/MethodReference.java
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.references;
 
-import com.android.tools.r8.Keep;
-import com.android.tools.r8.KeepForRetraceApi;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.StringUtils.BraceType;
 import java.util.List;
@@ -16,8 +15,7 @@
  * <p>A method reference is always fully qualified with both a qualified holder type as well as its
  * full list of formal parameters.
  */
-@Keep
-@KeepForRetraceApi
+@KeepForApi
 public final class MethodReference {
   private final ClassReference holderClass;
   private final String methodName;
diff --git a/src/main/java/com/android/tools/r8/references/PackageReference.java b/src/main/java/com/android/tools/r8/references/PackageReference.java
index 2d1ce52..1bb9752 100644
--- a/src/main/java/com/android/tools/r8/references/PackageReference.java
+++ b/src/main/java/com/android/tools/r8/references/PackageReference.java
@@ -4,14 +4,12 @@
 
 package com.android.tools.r8.references;
 
-import com.android.tools.r8.Keep;
-import com.android.tools.r8.KeepForRetraceApi;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.DescriptorUtils;
 import java.util.Objects;
 
 /** Reference to a package. */
-@Keep
-@KeepForRetraceApi
+@KeepForApi
 public class PackageReference {
 
   private final String packageName;
diff --git a/src/main/java/com/android/tools/r8/references/PrimitiveReference.java b/src/main/java/com/android/tools/r8/references/PrimitiveReference.java
index f7fe50a..5b399c4 100644
--- a/src/main/java/com/android/tools/r8/references/PrimitiveReference.java
+++ b/src/main/java/com/android/tools/r8/references/PrimitiveReference.java
@@ -3,12 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.references;
 
-import com.android.tools.r8.Keep;
-import com.android.tools.r8.KeepForRetraceApi;
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
-@KeepForRetraceApi
+@KeepForApi
 public abstract class PrimitiveReference implements TypeReference {
 
   static final PrimitiveReference BOOL =
diff --git a/src/main/java/com/android/tools/r8/references/Reference.java b/src/main/java/com/android/tools/r8/references/Reference.java
index d5071d2..a5d015d 100644
--- a/src/main/java/com/android/tools/r8/references/Reference.java
+++ b/src/main/java/com/android/tools/r8/references/Reference.java
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.references;
 
-import com.android.tools.r8.Keep;
-import com.android.tools.r8.KeepForRetraceApi;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.google.common.collect.ImmutableList;
 import java.lang.reflect.Constructor;
@@ -23,8 +22,7 @@
  *
  * <p>No guarantees are made on identity and all references must be compared by {@code equals}.
  */
-@Keep
-@KeepForRetraceApi
+@KeepForApi
 public final class Reference {
 
   public static PrimitiveReference BOOL = PrimitiveReference.BOOL;
diff --git a/src/main/java/com/android/tools/r8/references/TypeReference.java b/src/main/java/com/android/tools/r8/references/TypeReference.java
index 36099b9..8318760 100644
--- a/src/main/java/com/android/tools/r8/references/TypeReference.java
+++ b/src/main/java/com/android/tools/r8/references/TypeReference.java
@@ -3,12 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.references;
 
-import com.android.tools.r8.Keep;
-import com.android.tools.r8.KeepForRetraceApi;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.DescriptorUtils;
 
-@Keep
-@KeepForRetraceApi
+@KeepForApi
 public interface TypeReference {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/relocator/Relocator.java b/src/main/java/com/android/tools/r8/relocator/Relocator.java
index 37abb59..a0824ca 100644
--- a/src/main/java/com/android/tools/r8/relocator/Relocator.java
+++ b/src/main/java/com/android/tools/r8/relocator/Relocator.java
@@ -7,7 +7,6 @@
 import static com.android.tools.r8.utils.ExceptionUtils.unwrapExecutionException;
 
 import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.dex.ApplicationReader;
 import com.android.tools.r8.dex.Marker;
 import com.android.tools.r8.dex.Marker.Tool;
@@ -16,6 +15,7 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexApplication;
 import com.android.tools.r8.jar.CfApplicationWriter;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.naming.signature.GenericSignatureRewriter;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
 import com.android.tools.r8.utils.AndroidApp;
@@ -27,7 +27,7 @@
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 
-@Keep
+@KeepForApi
 public class Relocator {
 
   private Relocator() {}
diff --git a/src/main/java/com/android/tools/r8/relocator/RelocatorCommand.java b/src/main/java/com/android/tools/r8/relocator/RelocatorCommand.java
index 1684616..312bead 100644
--- a/src/main/java/com/android/tools/r8/relocator/RelocatorCommand.java
+++ b/src/main/java/com/android/tools/r8/relocator/RelocatorCommand.java
@@ -11,9 +11,9 @@
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.Diagnostic;
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.errors.CompilationError;
 import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
 import com.android.tools.r8.references.ClassReference;
@@ -41,7 +41,7 @@
 import java.util.Collection;
 import java.util.Set;
 
-@Keep
+@KeepForApi
 public class RelocatorCommand {
 
   private static final String THREAD_COUNT_FLAG = "--thread-count";
@@ -167,7 +167,7 @@
     return mapping;
   }
 
-  @Keep
+  @KeepForApi
   public static class Builder {
 
     private final AndroidApp.Builder app;
diff --git a/src/main/java/com/android/tools/r8/retrace/FinishedPartitionMappingCallback.java b/src/main/java/com/android/tools/r8/retrace/FinishedPartitionMappingCallback.java
index 6c4c906..40befd9 100644
--- a/src/main/java/com/android/tools/r8/retrace/FinishedPartitionMappingCallback.java
+++ b/src/main/java/com/android/tools/r8/retrace/FinishedPartitionMappingCallback.java
@@ -5,13 +5,13 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /***
  * Interface for registering a callback when a retracing operation is finished.
  */
 @FunctionalInterface
-@Keep
+@KeepForApi
 public interface FinishedPartitionMappingCallback {
 
   FinishedPartitionMappingCallback EMPTY_INSTANCE = diagnosticsHandler -> {};
diff --git a/src/main/java/com/android/tools/r8/retrace/IllegalClassNameLookupException.java b/src/main/java/com/android/tools/r8/retrace/IllegalClassNameLookupException.java
index 97d77be..1bfd06c 100644
--- a/src/main/java/com/android/tools/r8/retrace/IllegalClassNameLookupException.java
+++ b/src/main/java/com/android/tools/r8/retrace/IllegalClassNameLookupException.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public class IllegalClassNameLookupException extends RuntimeException {
 
   private final String typeName;
diff --git a/src/main/java/com/android/tools/r8/retrace/InvalidMappingFileException.java b/src/main/java/com/android/tools/r8/retrace/InvalidMappingFileException.java
index 86e81e1..c991de0 100644
--- a/src/main/java/com/android/tools/r8/retrace/InvalidMappingFileException.java
+++ b/src/main/java/com/android/tools/r8/retrace/InvalidMappingFileException.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public final class InvalidMappingFileException extends RuntimeException {
 
   public InvalidMappingFileException(Throwable throwable) {
diff --git a/src/main/java/com/android/tools/r8/retrace/MappingPartition.java b/src/main/java/com/android/tools/r8/retrace/MappingPartition.java
index a925cc3..dd5b49a 100644
--- a/src/main/java/com/android/tools/r8/retrace/MappingPartition.java
+++ b/src/main/java/com/android/tools/r8/retrace/MappingPartition.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface MappingPartition {
 
   String getKey();
diff --git a/src/main/java/com/android/tools/r8/retrace/MappingPartitionFromKeySupplier.java b/src/main/java/com/android/tools/r8/retrace/MappingPartitionFromKeySupplier.java
index 9b8c0a1..020ccf7 100644
--- a/src/main/java/com/android/tools/r8/retrace/MappingPartitionFromKeySupplier.java
+++ b/src/main/java/com/android/tools/r8/retrace/MappingPartitionFromKeySupplier.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /***
  * Supplier to provide the bytes for a partition specified by a key. Retrace guarantee that the
@@ -13,7 +13,7 @@
  *
  */
 @FunctionalInterface
-@Keep
+@KeepForApi
 public interface MappingPartitionFromKeySupplier {
 
   byte[] get(String key);
diff --git a/src/main/java/com/android/tools/r8/retrace/MappingPartitionMetadata.java b/src/main/java/com/android/tools/r8/retrace/MappingPartitionMetadata.java
index 32fc36d..146e536 100644
--- a/src/main/java/com/android/tools/r8/retrace/MappingPartitionMetadata.java
+++ b/src/main/java/com/android/tools/r8/retrace/MappingPartitionMetadata.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface MappingPartitionMetadata {
 
   byte[] getBytes();
diff --git a/src/main/java/com/android/tools/r8/retrace/MappingSupplier.java b/src/main/java/com/android/tools/r8/retrace/MappingSupplier.java
index 598f71f..d5060a2 100644
--- a/src/main/java/com/android/tools/r8/retrace/MappingSupplier.java
+++ b/src/main/java/com/android/tools/r8/retrace/MappingSupplier.java
@@ -5,10 +5,10 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.MappingSupplierInternal;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface MappingSupplier<T extends MappingSupplier<T>>
     extends MappingSupplierBase<T>, MappingSupplierInternal {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/MappingSupplierAsync.java b/src/main/java/com/android/tools/r8/retrace/MappingSupplierAsync.java
index ba04547..ce65453 100644
--- a/src/main/java/com/android/tools/r8/retrace/MappingSupplierAsync.java
+++ b/src/main/java/com/android/tools/r8/retrace/MappingSupplierAsync.java
@@ -5,9 +5,9 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface MappingSupplierAsync<T extends MappingSupplierAsync<T>>
     extends MappingSupplierBase<T> {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/MappingSupplierBase.java b/src/main/java/com/android/tools/r8/retrace/MappingSupplierBase.java
index 53ed349..36b0d82 100644
--- a/src/main/java/com/android/tools/r8/retrace/MappingSupplierBase.java
+++ b/src/main/java/com/android/tools/r8/retrace/MappingSupplierBase.java
@@ -6,12 +6,12 @@
 
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.Finishable;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.FieldReference;
 import com.android.tools.r8.references.MethodReference;
 
-@Keep
+@KeepForApi
 public interface MappingSupplierBase<T extends MappingSupplierBase<T>> extends Finishable {
 
   /***
diff --git a/src/main/java/com/android/tools/r8/retrace/MappingSupplierBuilder.java b/src/main/java/com/android/tools/r8/retrace/MappingSupplierBuilder.java
index 2a8a646..523f3aa 100644
--- a/src/main/java/com/android/tools/r8/retrace/MappingSupplierBuilder.java
+++ b/src/main/java/com/android/tools/r8/retrace/MappingSupplierBuilder.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public abstract class MappingSupplierBuilder<
     P extends MappingSupplier<P>, T extends MappingSupplierBuilder<P, T>> {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/Partition.java b/src/main/java/com/android/tools/r8/retrace/Partition.java
index 1582b5e..37e4684 100644
--- a/src/main/java/com/android/tools/r8/retrace/Partition.java
+++ b/src/main/java/com/android/tools/r8/retrace/Partition.java
@@ -8,11 +8,11 @@
 import static com.android.tools.r8.utils.ExceptionUtils.withMainProgramHandler;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.ParseFlagInfo;
 import com.android.tools.r8.ParseFlagInfoImpl;
 import com.android.tools.r8.ParseFlagPrinter;
 import com.android.tools.r8.Version;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.utils.OptionsParsing;
 import com.android.tools.r8.utils.OptionsParsing.ParseContext;
 import com.android.tools.r8.utils.PartitionMapZipContainer;
@@ -24,7 +24,7 @@
 import java.util.List;
 
 /** A tool for creating a partition-map from a proguard map. */
-@Keep
+@KeepForApi
 public class Partition {
 
   private static final String USAGE_MESSAGE =
diff --git a/src/main/java/com/android/tools/r8/retrace/PartitionCommand.java b/src/main/java/com/android/tools/r8/retrace/PartitionCommand.java
index 3c5db33..ef47fda 100644
--- a/src/main/java/com/android/tools/r8/retrace/PartitionCommand.java
+++ b/src/main/java/com/android/tools/r8/retrace/PartitionCommand.java
@@ -5,10 +5,10 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.PartitionMapConsumer;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public class PartitionCommand {
 
   private final DiagnosticsHandler diagnosticsHandler;
@@ -41,7 +41,7 @@
     return new Builder(new DiagnosticsHandler() {});
   }
 
-  @Keep
+  @KeepForApi
   public static class Builder {
 
     private final DiagnosticsHandler diagnosticsHandler;
diff --git a/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplier.java b/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplier.java
index d89ce17..6b6446d 100644
--- a/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplier.java
+++ b/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplier.java
@@ -5,14 +5,14 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.naming.MapVersion;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.FieldReference;
 import com.android.tools.r8.references.MethodReference;
 import com.android.tools.r8.retrace.internal.PartitionMappingSupplierBase;
 
-@Keep
+@KeepForApi
 public class PartitionMappingSupplier extends PartitionMappingSupplierBase<PartitionMappingSupplier>
     implements MappingSupplier<PartitionMappingSupplier> {
 
@@ -41,7 +41,7 @@
    *
    * @param classReference The minified class reference allowed to be lookup up.
    */
-  @Keep
+  @KeepForApi
   @Override
   public PartitionMappingSupplier registerClassUse(
       DiagnosticsHandler diagnosticsHandler, ClassReference classReference) {
@@ -53,7 +53,7 @@
    *
    * @param methodReference The minified method reference allowed to be lookup up.
    */
-  @Keep
+  @KeepForApi
   @Override
   public PartitionMappingSupplier registerMethodUse(
       DiagnosticsHandler diagnosticsHandler, MethodReference methodReference) {
@@ -65,7 +65,7 @@
    *
    * @param fieldReference The minified field reference allowed to be lookup up.
    */
-  @Keep
+  @KeepForApi
   @Override
   public PartitionMappingSupplier registerFieldUse(
       DiagnosticsHandler diagnosticsHandler, FieldReference fieldReference) {
@@ -99,7 +99,7 @@
     return new NoMetadataBuilder(mapVersion);
   }
 
-  @Keep
+  @KeepForApi
   public abstract static class NoMetadataBuilderBase<B extends NoMetadataBuilderBase<B>>
       extends PartitionMappingSupplierBuilderBase<B> {
 
@@ -120,7 +120,7 @@
     }
   }
 
-  @Keep
+  @KeepForApi
   public static class NoMetadataBuilder extends NoMetadataBuilderBase<NoMetadataBuilder> {
 
     private NoMetadataBuilder(MapVersion fallbackMapVersion) {
@@ -147,7 +147,7 @@
     }
   }
 
-  @Keep
+  @KeepForApi
   public static class Builder extends NoMetadataBuilderBase<Builder> {
 
     private byte[] metadata;
diff --git a/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplierAsync.java b/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplierAsync.java
index 6c16ab7..5093d80 100644
--- a/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplierAsync.java
+++ b/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplierAsync.java
@@ -5,14 +5,14 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.naming.MapVersion;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.FieldReference;
 import com.android.tools.r8.references.MethodReference;
 import com.android.tools.r8.retrace.internal.PartitionMappingSupplierBase;
 
-@Keep
+@KeepForApi
 public class PartitionMappingSupplierAsync
     extends PartitionMappingSupplierBase<PartitionMappingSupplierAsync>
     implements MappingSupplierAsync<PartitionMappingSupplierAsync> {
@@ -38,7 +38,6 @@
    *
    * @param classReference The minified class reference allowed to be lookup up.
    */
-  @Keep
   @Override
   public PartitionMappingSupplierAsync registerClassUse(
       DiagnosticsHandler diagnosticsHandler, ClassReference classReference) {
@@ -50,7 +49,6 @@
    *
    * @param methodReference The minified method reference allowed to be lookup up.
    */
-  @Keep
   @Override
   public PartitionMappingSupplierAsync registerMethodUse(
       DiagnosticsHandler diagnosticsHandler, MethodReference methodReference) {
@@ -62,7 +60,6 @@
    *
    * @param fieldReference The minified field reference allowed to be lookup up.
    */
-  @Keep
   @Override
   public PartitionMappingSupplierAsync registerFieldUse(
       DiagnosticsHandler diagnosticsHandler, FieldReference fieldReference) {
@@ -84,7 +81,7 @@
     return createRetracerFromPartitionSupplier(diagnosticsHandler, supplier);
   }
 
-  @Keep
+  @KeepForApi
   public static class Builder extends PartitionMappingSupplierBuilderBase<Builder> {
 
     private byte[] metadata;
diff --git a/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplierBuilderBase.java b/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplierBuilderBase.java
index 1dc2e14..c684ddc 100644
--- a/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplierBuilderBase.java
+++ b/src/main/java/com/android/tools/r8/retrace/PartitionMappingSupplierBuilderBase.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.naming.MapVersion;
 
-@Keep
+@KeepForApi
 public abstract class PartitionMappingSupplierBuilderBase<
     T extends PartitionMappingSupplierBuilderBase<T>> {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/PrepareMappingPartitionsCallback.java b/src/main/java/com/android/tools/r8/retrace/PrepareMappingPartitionsCallback.java
index 89c6161..75c5ded 100644
--- a/src/main/java/com/android/tools/r8/retrace/PrepareMappingPartitionsCallback.java
+++ b/src/main/java/com/android/tools/r8/retrace/PrepareMappingPartitionsCallback.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /***
  * Callback to be called to prepare all partitions registered by
@@ -12,7 +12,7 @@
  * {@link MappingPartitionFromKeySupplier}.
  */
 @FunctionalInterface
-@Keep
+@KeepForApi
 public interface PrepareMappingPartitionsCallback {
 
   PrepareMappingPartitionsCallback EMPTY_INSTANCE = () -> {};
diff --git a/src/main/java/com/android/tools/r8/retrace/ProguardMapPartitioner.java b/src/main/java/com/android/tools/r8/retrace/ProguardMapPartitioner.java
index 5805ae8..541f6da0 100644
--- a/src/main/java/com/android/tools/r8/retrace/ProguardMapPartitioner.java
+++ b/src/main/java/com/android/tools/r8/retrace/ProguardMapPartitioner.java
@@ -5,11 +5,11 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.retrace.internal.ProguardMapPartitionerOnClassNameToText.ProguardMapPartitionerBuilderImpl;
 import java.io.IOException;
 
-@Keep
+@KeepForApi
 public interface ProguardMapPartitioner {
 
   MappingPartitionMetadata run() throws IOException;
diff --git a/src/main/java/com/android/tools/r8/retrace/ProguardMapPartitionerBuilder.java b/src/main/java/com/android/tools/r8/retrace/ProguardMapPartitionerBuilder.java
index a7d9df8..ce347be 100644
--- a/src/main/java/com/android/tools/r8/retrace/ProguardMapPartitionerBuilder.java
+++ b/src/main/java/com/android/tools/r8/retrace/ProguardMapPartitionerBuilder.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.function.Consumer;
 
-@Keep
+@KeepForApi
 public interface ProguardMapPartitionerBuilder<
     B extends ProguardMapPartitionerBuilder<B, P>, P extends ProguardMapPartitioner> {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/ProguardMapProducer.java b/src/main/java/com/android/tools/r8/retrace/ProguardMapProducer.java
index 6e73c56..679e93c 100644
--- a/src/main/java/com/android/tools/r8/retrace/ProguardMapProducer.java
+++ b/src/main/java/com/android/tools/r8/retrace/ProguardMapProducer.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.google.common.primitives.Bytes;
 import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
@@ -16,7 +16,7 @@
 import java.nio.file.Path;
 
 /** Interface for producing a string format of a mapping file. */
-@Keep
+@KeepForApi
 public interface ProguardMapProducer {
 
   InputStream get() throws IOException;
diff --git a/src/main/java/com/android/tools/r8/retrace/ProguardMappingSupplier.java b/src/main/java/com/android/tools/r8/retrace/ProguardMappingSupplier.java
index 7b3e657..5edd21f 100644
--- a/src/main/java/com/android/tools/r8/retrace/ProguardMappingSupplier.java
+++ b/src/main/java/com/android/tools/r8/retrace/ProguardMappingSupplier.java
@@ -4,17 +4,17 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.retrace.internal.ProguardMappingSupplierBuilderImpl;
 
-@Keep
+@KeepForApi
 public abstract class ProguardMappingSupplier implements MappingSupplier<ProguardMappingSupplier> {
 
   public static Builder builder() {
     return new ProguardMappingSupplierBuilderImpl();
   }
 
-  @Keep
+  @KeepForApi
   public abstract static class Builder
       extends MappingSupplierBuilder<ProguardMappingSupplier, Builder> {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/RegisterMappingPartitionCallback.java b/src/main/java/com/android/tools/r8/retrace/RegisterMappingPartitionCallback.java
index e411883..76dc9c8 100644
--- a/src/main/java/com/android/tools/r8/retrace/RegisterMappingPartitionCallback.java
+++ b/src/main/java/com/android/tools/r8/retrace/RegisterMappingPartitionCallback.java
@@ -4,13 +4,13 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /***
  * Interface for registering a mapping partition to be used later.
  */
 @FunctionalInterface
-@Keep
+@KeepForApi
 public interface RegisterMappingPartitionCallback {
 
   RegisterMappingPartitionCallback EMPTY_INSTANCE = key -> {};
diff --git a/src/main/java/com/android/tools/r8/retrace/Retrace.java b/src/main/java/com/android/tools/r8/retrace/Retrace.java
index 4646f16..933b60a 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retrace.java
@@ -8,11 +8,11 @@
 
 import com.android.tools.r8.Diagnostic;
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.ParseFlagInfo;
 import com.android.tools.r8.ParseFlagInfoImpl;
 import com.android.tools.r8.ParseFlagPrinter;
 import com.android.tools.r8.Version;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.retrace.internal.RetraceAbortException;
 import com.android.tools.r8.retrace.internal.RetraceBase;
 import com.android.tools.r8.retrace.internal.StackTraceElementStringProxy;
@@ -44,7 +44,7 @@
  * <p>This is the interface for getting de-obfuscating stack traces, similar to the proguard retrace
  * tool.
  */
-@Keep
+@KeepForApi
 public class Retrace<T, ST extends StackTraceElementProxy<T, ST>> extends RetraceBase<T, ST> {
 
   private static final String USAGE_MESSAGE =
@@ -426,7 +426,7 @@
     return new Builder<>();
   }
 
-  @Keep
+  @KeepForApi
   public static class Builder<T, ST extends StackTraceElementProxy<T, ST>>
       extends RetraceBuilderBase<Builder<T, ST>, T, ST> {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceAsync.java b/src/main/java/com/android/tools/r8/retrace/RetraceAsync.java
index 00e07bd..90afa4f 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceAsync.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceAsync.java
@@ -5,12 +5,12 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.retrace.internal.RetraceBase;
 import java.util.List;
 
 /** An async retrace tool for obfuscated stack traces. */
-@Keep
+@KeepForApi
 public class RetraceAsync<T, ST extends StackTraceElementProxy<T, ST>> extends RetraceBase<T, ST> {
 
   private final MappingSupplierAsync<?> mappingSupplier;
@@ -97,7 +97,7 @@
             context);
   }
 
-  @Keep
+  @KeepForApi
   public static class Builder<T, ST extends StackTraceElementProxy<T, ST>>
       extends RetraceBuilderBase<Builder<T, ST>, T, ST> {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceAsyncAction.java b/src/main/java/com/android/tools/r8/retrace/RetraceAsyncAction.java
index a6088e8..8a7c41b 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceAsyncAction.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceAsyncAction.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceAsyncAction {
 
   void execute(MappingPartitionFromKeySupplier supplier);
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceAsyncResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceAsyncResult.java
index 146c3df..2e663a1 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceAsyncResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceAsyncResult.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceAsyncResult<T> {
 
   T getResult(MappingPartitionFromKeySupplier supplier);
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceBuilderBase.java b/src/main/java/com/android/tools/r8/retrace/RetraceBuilderBase.java
index 1deadfe..b4fd983 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceBuilderBase.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceBuilderBase.java
@@ -5,9 +5,9 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public abstract class RetraceBuilderBase<
     B extends RetraceBuilderBase<B, T, ST>, T, ST extends StackTraceElementProxy<T, ST>> {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceClassElement.java b/src/main/java/com/android/tools/r8/retrace/RetraceClassElement.java
index f7830c3..2dbe0f0 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceClassElement.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceClassElement.java
@@ -3,13 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.MethodReference;
 import com.android.tools.r8.references.TypeReference;
 import java.util.List;
 import java.util.OptionalInt;
 
-@Keep
+@KeepForApi
 public interface RetraceClassElement extends RetraceElement<RetraceClassResult> {
 
   RetracedClassReference getRetracedClass();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceClassResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceClassResult.java
index c2bd31a..7ff088e 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceClassResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceClassResult.java
@@ -4,12 +4,12 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.TypeReference;
 import java.util.List;
 import java.util.OptionalInt;
 
-@Keep
+@KeepForApi
 public interface RetraceClassResult extends RetraceResult<RetraceClassElement> {
 
   RetraceFieldResult lookupField(String fieldName);
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceCommand.java b/src/main/java/com/android/tools/r8/retrace/RetraceCommand.java
index c491aba..c4ccca6 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceCommand.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceCommand.java
@@ -5,13 +5,13 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.retrace.internal.StackTraceRegularExpressionParser;
 import com.android.tools.r8.utils.Box;
 import java.util.List;
 import java.util.function.Consumer;
 
-@Keep
+@KeepForApi
 public class RetraceCommand {
 
   private final StackTraceSupplier stackTraceSupplier;
@@ -72,7 +72,7 @@
     return new Builder(new DiagnosticsHandler() {});
   }
 
-  @Keep
+  @KeepForApi
   public static class Builder {
 
     private boolean isVerbose;
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceElement.java b/src/main/java/com/android/tools/r8/retrace/RetraceElement.java
index d069fcc..916d4a6 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceElement.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceElement.java
@@ -3,14 +3,14 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.KeepForSubclassing;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /**
  * Base interface for any element in a retrace result.
  *
  * <p>The element represents an unambiguous retracing.
  */
-@KeepForSubclassing
+@KeepForApi
 public interface RetraceElement<R extends RetraceResult<?>> {
 
   R getParentResult();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceFailedException.java b/src/main/java/com/android/tools/r8/retrace/RetraceFailedException.java
index 94b61ee..2c03560 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceFailedException.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceFailedException.java
@@ -4,13 +4,13 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /**
  * Exception thrown when retrace failed to complete because of errors previously reported through
  * {@link com.android.tools.r8.DiagnosticsHandler}.
  */
-@Keep
+@KeepForApi
 public class RetraceFailedException extends Exception {
 
   public RetraceFailedException() {
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceFieldElement.java b/src/main/java/com/android/tools/r8/retrace/RetraceFieldElement.java
index d51e175..d722b04 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceFieldElement.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceFieldElement.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceFieldElement extends RetraceElement<RetraceFieldResult> {
 
   boolean isUnknown();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceFieldResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceFieldResult.java
index 0dc3cc5..9fcc57b 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceFieldResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceFieldResult.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceFieldResult extends RetraceResult<RetraceFieldElement> {}
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceFrameElement.java b/src/main/java/com/android/tools/r8/retrace/RetraceFrameElement.java
index a985fe1..d03c075 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceFrameElement.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceFrameElement.java
@@ -3,12 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.List;
 import java.util.function.Consumer;
 import java.util.stream.Stream;
 
-@Keep
+@KeepForApi
 public interface RetraceFrameElement extends RetraceElement<RetraceFrameResult> {
 
   boolean isUnknown();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceFrameResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceFrameResult.java
index bfe0967..ea18505 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceFrameResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceFrameResult.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceFrameResult extends RetraceResult<RetraceFrameElement> {}
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceInvalidRewriteFrameDiagnostics.java b/src/main/java/com/android/tools/r8/retrace/RetraceInvalidRewriteFrameDiagnostics.java
index ace1b86..53a9e1c 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceInvalidRewriteFrameDiagnostics.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceInvalidRewriteFrameDiagnostics.java
@@ -5,11 +5,11 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class RetraceInvalidRewriteFrameDiagnostics implements Diagnostic {
 
   private final int numberOfFramesToRemove;
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceInvalidStackTraceLineDiagnostics.java b/src/main/java/com/android/tools/r8/retrace/RetraceInvalidStackTraceLineDiagnostics.java
index e18c6e6..cd6f603 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceInvalidStackTraceLineDiagnostics.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceInvalidStackTraceLineDiagnostics.java
@@ -5,12 +5,12 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.position.TextPosition;
 
-@Keep
+@KeepForApi
 public class RetraceInvalidStackTraceLineDiagnostics implements Diagnostic {
 
   private static final String NULL_STACK_TRACE_LINE_MESSAGE = "The stack trace line is <null>";
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceMethodElement.java b/src/main/java/com/android/tools/r8/retrace/RetraceMethodElement.java
index 132a200..05b946c 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceMethodElement.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceMethodElement.java
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceMethodElement extends RetraceElement<RetraceMethodResult> {
 
   boolean isUnknown();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceMethodResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceMethodResult.java
index f06fad3..feff0ad 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceMethodResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceMethodResult.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.OptionalInt;
 
-@Keep
+@KeepForApi
 public interface RetraceMethodResult extends RetraceResult<RetraceMethodElement> {
 
   RetraceFrameResult narrowByPosition(RetraceStackTraceContext context, OptionalInt position);
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceOptions.java b/src/main/java/com/android/tools/r8/retrace/RetraceOptions.java
index 513b39f..3258ac7 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceOptions.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceOptions.java
@@ -7,13 +7,13 @@
 import static com.android.tools.r8.retrace.internal.StackTraceRegularExpressionParser.DEFAULT_REGULAR_EXPRESSION;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /**
  * The base options for running retrace with support for continuously retrace strings without
  * parsing the proguard map multiple times.
  */
-@Keep
+@KeepForApi
 public class RetraceOptions {
 
   private final boolean isVerbose;
@@ -72,7 +72,7 @@
     return DEFAULT_REGULAR_EXPRESSION;
   }
 
-  @Keep
+  @KeepForApi
   public static class Builder {
 
     private boolean isVerbose;
diff --git a/src/main/java/com/android/tools/r8/retrace/RetracePartitionException.java b/src/main/java/com/android/tools/r8/retrace/RetracePartitionException.java
index d441e22..c463226 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetracePartitionException.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetracePartitionException.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public class RetracePartitionException extends RuntimeException {
 
   public RetracePartitionException(String message) {
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceResult.java
index cda85ce..dbafd92 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceResult.java
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Stream;
@@ -17,7 +17,7 @@
  * itself provide methods for providing contextual information to further restrict the ambiguity of
  * the result.
  */
-@Keep
+@KeepForApi
 public interface RetraceResult<E extends RetraceElement<?>> {
 
   /** Basic operation over 'elements' which represent a possible non-ambiguous retracing. */
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceResultWithContext.java b/src/main/java/com/android/tools/r8/retrace/RetraceResultWithContext.java
index 3961591..6c468d4 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceResultWithContext.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceResultWithContext.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceResultWithContext {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameAmbiguousResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameAmbiguousResult.java
index b788289..f63e73f 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameAmbiguousResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameAmbiguousResult.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.List;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
@@ -17,7 +17,7 @@
  * https://r8.googlesource.com/r8/+/main/doc/retrace.md for what information Retrace uses to discard
  * frames.
  */
-@Keep
+@KeepForApi
 public interface RetraceStackFrameAmbiguousResult<T> {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameAmbiguousResultWithContext.java b/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameAmbiguousResultWithContext.java
index f856cbd..9d8c1c4 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameAmbiguousResultWithContext.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameAmbiguousResultWithContext.java
@@ -4,8 +4,8 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceStackFrameAmbiguousResultWithContext<T>
     extends RetraceStackFrameAmbiguousResult<T>, RetraceResultWithContext {}
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameResult.java
index ac0b6fb..b6a6551 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameResult.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.List;
 import java.util.function.Consumer;
 
@@ -14,7 +14,7 @@
  * <p>It is guaranteed to be non-ambiguous. It can have more than one frame if it is an inline or an
  * outline expansion. It can be empty, fx. if the frames are compiler synthesized.
  */
-@Keep
+@KeepForApi
 public interface RetraceStackFrameResult<T> {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameResultWithContext.java b/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameResultWithContext.java
index 4a63db0..95a0138 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameResultWithContext.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceStackFrameResultWithContext.java
@@ -4,8 +4,8 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceStackFrameResultWithContext<T>
     extends RetraceStackFrameResult<T>, RetraceResultWithContext {}
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceContext.java b/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceContext.java
index 5af984a..3083865 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceContext.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceContext.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.retrace.internal.RetraceStackTraceContextImpl;
 
-@Keep
+@KeepForApi
 public interface RetraceStackTraceContext {
 
   static RetraceStackTraceContext empty() {
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceElementProxy.java b/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceElementProxy.java
index 714e2b9..c77d194 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceElementProxy.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceElementProxy.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.List;
 
-@Keep
+@KeepForApi
 public interface RetraceStackTraceElementProxy<T, ST extends StackTraceElementProxy<T, ST>>
     extends Comparable<RetraceStackTraceElementProxy<T, ST>> {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceElementProxyResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceElementProxyResult.java
index 1db1f08..9ab2eab 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceElementProxyResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceElementProxyResult.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.stream.Stream;
 
-@Keep
+@KeepForApi
 public interface RetraceStackTraceElementProxyResult<T, ST extends StackTraceElementProxy<T, ST>> {
 
   Stream<? extends RetraceStackTraceElementProxy<T, ST>> stream();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceResult.java
index adcb09a..02d079b 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceStackTraceResult.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.List;
 import java.util.function.Consumer;
 
@@ -13,7 +13,7 @@
  *
  * <p>The number of elements is the same as the number of input frames.
  */
-@Keep
+@KeepForApi
 public interface RetraceStackTraceResult<T> extends RetraceResultWithContext {
 
   /**
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceThrownExceptionElement.java b/src/main/java/com/android/tools/r8/retrace/RetraceThrownExceptionElement.java
index 1af093c..8ef3268 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceThrownExceptionElement.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceThrownExceptionElement.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceThrownExceptionElement
     extends RetraceElement<RetraceThrownExceptionResult> {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceThrownExceptionResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceThrownExceptionResult.java
index b53ec9b..4cfe5e0 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceThrownExceptionResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceThrownExceptionResult.java
@@ -4,8 +4,8 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceThrownExceptionResult
     extends RetraceResult<RetraceThrownExceptionElement> {}
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceTypeElement.java b/src/main/java/com/android/tools/r8/retrace/RetraceTypeElement.java
index 2df0a4c..ceb061b 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceTypeElement.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceTypeElement.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceTypeElement extends RetraceElement<RetraceTypeResult> {
 
   RetracedTypeReference getType();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceTypeResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceTypeResult.java
index 7925ff6..69f9605 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceTypeResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceTypeResult.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceTypeResult extends RetraceResult<RetraceTypeElement> {}
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceUnknownJsonMappingInformationResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceUnknownJsonMappingInformationResult.java
index 2afa333..49c36bf 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceUnknownJsonMappingInformationResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceUnknownJsonMappingInformationResult.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.function.Consumer;
 import java.util.stream.Stream;
 
-@Keep
+@KeepForApi
 public interface RetraceUnknownJsonMappingInformationResult {
 
   /** Basic operation over 'elements' which represent a possible non-ambiguous retracing. */
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceUnknownMapVersionDiagnostic.java b/src/main/java/com/android/tools/r8/retrace/RetraceUnknownMapVersionDiagnostic.java
index 9c1142b..4a9fcaf 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceUnknownMapVersionDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceUnknownMapVersionDiagnostic.java
@@ -5,12 +5,12 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.Version;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class RetraceUnknownMapVersionDiagnostic implements Diagnostic {
 
   private final String versionName;
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceUnknownMappingInformationElement.java b/src/main/java/com/android/tools/r8/retrace/RetraceUnknownMappingInformationElement.java
index 3bba032..363e917 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceUnknownMappingInformationElement.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceUnknownMappingInformationElement.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetraceUnknownMappingInformationElement {
 
   String getIdentifier();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetracedClassMemberReference.java b/src/main/java/com/android/tools/r8/retrace/RetracedClassMemberReference.java
index b4067b7..a2671bb 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetracedClassMemberReference.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetracedClassMemberReference.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetracedClassMemberReference {
 
   RetracedClassReference getHolderClass();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetracedClassReference.java b/src/main/java/com/android/tools/r8/retrace/RetracedClassReference.java
index 2c030f7..b943a50 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetracedClassReference.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetracedClassReference.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 
-@Keep
+@KeepForApi
 public interface RetracedClassReference {
 
   boolean isUnknown();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetracedFieldReference.java b/src/main/java/com/android/tools/r8/retrace/RetracedFieldReference.java
index 1e942d7..6e2ec15 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetracedFieldReference.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetracedFieldReference.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.FieldReference;
 import com.android.tools.r8.references.TypeReference;
 
-@Keep
+@KeepForApi
 public interface RetracedFieldReference extends RetracedClassMemberReference {
 
   boolean isUnknown();
@@ -19,7 +19,7 @@
 
   String getFieldName();
 
-  @Keep
+  @KeepForApi
   interface KnownRetracedFieldReference extends RetracedFieldReference {
 
     TypeReference getFieldType();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetracedMethodReference.java b/src/main/java/com/android/tools/r8/retrace/RetracedMethodReference.java
index d6644cb..1542606 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetracedMethodReference.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetracedMethodReference.java
@@ -4,12 +4,12 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.MethodReference;
 import com.android.tools.r8.references.TypeReference;
 import java.util.List;
 
-@Keep
+@KeepForApi
 public interface RetracedMethodReference
     extends RetracedClassMemberReference, Comparable<RetracedMethodReference> {
 
@@ -25,7 +25,7 @@
 
   int getOriginalPositionOrDefault(int defaultPosition);
 
-  @Keep
+  @KeepForApi
   interface KnownRetracedMethodReference extends RetracedMethodReference {
 
     boolean isVoid();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetracedSingleFrame.java b/src/main/java/com/android/tools/r8/retrace/RetracedSingleFrame.java
index 3b17336..ecefee9 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetracedSingleFrame.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetracedSingleFrame.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetracedSingleFrame {
 
   RetracedMethodReference getMethodReference();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetracedSourceFile.java b/src/main/java/com/android/tools/r8/retrace/RetracedSourceFile.java
index d677cb8..1331bc7 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetracedSourceFile.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetracedSourceFile.java
@@ -4,9 +4,9 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
-@Keep
+@KeepForApi
 public interface RetracedSourceFile {
 
   boolean hasRetraceResult();
diff --git a/src/main/java/com/android/tools/r8/retrace/RetracedTypeReference.java b/src/main/java/com/android/tools/r8/retrace/RetracedTypeReference.java
index f167483..5c29891 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetracedTypeReference.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetracedTypeReference.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.TypeReference;
 
-@Keep
+@KeepForApi
 public interface RetracedTypeReference {
 
   boolean isVoid();
diff --git a/src/main/java/com/android/tools/r8/retrace/Retracer.java b/src/main/java/com/android/tools/r8/retrace/Retracer.java
index 633b143..bc764c6 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retracer.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retracer.java
@@ -5,7 +5,7 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.FieldReference;
 import com.android.tools.r8.references.MethodReference;
@@ -13,7 +13,7 @@
 import java.util.OptionalInt;
 
 /** This is the main api interface for retrace. */
-@Keep
+@KeepForApi
 public interface Retracer {
 
   RetraceClassResult retraceClass(ClassReference classReference);
diff --git a/src/main/java/com/android/tools/r8/retrace/StackTraceElementProxy.java b/src/main/java/com/android/tools/r8/retrace/StackTraceElementProxy.java
index 263ca19..2d852fd 100644
--- a/src/main/java/com/android/tools/r8/retrace/StackTraceElementProxy.java
+++ b/src/main/java/com/android/tools/r8/retrace/StackTraceElementProxy.java
@@ -5,7 +5,7 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.Reference;
 import com.android.tools.r8.references.TypeReference;
@@ -13,7 +13,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-@Keep
+@KeepForApi
 public abstract class StackTraceElementProxy<T, ST extends StackTraceElementProxy<T, ST>> {
 
   public abstract boolean hasClassName();
diff --git a/src/main/java/com/android/tools/r8/retrace/StackTraceElementProxyRetracer.java b/src/main/java/com/android/tools/r8/retrace/StackTraceElementProxyRetracer.java
index e792ef0..fc6dcf2 100644
--- a/src/main/java/com/android/tools/r8/retrace/StackTraceElementProxyRetracer.java
+++ b/src/main/java/com/android/tools/r8/retrace/StackTraceElementProxyRetracer.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.retrace.internal.StackTraceElementProxyRetracerImpl;
 
-@Keep
+@KeepForApi
 public interface StackTraceElementProxyRetracer<T, ST extends StackTraceElementProxy<T, ST>> {
 
   RetraceStackTraceElementProxyResult<T, ST> retrace(ST element, RetraceStackTraceContext context);
diff --git a/src/main/java/com/android/tools/r8/retrace/StackTraceLineParser.java b/src/main/java/com/android/tools/r8/retrace/StackTraceLineParser.java
index 92d1dca..910dd0f 100644
--- a/src/main/java/com/android/tools/r8/retrace/StackTraceLineParser.java
+++ b/src/main/java/com/android/tools/r8/retrace/StackTraceLineParser.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.retrace.internal.StackTraceElementStringProxy;
 import com.android.tools.r8.retrace.internal.StackTraceRegularExpressionParser;
 
-@Keep
+@KeepForApi
 public interface StackTraceLineParser<T, ST extends StackTraceElementProxy<T, ST>> {
 
   ST parse(T stackTraceLine);
diff --git a/src/main/java/com/android/tools/r8/retrace/StackTraceSupplier.java b/src/main/java/com/android/tools/r8/retrace/StackTraceSupplier.java
index 9940c5c..573f6d7 100644
--- a/src/main/java/com/android/tools/r8/retrace/StackTraceSupplier.java
+++ b/src/main/java/com/android/tools/r8/retrace/StackTraceSupplier.java
@@ -4,10 +4,10 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.util.List;
 
-@Keep
+@KeepForApi
 @FunctionalInterface
 public interface StackTraceSupplier {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/StreamSupplier.java b/src/main/java/com/android/tools/r8/retrace/StreamSupplier.java
index 4a51497..2b351e9 100644
--- a/src/main/java/com/android/tools/r8/retrace/StreamSupplier.java
+++ b/src/main/java/com/android/tools/r8/retrace/StreamSupplier.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.retrace;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /**
  * Supplier of input lines to be retraced.
@@ -12,7 +12,7 @@
  * @param <E> the type of the {@link Throwable}
  */
 @FunctionalInterface
-@Keep
+@KeepForApi
 public interface StreamSupplier<E extends Throwable> {
 
   String getNext() throws E;
diff --git a/src/main/java/com/android/tools/r8/retrace/StringRetrace.java b/src/main/java/com/android/tools/r8/retrace/StringRetrace.java
index 3f37a84..2229315 100644
--- a/src/main/java/com/android/tools/r8/retrace/StringRetrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/StringRetrace.java
@@ -5,7 +5,7 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.retrace.internal.RetraceStackFrameResultWithContextImpl;
 import com.android.tools.r8.retrace.internal.StackTraceElementStringProxy;
 import com.android.tools.r8.utils.StringUtils;
@@ -20,7 +20,7 @@
  * Specialized Retrace class for retracing string retraces, with special handling for appending
  * additional information into the strings, such as OR's for ambiguous lines.
  */
-@Keep
+@KeepForApi
 public class StringRetrace extends Retrace<String, StackTraceElementStringProxy> {
 
   StringRetrace(
diff --git a/src/main/java/com/android/tools/r8/startup/StartupClassBuilder.java b/src/main/java/com/android/tools/r8/startup/StartupClassBuilder.java
index 43a63b4..b390a0c 100644
--- a/src/main/java/com/android/tools/r8/startup/StartupClassBuilder.java
+++ b/src/main/java/com/android/tools/r8/startup/StartupClassBuilder.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.startup;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 
 /** Interface for providing information about a startup class to the compiler. */
-@Keep
+@KeepForApi
 public interface StartupClassBuilder {
 
   StartupClassBuilder setClassReference(ClassReference classReference);
diff --git a/src/main/java/com/android/tools/r8/startup/StartupMethodBuilder.java b/src/main/java/com/android/tools/r8/startup/StartupMethodBuilder.java
index 0c1efe2..6cdf52e 100644
--- a/src/main/java/com/android/tools/r8/startup/StartupMethodBuilder.java
+++ b/src/main/java/com/android/tools/r8/startup/StartupMethodBuilder.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.startup;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.MethodReference;
 
 /** Interface for providing information about a startup method to the compiler. */
-@Keep
+@KeepForApi
 public interface StartupMethodBuilder {
 
   StartupMethodBuilder setMethodReference(MethodReference methodReference);
diff --git a/src/main/java/com/android/tools/r8/startup/StartupProfileBuilder.java b/src/main/java/com/android/tools/r8/startup/StartupProfileBuilder.java
index 3ee53c7..cc59960 100644
--- a/src/main/java/com/android/tools/r8/startup/StartupProfileBuilder.java
+++ b/src/main/java/com/android/tools/r8/startup/StartupProfileBuilder.java
@@ -4,13 +4,13 @@
 
 package com.android.tools.r8.startup;
 
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.TextInputStream;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.profile.art.HumanReadableArtProfileParserBuilder;
 import java.util.function.Consumer;
 
 /** Interface for providing a startup profile to the compiler. */
-@Keep
+@KeepForApi
 public interface StartupProfileBuilder {
 
   /** API for adding information about a startup class to the compiler. */
diff --git a/src/main/java/com/android/tools/r8/startup/StartupProfileProvider.java b/src/main/java/com/android/tools/r8/startup/StartupProfileProvider.java
index 39ad8fc..b77e1c0 100644
--- a/src/main/java/com/android/tools/r8/startup/StartupProfileProvider.java
+++ b/src/main/java/com/android/tools/r8/startup/StartupProfileProvider.java
@@ -4,11 +4,11 @@
 
 package com.android.tools.r8.startup;
 
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.Resource;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 
 /** Interface for providing a startup profile to the compiler. */
-@Keep
+@KeepForApi
 public interface StartupProfileProvider extends Resource {
 
   /** Provides the startup profile by callbacks to the given {@param startupProfileBuilder}. */
diff --git a/src/main/java/com/android/tools/r8/startup/diagnostic/MissingStartupProfileItemsDiagnostic.java b/src/main/java/com/android/tools/r8/startup/diagnostic/MissingStartupProfileItemsDiagnostic.java
index 144e210..c5ab7a9 100644
--- a/src/main/java/com/android/tools/r8/startup/diagnostic/MissingStartupProfileItemsDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/startup/diagnostic/MissingStartupProfileItemsDiagnostic.java
@@ -5,10 +5,10 @@
 package com.android.tools.r8.startup.diagnostic;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.graph.DexDefinitionSupplier;
 import com.android.tools.r8.graph.DexReference;
 import com.android.tools.r8.graph.DexString;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.profile.startup.profile.StartupProfileClassRule;
@@ -19,7 +19,7 @@
 import java.util.List;
 import java.util.Set;
 
-@Keep
+@KeepForApi
 public class MissingStartupProfileItemsDiagnostic implements Diagnostic {
 
   private final List<DexReference> missingStartupItems;
diff --git a/src/main/java/com/android/tools/r8/threading/ThreadingModule.java b/src/main/java/com/android/tools/r8/threading/ThreadingModule.java
index 25f31bd..1525e70 100644
--- a/src/main/java/com/android/tools/r8/threading/ThreadingModule.java
+++ b/src/main/java/com/android/tools/r8/threading/ThreadingModule.java
@@ -4,8 +4,14 @@
 
 package com.android.tools.r8.threading;
 
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
+import com.android.tools.r8.keepanno.annotations.KeepTarget;
+import com.android.tools.r8.keepanno.annotations.MemberAccessFlags;
+import com.android.tools.r8.keepanno.annotations.UsedByReflection;
+import com.android.tools.r8.keepanno.annotations.UsesReflection;
+import com.android.tools.r8.threading.providers.blocking.ThreadingModuleBlockingProvider;
+import com.android.tools.r8.threading.providers.singlethreaded.ThreadingModuleSingleThreadedProvider;
 import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
@@ -16,11 +22,18 @@
  * Threading module interface to enable non-blocking usage of R8.
  *
  * <p>The threading module has multiple implementations outside the main R8 jar. The concrete
- * implementations are loaded via a Java service loader. Since these implementations are dynamically
- * loaded the interface they implement must be kept.
+ * implementations are loaded via reflection. Since these implementations are dynamically loaded the
+ * interface they implement must be kept.
  */
-@Keep
+@UsedByReflection(
+    kind = KeepItemKind.CLASS_AND_MEMBERS,
+    memberAccess = {MemberAccessFlags.PUBLIC})
 public interface ThreadingModule {
+
+  ExecutorService createSingleThreadedExecutorService();
+
+  ExecutorService createThreadedExecutorService(int threadCount);
+
   <T> Future<T> submit(Callable<T> task, ExecutorService executorService) throws ExecutionException;
 
   <T> void awaitFutures(List<Future<T>> futures) throws ExecutionException;
@@ -28,12 +41,25 @@
   class Loader {
 
     // Splitting up the names to make reflective identification unlikely.
+    // We explicitly don't want R8 to optimize out the reflective lookup.
     private static final String PACKAGE = "com.android.tools.r8.threading.providers";
     private static final String[] IMPLEMENTATIONS = {
       "blocking.ThreadingModuleBlockingProvider",
       "singlethreaded.ThreadingModuleSingleThreadedProvider"
     };
 
+    @UsesReflection({
+      @KeepTarget(
+          kind = KeepItemKind.CLASS_AND_MEMBERS,
+          classConstant = ThreadingModuleBlockingProvider.class,
+          methodName = "<init>",
+          methodParameters = {}),
+      @KeepTarget(
+          kind = KeepItemKind.CLASS_AND_MEMBERS,
+          classConstant = ThreadingModuleSingleThreadedProvider.class,
+          methodName = "<init>",
+          methodParameters = {})
+    })
     public static ThreadingModuleProvider load() {
       for (String implementation : IMPLEMENTATIONS) {
         String name = PACKAGE + "." + implementation;
diff --git a/src/main/java/com/android/tools/r8/threading/ThreadingModuleProvider.java b/src/main/java/com/android/tools/r8/threading/ThreadingModuleProvider.java
index ea401c9..290f23e 100644
--- a/src/main/java/com/android/tools/r8/threading/ThreadingModuleProvider.java
+++ b/src/main/java/com/android/tools/r8/threading/ThreadingModuleProvider.java
@@ -4,14 +4,18 @@
 
 package com.android.tools.r8.threading;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepItemKind;
+import com.android.tools.r8.keepanno.annotations.MemberAccessFlags;
+import com.android.tools.r8.keepanno.annotations.UsedByReflection;
 
 /**
  * Interface to obtain a threading module.
  *
- * <p>The provider is loaded via Java service loader so its interface must be kept.
+ * <p>The provider is loaded via reflection so its interface must be kept.
  */
-@Keep
+@UsedByReflection(
+    kind = KeepItemKind.CLASS_AND_MEMBERS,
+    memberAccess = {MemberAccessFlags.PUBLIC})
 public interface ThreadingModuleProvider {
 
   ThreadingModule create();
diff --git a/src/main/java/com/android/tools/r8/threading/providers/blocking/ThreadingModuleBlocking.java b/src/main/java/com/android/tools/r8/threading/providers/blocking/ThreadingModuleBlocking.java
index 326c946..6445817 100644
--- a/src/main/java/com/android/tools/r8/threading/providers/blocking/ThreadingModuleBlocking.java
+++ b/src/main/java/com/android/tools/r8/threading/providers/blocking/ThreadingModuleBlocking.java
@@ -10,11 +10,24 @@
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 
 public class ThreadingModuleBlocking implements ThreadingModule {
 
   @Override
+  public ExecutorService createSingleThreadedExecutorService() {
+    return Executors.newSingleThreadExecutor();
+  }
+
+  @Override
+  public ExecutorService createThreadedExecutorService(int threadCount) {
+    // Note Executors.newSingleThreadExecutor() is not used when just one thread is used. See
+    // b/67338394.
+    return Executors.newWorkStealingPool(threadCount);
+  }
+
+  @Override
   public <T> Future<T> submit(Callable<T> task, ExecutorService executorService) {
     return executorService.submit(task);
   }
diff --git a/src/main/java/com/android/tools/r8/threading/providers/blocking/ThreadingModuleBlockingProvider.java b/src/main/java/com/android/tools/r8/threading/providers/blocking/ThreadingModuleBlockingProvider.java
index d5a0ccb..0c390ee 100644
--- a/src/main/java/com/android/tools/r8/threading/providers/blocking/ThreadingModuleBlockingProvider.java
+++ b/src/main/java/com/android/tools/r8/threading/providers/blocking/ThreadingModuleBlockingProvider.java
@@ -4,11 +4,9 @@
 
 package com.android.tools.r8.threading.providers.blocking;
 
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.threading.ThreadingModule;
 import com.android.tools.r8.threading.ThreadingModuleProvider;
 
-@Keep
 public class ThreadingModuleBlockingProvider implements ThreadingModuleProvider {
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/threading/providers/singlethreaded/ThreadingModuleSingleThreaded.java b/src/main/java/com/android/tools/r8/threading/providers/singlethreaded/ThreadingModuleSingleThreaded.java
index 0e47c03..2afc6db 100644
--- a/src/main/java/com/android/tools/r8/threading/providers/singlethreaded/ThreadingModuleSingleThreaded.java
+++ b/src/main/java/com/android/tools/r8/threading/providers/singlethreaded/ThreadingModuleSingleThreaded.java
@@ -6,6 +6,7 @@
 
 import com.android.tools.r8.threading.ThreadingModule;
 import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.MoreExecutors;
 import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
@@ -15,6 +16,18 @@
 public class ThreadingModuleSingleThreaded implements ThreadingModule {
 
   @Override
+  public ExecutorService createSingleThreadedExecutorService() {
+    // The executor service is ignored in submit. It should never be used so we just pass null.
+    // TODO(b/304992619): We should refactor the code base to internalize the executor in a type.
+    return MoreExecutors.newDirectExecutorService();
+  }
+
+  @Override
+  public ExecutorService createThreadedExecutorService(int threadCount) {
+    return createSingleThreadedExecutorService();
+  }
+
+  @Override
   public <T> Future<T> submit(Callable<T> task, ExecutorService executorService)
       throws ExecutionException {
     try {
diff --git a/src/main/java/com/android/tools/r8/threading/providers/singlethreaded/ThreadingModuleSingleThreadedProvider.java b/src/main/java/com/android/tools/r8/threading/providers/singlethreaded/ThreadingModuleSingleThreadedProvider.java
index 8044511..b7a5633 100644
--- a/src/main/java/com/android/tools/r8/threading/providers/singlethreaded/ThreadingModuleSingleThreadedProvider.java
+++ b/src/main/java/com/android/tools/r8/threading/providers/singlethreaded/ThreadingModuleSingleThreadedProvider.java
@@ -4,11 +4,9 @@
 
 package com.android.tools.r8.threading.providers.singlethreaded;
 
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.threading.ThreadingModule;
 import com.android.tools.r8.threading.ThreadingModuleProvider;
 
-@Keep
 public class ThreadingModuleSingleThreadedProvider implements ThreadingModuleProvider {
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/tracereferences/TraceReferences.java b/src/main/java/com/android/tools/r8/tracereferences/TraceReferences.java
index ad30e62..50a016c 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/TraceReferences.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/TraceReferences.java
@@ -6,7 +6,6 @@
 import static com.android.tools.r8.utils.CovariantReturnTypeUtils.modelLibraryMethodsWithCovariantReturnTypes;
 
 import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.ProgramResource;
 import com.android.tools.r8.ProgramResource.Kind;
 import com.android.tools.r8.ProgramResourceProvider;
@@ -17,6 +16,7 @@
 import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexProgramClass;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.CommandLineOrigin;
 import com.android.tools.r8.shaking.MainDexInfo;
 import com.android.tools.r8.synthesis.SyntheticItems.GlobalSyntheticsStrategy;
@@ -31,7 +31,7 @@
 import java.util.Set;
 import java.util.function.Consumer;
 
-@Keep
+@KeepForApi
 public class TraceReferences {
 
   public static void run(TraceReferencesCommand command) throws CompilationFailedException {
diff --git a/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesCheckConsumer.java b/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesCheckConsumer.java
index 6912b15..8ab96e8 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesCheckConsumer.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesCheckConsumer.java
@@ -5,7 +5,6 @@
 package com.android.tools.r8.tracereferences;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.diagnostic.DefinitionContext;
 import com.android.tools.r8.diagnostic.MissingDefinitionsDiagnostic;
 import com.android.tools.r8.diagnostic.internal.DefinitionContextUtils;
@@ -13,6 +12,7 @@
 import com.android.tools.r8.diagnostic.internal.MissingDefinitionsDiagnosticImpl;
 import com.android.tools.r8.diagnostic.internal.MissingFieldInfoImpl;
 import com.android.tools.r8.diagnostic.internal.MissingMethodInfoImpl;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.FieldReference;
 import com.android.tools.r8.references.MethodReference;
@@ -28,7 +28,7 @@
  * com.android.tools.r8.diagnostic.MissingDefinitionsDiagnostic} as an error, if any missing
  * definitions were found.
  */
-@Keep
+@KeepForApi
 public class TraceReferencesCheckConsumer extends TraceReferencesConsumer.ForwardingConsumer {
 
   private final Map<ClassReference, Map<Object, DefinitionContext>> missingClassesContexts =
diff --git a/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesCommand.java b/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesCommand.java
index ddd9e3f..28deeb3 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesCommand.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesCommand.java
@@ -13,12 +13,12 @@
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.Diagnostic;
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.ProgramResource;
 import com.android.tools.r8.ProgramResource.Kind;
 import com.android.tools.r8.ProgramResourceProvider;
 import com.android.tools.r8.dex.Marker.Tool;
 import com.android.tools.r8.dump.DumpOptions;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
 import com.android.tools.r8.utils.ArchiveResourceProvider;
@@ -42,7 +42,7 @@
 import org.objectweb.asm.ClassReader;
 import org.objectweb.asm.ClassVisitor;
 
-@Keep
+@KeepForApi
 public class TraceReferencesCommand {
   private final boolean printHelp;
   private final boolean printVersion;
@@ -116,7 +116,7 @@
     return printVersion;
   }
 
-  @Keep
+  @KeepForApi
   public static class Builder {
 
     private boolean printHelp = false;
diff --git a/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesConsumer.java b/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesConsumer.java
index e5251f7..2f6e23d 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesConsumer.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesConsumer.java
@@ -4,22 +4,21 @@
 package com.android.tools.r8.tracereferences;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
-import com.android.tools.r8.KeepForSubclassing;
 import com.android.tools.r8.diagnostic.DefinitionContext;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.FieldReference;
 import com.android.tools.r8.references.MethodReference;
 import com.android.tools.r8.references.PackageReference;
 
 /** Consumer interface for recording references */
-@KeepForSubclassing
+@KeepForApi
 public interface TraceReferencesConsumer {
 
   /**
    * Interface for asking for the access flags for a traced reference when the definition is present
    */
-  @Keep
+  @KeepForApi
   interface AccessFlags {
     boolean isStatic();
 
@@ -34,21 +33,21 @@
    * Interface for asking for additional class information for a traced class when the definition is
    * found.
    */
-  @Keep
+  @KeepForApi
   interface ClassAccessFlags extends AccessFlags {
     boolean isInterface();
 
     boolean isEnum();
   }
 
-  @Keep
+  @KeepForApi
   interface FieldAccessFlags extends AccessFlags {}
 
-  @Keep
+  @KeepForApi
   interface MethodAccessFlags extends AccessFlags {}
 
   /** Interface implemented by all references reported */
-  @Keep
+  @KeepForApi
   interface TracedReference<T, F> {
     /** Returns if the reference does not have a definition in the program traced. */
     boolean isMissingDefinition();
@@ -67,13 +66,13 @@
     F getAccessFlags();
   }
 
-  @Keep
+  @KeepForApi
   interface TracedClass extends TracedReference<ClassReference, ClassAccessFlags> {}
 
-  @Keep
+  @KeepForApi
   interface TracedField extends TracedReference<FieldReference, FieldAccessFlags> {}
 
-  @Keep
+  @KeepForApi
   interface TracedMethod extends TracedReference<MethodReference, MethodAccessFlags> {}
 
   /**
@@ -140,7 +139,7 @@
   }
 
   /** Forwarding consumer to delegate to an optional existing consumer. */
-  @Keep
+  @KeepForApi
   class ForwardingConsumer implements TraceReferencesConsumer {
 
     private static final TraceReferencesConsumer EMPTY_CONSUMER = new ForwardingConsumer(null);
diff --git a/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesKeepRules.java b/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesKeepRules.java
index 52ea13c..40fe9c3 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesKeepRules.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesKeepRules.java
@@ -4,9 +4,9 @@
 package com.android.tools.r8.tracereferences;
 
 import com.android.tools.r8.DiagnosticsHandler;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.StringConsumer.FileConsumer;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.tracereferences.internal.TraceReferencesResult;
 import java.nio.file.Path;
 
@@ -23,7 +23,7 @@
  *     .build();
  * </pre>
  */
-@Keep
+@KeepForApi
 public class TraceReferencesKeepRules extends TraceReferencesConsumer.ForwardingConsumer {
 
   private final TraceReferencesResult.Builder traceReferencesResultBuilder;
@@ -49,7 +49,7 @@
    *
    * <p>A builder is obtained by calling {@link TraceReferencesKeepRules#builder}.
    */
-  @Keep
+  @KeepForApi
   public static class Builder {
     private StringConsumer consumer;
     private boolean allowObfuscation;
diff --git a/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java b/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java
index 9311d46..6532b8f 100644
--- a/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java
@@ -8,12 +8,12 @@
 import com.android.tools.r8.DataDirectoryResource;
 import com.android.tools.r8.DataEntryResource;
 import com.android.tools.r8.DataResourceProvider;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.ProgramResource;
 import com.android.tools.r8.ProgramResource.Kind;
 import com.android.tools.r8.ProgramResourceProvider;
 import com.android.tools.r8.ResourceException;
 import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.ArchiveEntryOrigin;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
@@ -33,7 +33,7 @@
 import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
 
-@Keep // TODO(b/121121779) Remove keep-annotation.
+@KeepForApi
 public class ArchiveResourceProvider implements ProgramResourceProvider, DataResourceProvider {
 
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/utils/ExceptionDiagnostic.java b/src/main/java/com/android/tools/r8/utils/ExceptionDiagnostic.java
index a73aeb5..e170d55 100644
--- a/src/main/java/com/android/tools/r8/utils/ExceptionDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/utils/ExceptionDiagnostic.java
@@ -5,8 +5,8 @@
 package com.android.tools.r8.utils;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
 import com.android.tools.r8.ResourceException;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
@@ -18,7 +18,7 @@
  * conversion to a diagnostic, the full exception stack can be obtained in the suppressed exceptions
  * on the inner-most cause.
  */
-@Keep
+@KeepForApi
 public class ExceptionDiagnostic implements Diagnostic {
 
   private final Throwable cause;
diff --git a/src/main/java/com/android/tools/r8/utils/StackTraceUtils.java b/src/main/java/com/android/tools/r8/utils/StackTraceUtils.java
index 009c490..98112ed 100644
--- a/src/main/java/com/android/tools/r8/utils/StackTraceUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/StackTraceUtils.java
@@ -4,12 +4,12 @@
 
 package com.android.tools.r8.utils;
 
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import java.io.IOException;
 import java.io.PrintStream;
 import java.nio.charset.StandardCharsets;
 
-@Keep
+@KeepForApi
 public class StackTraceUtils {
 
   private static final String pathToWriteStacktrace =
diff --git a/src/main/java/com/android/tools/r8/utils/StringDiagnostic.java b/src/main/java/com/android/tools/r8/utils/StringDiagnostic.java
index 6476a5a..6067092 100644
--- a/src/main/java/com/android/tools/r8/utils/StringDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/utils/StringDiagnostic.java
@@ -4,20 +4,20 @@
 package com.android.tools.r8.utils;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
 /**
  * A diagnostic message.
  *
- * <p>This string diagnostic is used to report various error messages from the compiler. There is
- * no guarantee that the message will remain the same or that the issue will continue to be reported
- * by way of a {@link StringDiagnostic}. If there is a need to reliably identify a particular kind
- * of error which is currently reported via a {@link StringDiagnostic}, then please file a feature
+ * <p>This string diagnostic is used to report various error messages from the compiler. There is no
+ * guarantee that the message will remain the same or that the issue will continue to be reported by
+ * way of a {@link StringDiagnostic}. If there is a need to reliably identify a particular kind of
+ * error which is currently reported via a {@link StringDiagnostic}, then please file a feature
  * request on D8/R8.
  */
-@Keep
+@KeepForApi
 public class StringDiagnostic implements Diagnostic {
 
   private final Origin origin;
diff --git a/src/main/java/com/android/tools/r8/utils/ThreadUtils.java b/src/main/java/com/android/tools/r8/utils/ThreadUtils.java
index 8a28293..8a34b5a 100644
--- a/src/main/java/com/android/tools/r8/utils/ThreadUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ThreadUtils.java
@@ -12,7 +12,6 @@
 import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.concurrent.ForkJoinPool;
 import java.util.function.Consumer;
 import java.util.function.Predicate;
@@ -214,26 +213,27 @@
         executorService);
   }
 
-  static ExecutorService getExecutorServiceForProcessors(int processors) {
+  static ExecutorService getExecutorServiceForProcessors(
+      int processors, ThreadingModule threadingModule) {
     // This heuristic is based on measurements on a 32 core (hyper-threaded) machine.
     int threads = processors <= 2 ? processors : (int) Math.ceil(Integer.min(processors, 16) / 2.0);
-    return getExecutorServiceForThreads(threads);
+    return getExecutorServiceForThreads(threads, threadingModule);
   }
 
-  static ExecutorService getExecutorServiceForThreads(int threads) {
-    // Note Executors.newSingleThreadExecutor() is not used when just one thread is used. See
-    // b/67338394.
-    return Executors.newWorkStealingPool(threads);
+  static ExecutorService getExecutorServiceForThreads(
+      int threads, ThreadingModule threadingModule) {
+    return threadingModule.createThreadedExecutorService(threads);
   }
 
-  public static ExecutorService getExecutorService(int threads) {
+  public static ExecutorService getExecutorService(int threads, ThreadingModule threadingModule) {
     return threads == NOT_SPECIFIED
-        ? getExecutorServiceForProcessors(Runtime.getRuntime().availableProcessors())
-        : getExecutorServiceForThreads(threads);
+        ? getExecutorServiceForProcessors(
+            Runtime.getRuntime().availableProcessors(), threadingModule)
+        : getExecutorServiceForThreads(threads, threadingModule);
   }
 
   public static ExecutorService getExecutorService(InternalOptions options) {
-    return getExecutorService(options.threadCount);
+    return getExecutorService(options.threadCount, options.getThreadingModule());
   }
 
   public static int getNumberOfThreads(ExecutorService service) {
diff --git a/src/main/java/com/android/tools/r8/utils/UnverifiableCfCodeDiagnostic.java b/src/main/java/com/android/tools/r8/utils/UnverifiableCfCodeDiagnostic.java
index 1724acc..866a15e 100644
--- a/src/main/java/com/android/tools/r8/utils/UnverifiableCfCodeDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/utils/UnverifiableCfCodeDiagnostic.java
@@ -4,12 +4,12 @@
 package com.android.tools.r8.utils;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.references.MethodReference;
 
-@Keep
+@KeepForApi
 public class UnverifiableCfCodeDiagnostic implements Diagnostic {
 
   private final MethodReference methodReference;
diff --git a/src/main/java/com/android/tools/r8/utils/positions/NotSupportedMapVersionForMappingComposeDiagnostic.java b/src/main/java/com/android/tools/r8/utils/positions/NotSupportedMapVersionForMappingComposeDiagnostic.java
index 285046c..1e672a8 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/NotSupportedMapVersionForMappingComposeDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/NotSupportedMapVersionForMappingComposeDiagnostic.java
@@ -5,11 +5,11 @@
 package com.android.tools.r8.utils.positions;
 
 import com.android.tools.r8.Diagnostic;
-import com.android.tools.r8.Keep;
+import com.android.tools.r8.keepanno.annotations.KeepForApi;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 
-@Keep
+@KeepForApi
 public class NotSupportedMapVersionForMappingComposeDiagnostic implements Diagnostic {
 
   @Override
diff --git a/src/main/keep.txt b/src/main/keep.txt
index 3e23b48..2aba17e 100644
--- a/src/main/keep.txt
+++ b/src/main/keep.txt
@@ -2,14 +2,8 @@
 # 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[]); }
diff --git a/src/main/keep_retrace.txt b/src/main/keep_retrace.txt
deleted file mode 100644
index 6ddb273..0000000
--- a/src/main/keep_retrace.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2021, 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.
-
-# The retrace api is separated out without repackaging which is why this broad
-# rule is used.
--keep public class com.android.tools.r8.retrace.* {
-     public <methods>;
-     public <fields>;
- }
--keepattributes SourceFile, LineNumberTable, InnerClasses, EnclosingMethod, Exceptions, Signature
--keepparameternames
-
--repackageclasses com.android.tools.r8.retrace_internal
-
-# Keep all things that can be reached from the retrace api
--keep @com.android.tools.r8.KeepForRetraceApi class * { public *; }
-
--keep,allowshrinking @com.android.tools.r8.Keep class * { public *; }
--keep,allowshrinking @com.android.tools.r8.KeepForSubclassing class * { public *; protected *; }
-
--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(); }
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapCurrentEqualityTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapCurrentEqualityTest.java
index a6c99f8..1f30ddf 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapCurrentEqualityTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapCurrentEqualityTest.java
@@ -114,8 +114,9 @@
           .addProgramFiles(ToolHelper.getR8WithRelocatedDeps())
           .addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
           .addKeepRuleFiles(MAIN_KEEP)
+          .enableExperimentalKeepAnnotations()
           // TODO(b/176783536, b/270105162): Get a hold of dependencies in new gradle setup.
-          .applyIf(ToolHelper.isNewGradleSetup(), R8TestBuilder::allowUnusedDontWarnPatterns)
+          .apply(R8TestBuilder::allowUnusedDontWarnPatterns)
           .compile()
           .apply(c -> FileUtils.writeTextFile(map, c.getProguardMap()))
           .writeToZip(jar);
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/WhyAreYouKeepingAllTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/WhyAreYouKeepingAllTest.java
index f5155e6..514db55 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/WhyAreYouKeepingAllTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/WhyAreYouKeepingAllTest.java
@@ -12,7 +12,6 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.dex.Marker.Backend;
 import com.android.tools.r8.utils.StringUtils;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -55,7 +54,7 @@
         // results.
         .collectStdoutWithoutForwarding()
         // TODO(b/176783536, b/270105162): Get a hold of dependencies in new gradle setup.
-        .applyIf(ToolHelper.isNewGradleSetup(), R8TestBuilder::allowUnusedDontWarnPatterns)
+        .apply(R8TestBuilder::allowUnusedDontWarnPatterns)
         .compile()
         .assertStdoutThatMatches(containsString("referenced in keep rule"))
         // TODO(b/124655065): We should always know the reason for keeping.
diff --git a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java b/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
index e549627..a0821d2 100644
--- a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
+++ b/src/test/java/com/android/tools/r8/KotlinCompilerTool.java
@@ -365,9 +365,7 @@
       }
     }
     ProcessBuilder builder = new ProcessBuilder(commandLineAndHasherConsumers.cmdline);
-    if (ToolHelper.isNewGradleSetup()) {
-      builder.directory(new File(ToolHelper.getProjectRoot()));
-    }
+    builder.directory(new File(ToolHelper.getProjectRoot()));
     ProcessResult processResult = ToolHelper.runProcess(builder);
     if (CommandResultCache.isEnabled() && output.toFile().isFile()) {
       CommandResultCache.getInstance().putResult(processResult, cacheLookupKey, output);
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 6c31a91..efbc507 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8;
 
+import static com.android.tools.r8.TestCondition.compilers;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
@@ -13,7 +14,6 @@
 import com.android.tools.r8.ToolHelper.DexVm.Kind;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.errors.CompilationError;
-import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.ArtErrorParser;
@@ -170,14 +170,6 @@
           .put(
               "802-deoptimization",
               TestCondition.match(TestCondition.runtimesUpTo(DexVm.Version.V4_4_4)))
-          // TODO(b/144975341): Triage
-          .put(
-              "134-reg-promotion",
-              TestCondition.match(TestCondition.runtimes(DexVm.Version.V10_0_0)))
-          // TODO(b/197078742): Triage - test OOMs.
-          .put(
-              "134-reg-promotion",
-              TestCondition.match(TestCondition.runtimes(DexVm.Version.V12_0_0)))
           // TODO(b/197078746): Triage - fails with "java.lang.NoSuchMethodException:
           //  org.apache.harmony.dalvik.ddmc.DdmVmInternal.enableRecentAllocations [boolean]"
           .put(
@@ -638,6 +630,23 @@
           .put(
               "104-growth-limit",
               TestCondition.match(TestCondition.R8_COMPILER, TestCondition.RELEASE_MODE))
+          // Fails with OOM, seemingly due to GC not collecting unreachable array after writing
+          // null to static field.
+          .put(
+              "134-reg-promotion",
+              TestCondition.or(
+                  TestCondition.match(
+                      compilers(CompilerUnderTest.R8),
+                      TestCondition.runtimes(DexVm.Version.V10_0_0, DexVm.Version.V12_0_0)),
+                  TestCondition.match(
+                      compilers(CompilerUnderTest.D8_AFTER_R8CF, CompilerUnderTest.R8_AFTER_D8),
+                      TestCondition.runtimes(
+                          DexVm.Version.V4_0_4,
+                          DexVm.Version.V8_1_0,
+                          DexVm.Version.V9_0_0,
+                          DexVm.Version.V10_0_0,
+                          DexVm.Version.V12_0_0,
+                          DexVm.Version.DEFAULT))))
           .put(
               "461-get-reference-vreg",
               TestCondition.match(
@@ -835,8 +844,7 @@
               "201-built-in-except-detail-messages",
               TestCondition.or(
                   TestCondition.match(
-                      TestCondition.compilers(
-                          CompilerUnderTest.D8, CompilerUnderTest.D8_AFTER_R8CF),
+                      compilers(CompilerUnderTest.D8, CompilerUnderTest.D8_AFTER_R8CF),
                       TestCondition.runtimes(
                           DexVm.Version.V4_0_4,
                           DexVm.Version.V4_4_4,
@@ -846,15 +854,14 @@
                           DexVm.Version.V13_0_0,
                           DexVm.Version.V14_0_0)),
                   TestCondition.match(
-                      TestCondition.compilers(
+                      compilers(
                           CompilerUnderTest.R8,
                           CompilerUnderTest.R8CF,
                           CompilerUnderTest.R8_AFTER_D8))))
           // Class.forName() that fails due to verification error is removed.
           .put(
               "412-new-array",
-              TestCondition.match(
-                  TestCondition.compilers(CompilerUnderTest.R8, CompilerUnderTest.R8_AFTER_D8)))
+              TestCondition.match(compilers(CompilerUnderTest.R8, CompilerUnderTest.R8_AFTER_D8)))
           // Array index out of bounds exception.
           .put("449-checker-bce", TestCondition.any())
           // Fails: get_vreg_jni.cc:46] Check failed: value == 42u (value=314630384, 42u=42)
@@ -912,8 +919,7 @@
           // Class.forName() that fails due to linkage error is removed.
           .put(
               "587-inline-class-error",
-              TestCondition.match(
-                  TestCondition.compilers(CompilerUnderTest.R8, CompilerUnderTest.R8_AFTER_D8)))
+              TestCondition.match(compilers(CompilerUnderTest.R8, CompilerUnderTest.R8_AFTER_D8)))
           // Array index out of bounds exception.
           .put("602-deoptimizeable", TestCondition.any())
           // Array index out of bounds exception.
@@ -1525,7 +1531,7 @@
   }
 
   private static CompilationMode defaultCompilationMode(CompilerUnderTest compilerUnderTest) {
-    CompilationMode compilationMode = null;
+    CompilationMode compilationMode;
     switch (compilerUnderTest) {
       case R8:
       case R8CF:
@@ -1814,68 +1820,6 @@
     }
   }
 
-  private static boolean isAuxClassFile(String fileName, String auxClassFileBase) {
-    return fileName.endsWith(".class")
-        && (fileName.startsWith(auxClassFileBase + "$")
-        || fileName.startsWith(auxClassFileBase + "_"));
-  }
-
-
-  private static Runtime getRuntime(TestRuntime vm) {
-    if (vm.isCf()) {
-      return Runtime.JAVA;
-    } else if (vm.isDex()) {
-      return Runtime.fromDexVmVersion(vm.asDex().getVm().getVersion());
-    } else {
-      throw new Unreachable();
-    }
-  }
-
-  private static class VmSpec {
-    final TestRuntime vm;
-    final TestSpecification spec;
-
-    private VmSpec(TestRuntime vm, TestSpecification testSpecification) {
-      this.vm = vm;
-      this.spec = testSpecification;
-    }
-  }
-
-  private static class VmErrors {
-    private final Set<TestRuntime> failedVms = new HashSet<>();
-    private StringBuilder message;
-
-    private void addShouldHaveFailedError(CompilerUnderTest compilerUnderTest, TestRuntime vm) {
-      addFailure(vm);
-      message.append(
-          "FAILURE: Test should have failed on "
-              + vm
-              + " after compiling with "
-              + compilerUnderTest
-              + ".\n");
-    }
-
-    private void addFailedOnRunError(
-        CompilerUnderTest compilerUnderTest, TestRuntime vm, AssertionError error) {
-      addFailure(vm);
-      message.append(
-          "FAILURE: Test failed on "
-              + vm
-              + " after compiling with "
-              + compilerUnderTest
-              + ", error:\n"
-              + error.getMessage()
-              + "\n");
-    }
-
-    private void addFailure(TestRuntime vm) {
-      if (message == null) {
-        message = new StringBuilder();
-      }
-      failedVms.add(vm);
-    }
-  }
-
   protected void runArtTest(DexVm dexVm, CompilerUnderTest compilerUnderTest) throws Throwable {
     CompilerUnderTest firstCompilerUnderTest =
         compilerUnderTest == CompilerUnderTest.R8_AFTER_D8
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/java/com/android/tools/r8/R8TestBuilder.java
index d55e5c5..b24f608 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/R8TestBuilder.java
@@ -15,7 +15,6 @@
 import com.android.tools.r8.dexsplitter.SplitterTestBase.SplitRunner;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.experimental.graphinfo.GraphConsumer;
-import com.android.tools.r8.keepanno.KeepEdgeAnnotationsTest;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
 import com.android.tools.r8.profile.art.ArtProfileConsumer;
@@ -754,7 +753,7 @@
 
   public T enableExperimentalKeepAnnotations() {
     builder.addClasspathResourceProvider(
-        DirectoryClassFileProvider.fromDirectory(KeepEdgeAnnotationsTest.getKeepAnnoPath()));
+        DirectoryClassFileProvider.fromDirectory(ToolHelper.getKeepAnnoPath()));
     builder.setEnableExperimentalKeepAnnotations(true);
     return self();
   }
diff --git a/src/test/java/com/android/tools/r8/TestCondition.java b/src/test/java/com/android/tools/r8/TestCondition.java
index a23c980..aec73f4 100644
--- a/src/test/java/com/android/tools/r8/TestCondition.java
+++ b/src/test/java/com/android/tools/r8/TestCondition.java
@@ -7,7 +7,6 @@
 import com.android.tools.r8.R8RunArtTestsTest.DexTool;
 import com.android.tools.r8.ToolHelper.DexVm;
 import com.android.tools.r8.errors.Unreachable;
-import com.google.common.collect.Sets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.EnumSet;
@@ -67,10 +66,6 @@
           throw new Unreachable();
       }
     }
-
-    static boolean isArt(Runtime runtime) {
-      return EnumSet.range(LOWEST_ART_VERSION, HIGHEST_ART_VERSION).contains(runtime);
-    }
   }
 
   static class ToolSet {
@@ -93,7 +88,7 @@
 
   static class RuntimeSet {
 
-    private EnumSet<Runtime> set;
+    private final EnumSet<Runtime> set;
 
     public RuntimeSet(EnumSet<Runtime> set) {
       this.set = set;
@@ -137,8 +132,6 @@
           CompilerUnderTest.R8CF);
   public static final CompilerSet R8DEX_COMPILER =
       compilers(CompilerUnderTest.R8, CompilerUnderTest.R8_AFTER_D8);
-  public static final CompilerSet R8_NOT_AFTER_D8_COMPILER =
-      compilers(CompilerUnderTest.R8, CompilerUnderTest.D8_AFTER_R8CF, CompilerUnderTest.R8CF);
   public static final CompilerSet R8CF = compilers(CompilerUnderTest.R8CF);
 
   public static final CompilationModeSet DEBUG_MODE =
@@ -196,30 +189,6 @@
     return RuntimeSet.fromDexVmVersionSet(EnumSet.range(DexVm.Version.first(), upto));
   }
 
-  public static RuntimeSet artRuntimesUpTo(Runtime upto) {
-    assert Runtime.isArt(upto);
-    return new RuntimeSet(EnumSet.range(Runtime.LOWEST_ART_VERSION, upto));
-  }
-
-  public static RuntimeSet artRuntimesUpToAndJava(Runtime upto) {
-    return runtimes(
-        Sets.union(artRuntimesUpTo(upto).set, runtimes(Runtime.JAVA).set).toArray(new Runtime[0]));
-  }
-
-  public static RuntimeSet runtimesFrom(DexVm.Version start) {
-    return RuntimeSet.fromDexVmVersionSet(EnumSet.range(start, DexVm.Version.last()));
-  }
-
-  public static RuntimeSet artRuntimesFrom(Runtime start) {
-    assert Runtime.isArt(start);
-    return new RuntimeSet(EnumSet.range(start, Runtime.HIGHEST_ART_VERSION));
-  }
-
-  public static RuntimeSet artRuntimesFromAndJava(Runtime start) {
-    return runtimes(
-        Sets.union(artRuntimesFrom(start).set, runtimes(Runtime.JAVA).set).toArray(new Runtime[0]));
-  }
-
   public static RuntimeSet and(RuntimeSet... sets) {
     return new RuntimeSet(
         EnumSet.copyOf(
diff --git a/src/test/java/com/android/tools/r8/TestRuntime.java b/src/test/java/com/android/tools/r8/TestRuntime.java
index 77e4e22..76d8566 100644
--- a/src/test/java/com/android/tools/r8/TestRuntime.java
+++ b/src/test/java/com/android/tools/r8/TestRuntime.java
@@ -43,7 +43,7 @@
     JDK17("jdk17", 61),
     JDK18("jdk18", 62),
     JDK20("jdk20", 64),
-    ;
+    JDK21("jdk21", 65);
 
     /** This should generally be the latest checked in CF runtime we fully support. */
     private static final CfVm DEFAULT = JDK11;
@@ -97,12 +97,14 @@
       Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "openjdk-9.0.4");
   private static final Path JDK11_PATH = Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "jdk-11");
   private static final Path JDK17_PATH = Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "jdk-17");
+  private static final Path JDK21_PATH = Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "jdk-21");
   private static final Map<CfVm, Path> jdkPaths =
       ImmutableMap.of(
           CfVm.JDK8, JDK8_PATH,
           CfVm.JDK9, JDK9_PATH,
           CfVm.JDK11, JDK11_PATH,
-          CfVm.JDK17, JDK17_PATH);
+          CfVm.JDK17, JDK17_PATH,
+          CfVm.JDK21, JDK21_PATH);
 
   public static CfRuntime getCheckedInJdk(CfVm vm) {
     if (vm == CfVm.JDK8) {
@@ -151,10 +153,18 @@
     return new CfRuntime(CfVm.JDK17, getCheckedInJdkHome(CfVm.JDK17));
   }
 
+  public static CfRuntime getCheckedInJdk21() {
+    return new CfRuntime(CfVm.JDK21, getCheckedInJdkHome(CfVm.JDK21));
+  }
+
   public static List<CfRuntime> getCheckedInCfRuntimes() {
     CfRuntime[] jdks =
         new CfRuntime[] {
-          getCheckedInJdk8(), getCheckedInJdk9(), getCheckedInJdk11(), getCheckedInJdk17(),
+          getCheckedInJdk8(),
+          getCheckedInJdk9(),
+          getCheckedInJdk11(),
+          getCheckedInJdk17(),
+          getCheckedInJdk21()
         };
     Builder<CfRuntime> builder = ImmutableList.builder();
     for (CfRuntime jdk : jdks) {
@@ -209,6 +219,9 @@
     if (version.equals("11") || version.startsWith("11.")) {
       return new CfRuntime(CfVm.JDK11, Paths.get(home));
     }
+    if (version.equals("17") || version.startsWith("17.")) {
+      return new CfRuntime(CfVm.JDK17, Paths.get(home));
+    }
     throw new Unimplemented("No support for JDK version: " + version);
   }
 
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index f1f836b..c03fadc 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -99,10 +99,6 @@
 
 public class ToolHelper {
 
-  public static boolean isNewGradleSetup() {
-    return "true".equals(System.getProperty("USE_NEW_GRADLE_SETUP"));
-  }
-
   public static String getProjectRoot() {
     String current = System.getProperty("user.dir");
     if (!current.contains("d8_r8")) {
@@ -146,9 +142,7 @@
     }
 
     public static TestDataSourceSet computeLegacyOrGradleSpecifiedLocation() {
-      return isNewGradleSetup()
-          ? TestDataSourceSet.SPECIFIED_BY_GRADLE_PROPERTY
-          : TestDataSourceSet.LEGACY;
+      return TestDataSourceSet.SPECIFIED_BY_GRADLE_PROPERTY;
     }
   }
 
@@ -178,33 +172,23 @@
   public static final String SMALI_BUILD_DIR = THIRD_PARTY_DIR + "smali/";
 
   public static String getExamplesJava11BuildDir() {
-    // TODO(b/270105162): This changes when new gradle setup is default.
-    if (ToolHelper.isNewGradleSetup()) {
-      assert System.getProperty("EXAMPLES_JAVA_11_JAVAC_BUILD_DIR") != null;
-      return System.getProperty("EXAMPLES_JAVA_11_JAVAC_BUILD_DIR");
-    } else {
-      return BUILD_DIR + "classes/java/examplesJava11/";
-    }
+    assert System.getProperty("EXAMPLES_JAVA_11_JAVAC_BUILD_DIR") != null;
+    return System.getProperty("EXAMPLES_JAVA_11_JAVAC_BUILD_DIR");
   }
 
   public static Path getR8MainPath() {
-    // TODO(b/270105162): This changes when new gradle setup is default.
-    if (ToolHelper.isNewGradleSetup()) {
-      assert System.getProperty("R8_RUNTIME_PATH") != null;
-      return Paths.get(System.getProperty("R8_RUNTIME_PATH"));
-    } else {
-      return isTestingR8Lib() ? R8LIB_JAR : R8_JAR_OLD;
-    }
+    assert System.getProperty("R8_RUNTIME_PATH") != null;
+    return Paths.get(System.getProperty("R8_RUNTIME_PATH"));
   }
 
   public static Path getRetracePath() {
-    // TODO(b/270105162): This changes when new gradle setup is default.
-    if (ToolHelper.isNewGradleSetup()) {
-      assert System.getProperty("RETRACE_RUNTIME_PATH") != null;
-      return Paths.get(System.getProperty("RETRACE_RUNTIME_PATH"));
-    } else {
-      return isTestingR8Lib() ? ToolHelper.R8_RETRACE_JAR : ToolHelper.R8_JAR_OLD;
-    }
+    assert System.getProperty("RETRACE_RUNTIME_PATH") != null;
+    return Paths.get(System.getProperty("RETRACE_RUNTIME_PATH"));
+  }
+
+  public static Path getKeepAnnoPath() {
+    assert System.getProperty("KEEP_ANNO_JAVAC_BUILD_DIR") != null;
+    return Paths.get(System.getProperty("KEEP_ANNO_JAVAC_BUILD_DIR").split(File.pathSeparator)[0]);
   }
 
   public static final Path CHECKED_IN_R8_17_WITH_DEPS =
@@ -264,7 +248,6 @@
   public static final Path RETRACE_MAPS_DIR = Paths.get(THIRD_PARTY_DIR, "r8mappings");
 
   // TODO(b/270105162): These should be removed when finished transitioning.
-  public static final Path R8_JAR_OLD = Paths.get(LIBS_DIR, "r8.jar");
   public static final Path R8_WITH_RELOCATED_DEPS_17_JAR =
       Paths.get(LIBS_DIR, "r8_with_relocated_deps_17.jar");
   public static final Path R8LIB_JAR = Paths.get(LIBS_DIR, "r8lib.jar");
@@ -273,22 +256,15 @@
   public static final Path R8LIB_EXCLUDE_DEPS_JAR = Paths.get(LIBS_DIR, "r8lib-exclude-deps.jar");
   public static final Path R8LIB_EXCLUDE_DEPS_MAP =
       Paths.get(LIBS_DIR, "r8lib-exclude-deps.jar.map");
-  public static final Path R8_RETRACE_JAR = Paths.get(LIBS_DIR, "r8retrace.jar");
 
   public static Path getDeps() {
-    if (isNewGradleSetup()) {
-      return Paths.get(System.getProperty("R8_DEPS"));
-    } else {
-      return Paths.get(LIBS_DIR, "deps_all.jar");
-    }
+    assert System.getProperty("R8_DEPS") != null;
+    return Paths.get(System.getProperty("R8_DEPS"));
   }
 
   public static Path getR8WithRelocatedDeps() {
-    if (isNewGradleSetup()) {
-      return Paths.get(System.getProperty("R8_WITH_RELOCATED_DEPS"));
-    } else {
-      return Paths.get(LIBS_DIR, "r8_with_relocated_deps.jar");
-    }
+    assert System.getProperty("R8_WITH_RELOCATED_DEPS") != null;
+    return Paths.get(System.getProperty("R8_WITH_RELOCATED_DEPS"));
   }
 
   public static final String DESUGARED_LIB_RELEASES_DIR =
@@ -481,7 +457,7 @@
         return shortName;
       }
 
-      private String shortName;
+      private final String shortName;
     }
 
     public String toString() {
@@ -584,9 +560,7 @@
         result.add("/bin/bash");
       }
       result.add(getExecutable());
-      for (String option : options) {
-        result.add(option);
-      }
+      result.addAll(options);
       for (Map.Entry<String, String> entry : systemProperties.entrySet()) {
         StringBuilder builder = new StringBuilder("-D");
         builder.append(entry.getKey());
@@ -698,7 +672,7 @@
       }
     }
 
-    public ProcessResult getCachedResults() throws IOException {
+    public ProcessResult getCachedResults() {
       if (!useCache()) {
         return null;
       }
@@ -1171,17 +1145,6 @@
     return ""; //never here
   }
 
-  public static String toolsDir() {
-    String osName = System.getProperty("os.name");
-    if (osName.equals("Mac OS X")) {
-      return "mac";
-    } else if (osName.contains("Windows")) {
-      return "windows";
-    } else {
-      return "linux";
-    }
-  }
-
   public static String getProguard5Script() {
     if (isWindows()) {
       return PROGUARD + ".bat";
@@ -1775,10 +1738,6 @@
     return compatSink.build();
   }
 
-  public static void runL8(L8Command command) throws CompilationFailedException {
-    runL8(command, options -> {});
-  }
-
   public static void runL8(L8Command command, Consumer<InternalOptions> optionsModifier)
       throws CompilationFailedException {
     InternalOptions internalOptions = command.getInternalOptions();
@@ -1791,7 +1750,8 @@
         command.getR8Command());
   }
 
-  public static void addFilteredAndroidJar(BaseCommand.Builder builder, AndroidApiLevel apiLevel) {
+  public static void addFilteredAndroidJar(
+      BaseCommand.Builder<?, ?> builder, AndroidApiLevel apiLevel) {
     addFilteredAndroidJar(getAppBuilder(builder), apiLevel);
   }
 
@@ -2351,13 +2311,6 @@
     return result.stdout;
   }
 
-  public static String checkArtOutputIdentical(String file1, String file2, String mainClass,
-      DexVm version)
-      throws IOException {
-    return checkArtOutputIdentical(Collections.singletonList(file1),
-        Collections.singletonList(file2), mainClass, null, version);
-  }
-
   public static String checkArtOutputIdentical(List<String> files1, List<String> files2,
       String mainClass,
       Consumer<ArtCommandBuilder> extras,
@@ -2410,7 +2363,7 @@
   }
 
   // Checked in VMs for which dex2oat should work specified in decreasing order.
-  private static List<DexVm> SUPPORTED_DEX2OAT_VMS =
+  private static final List<DexVm> SUPPORTED_DEX2OAT_VMS =
       ImmutableList.of(DexVm.ART_12_0_0_HOST, DexVm.ART_6_0_1_HOST);
 
   public static ProcessResult runDex2OatRaw(Path file, Path outFile, DexVm targetVm)
@@ -2457,8 +2410,7 @@
     ProcessBuilder builder = new ProcessBuilder(command);
     builder.directory(getDexVmPath(vm).toFile());
     builder.environment().put("LD_LIBRARY_PATH", getDexVmLibPath(vm).toString());
-    ProcessResult processResult = runProcess(builder);
-    return processResult;
+    return runProcess(builder);
   }
 
   public static ProcessResult runProguardRaw(
@@ -2509,11 +2461,6 @@
     return runProguardRaw(getProguard5Script(), inJar, outJar, config, map);
   }
 
-  public static ProcessResult runProguardRaw(Path inJar, Path outJar, Path config, Path map)
-      throws IOException {
-    return runProguardRaw(getProguard5Script(), inJar, outJar, ImmutableList.of(config), map);
-  }
-
   public static String runProguard(Path inJar, Path outJar, Path config, Path map)
       throws IOException {
     return runProguard(inJar, outJar, ImmutableList.of(config), map);
@@ -2539,16 +2486,6 @@
     return runProguardRaw(getProguard6Script(), inJar, outJar, lib, ImmutableList.of(config), map);
   }
 
-  public static String runProguard6(Path inJar, Path outJar, Path config, Path map)
-      throws IOException {
-    return runProguard6(inJar, outJar, ImmutableList.of(config), map);
-  }
-
-  public static String runProguard6(Path inJar, Path outJar, List<Path> configs, Path map)
-      throws IOException {
-    return runProguard(getProguard6Script(), inJar, outJar, configs, map);
-  }
-
   public static ProcessResult runRetraceRaw(Path retracePath, Path map, Path stackTrace)
       throws IOException {
     List<String> command = new ArrayList<>();
diff --git a/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java b/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java
index 80457af..8a24f74 100644
--- a/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java
+++ b/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java
@@ -372,7 +372,6 @@
   }
 
   protected static void setUpSystemPropertiesForMain(TestDataSourceSet sourceSet) {
-    System.setProperty("USE_NEW_GRADLE_SETUP", "true");
     System.setProperty("TEST_DATA_LOCATION", sourceSet.getBuildDir().toString());
   }
 }
diff --git a/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTest.java b/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTest.java
index 9441ae2..33ff65c 100644
--- a/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTest.java
+++ b/src/test/java/com/android/tools/r8/compilerapi/CompilerApiTest.java
@@ -109,12 +109,8 @@
 
   public Path getPathForClass(Class<?> clazz) {
     String file = clazz.getName().replace('.', '/') + ".class";
-    if (System.getProperty("TEST_DATA_LOCATION") != null) {
-      return Paths.get(System.getProperty("TEST_DATA_LOCATION"), file);
-    } else {
-      assert System.getProperty("USE_NEW_GRADLE_SETUP") == null;
-      return Paths.get("build", "classes", "java", "test", file);
-    }
+    assert System.getProperty("TEST_DATA_LOCATION") != null;
+    return Paths.get(System.getProperty("TEST_DATA_LOCATION"), file);
   }
 
   public byte[] getBytesForClass(Class<?> clazz) throws IOException {
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/AbstractBackportTest.java b/src/test/java/com/android/tools/r8/desugar/backports/AbstractBackportTest.java
index b935de4..dbea395 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/AbstractBackportTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/AbstractBackportTest.java
@@ -12,12 +12,14 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
+import com.android.tools.r8.D8TestRunResult;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestBuilder;
 import com.android.tools.r8.TestDiagnosticMessages;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.errors.InterfaceDesugarMissingTypeDiagnostic;
 import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.ThrowingConsumer;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.InstructionSubject;
@@ -180,15 +182,20 @@
 
   @Test
   public void testD8() throws Exception {
+    testD8(D8TestRunResult::assertSuccess);
+  }
+
+  public void testD8(ThrowingConsumer<D8TestRunResult, RuntimeException> runResultConsumer)
+      throws Exception {
     parameters.assumeDexRuntime();
     testForD8()
         .setMinApi(parameters)
         .apply(this::configureProgram)
         .setIncludeClassesChecksum(true)
         .compileWithExpectedDiagnostics(this::checkDiagnostics)
+        .inspect(this::assertDesugaring)
         .run(parameters.getRuntime(), testClassName)
-        .assertSuccess()
-        .inspect(this::assertDesugaring);
+        .apply(runResultConsumer);
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/LongBackportJava9Test.java b/src/test/java/com/android/tools/r8/desugar/backports/LongBackportJava9Test.java
index 8ffb905..7404eed 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/LongBackportJava9Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/LongBackportJava9Test.java
@@ -5,13 +5,17 @@
 package com.android.tools.r8.desugar.backports;
 
 import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
+import static org.hamcrest.CoreMatchers.containsString;
 
+import com.android.tools.r8.SingleTestRunResult;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestRuntime.CfVm;
 import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
@@ -39,4 +43,16 @@
 
     registerTarget(AndroidApiLevel.T, 17);
   }
+
+  @Test
+  @Override
+  public void testD8() throws Exception {
+    testD8(
+        runResult ->
+            runResult.applyIf(
+                parameters.getDexRuntimeVersion().isEqualTo(Version.V6_0_1)
+                    && parameters.getApiLevel().isGreaterThan(AndroidApiLevel.B),
+                rr -> rr.assertFailureWithErrorThatMatches(containsString("SIGSEGV")),
+                SingleTestRunResult::assertSuccess));
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/PartialDesugaringTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/PartialDesugaringTest.java
index 74ac232..7d29fa4 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/PartialDesugaringTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/PartialDesugaringTest.java
@@ -217,10 +217,14 @@
         && api.isLessThan(AndroidApiLevel.T)) {
       expectedFailures.addAll(FAILURES_FILE_STORE);
     }
-    if (librarySpecification != JDK11_MINIMAL
-        && api.isGreaterThanOrEqualTo(AndroidApiLevel.N)
-        && api.isLessThan(AndroidApiLevel.T)) {
-      expectedFailures.addAll(FAILURES_TO_ARRAY);
+    if (librarySpecification != JDK11_MINIMAL && api.isLessThan(AndroidApiLevel.T)) {
+      if (librarySpecification == JDK8) {
+        if (api.isGreaterThanOrEqualTo(AndroidApiLevel.N)) {
+          expectedFailures.addAll(FAILURES_TO_ARRAY);
+        }
+      } else {
+        expectedFailures.addAll(FAILURES_TO_ARRAY);
+      }
     }
     if (jdk11NonMinimal
         && api.isGreaterThanOrEqualTo(AndroidApiLevel.O)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/specification/ConvertExportReadTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/specification/ConvertExportReadTest.java
index 53ffbd1..e2c0f74 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/specification/ConvertExportReadTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/specification/ConvertExportReadTest.java
@@ -292,9 +292,6 @@
 
     assertEquals(humanRewritingFlags1.getDontRetarget(), humanRewritingFlags2.getDontRetarget());
     assertEquals(
-        humanRewritingFlags1.getDontRewriteInvocation(),
-        humanRewritingFlags2.getDontRewriteInvocation());
-    assertEquals(
         humanRewritingFlags1.getWrapperConversions(), humanRewritingFlags2.getWrapperConversions());
 
     assertEquals(
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
index cdc0788..cb2370b 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
@@ -4,6 +4,7 @@
 
 package com.android.tools.r8.desugar.desugaredlibrary.test;
 
+import com.android.tools.r8.ClassFileResourceProvider;
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.D8TestBuilder;
@@ -58,7 +59,7 @@
   private String l8ExtraKeepRules = "";
   private Consumer<InternalOptions> l8OptionModifier = ConsumerUtils.emptyConsumer();
   private boolean l8FinalPrefixVerification = true;
-  private boolean overrideDefaultLibraryFiles = false;
+  private boolean overrideDefaultLibrary = false;
   private CustomLibrarySpecification customLibrarySpecification = null;
   private TestingKeepRuleConsumer keepRuleConsumer = null;
   private List<ExternalArtProfile> l8ResidualArtProfiles = new ArrayList<>();
@@ -163,11 +164,18 @@
    * library files.
    */
   public DesugaredLibraryTestBuilder<T> overrideLibraryFiles(Path... files) {
-    overrideDefaultLibraryFiles = true;
+    overrideDefaultLibrary = true;
     builder.addLibraryFiles(files);
     return this;
   }
 
+  public DesugaredLibraryTestBuilder<T> overrideLibraryProvider(
+      ClassFileResourceProvider provider) {
+    overrideDefaultLibrary = true;
+    builder.addLibraryProvider(provider);
+    return this;
+  }
+
   public DesugaredLibraryTestBuilder<T> addProgramFiles(Collection<Path> files) {
     builder.addProgramFiles(files);
     return this;
@@ -373,7 +381,7 @@
   }
 
   private void prepareCompilation() {
-    if (overrideDefaultLibraryFiles) {
+    if (overrideDefaultLibrary) {
       return;
     }
     builder.addLibraryFiles(libraryDesugaringSpecification.getLibraryFiles());
diff --git a/src/test/java/com/android/tools/r8/dex/TryCatchRangeOverflowTest.java b/src/test/java/com/android/tools/r8/dex/TryCatchRangeOverflowTest.java
index e9caf80..6e9d85c 100644
--- a/src/test/java/com/android/tools/r8/dex/TryCatchRangeOverflowTest.java
+++ b/src/test/java/com/android/tools/r8/dex/TryCatchRangeOverflowTest.java
@@ -20,28 +20,28 @@
 import com.android.tools.r8.ir.code.InstructionListIterator;
 import com.android.tools.r8.ir.code.NumericType;
 import com.android.tools.r8.ir.code.Value;
+import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import java.util.Arrays;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
 
 // Regression test for b/297320921
 @RunWith(Parameterized.class)
 public class TryCatchRangeOverflowTest extends TestBase {
 
-  private final TestParameters parameters;
+  @Parameter(0)
+  public TestParameters parameters;
 
-  @Parameterized.Parameters(name = "{0}")
+  @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters().withDefaultDexRuntime().withMinimumApiLevel().build();
   }
 
-  public TryCatchRangeOverflowTest(TestParameters parameters) {
-    this.parameters = parameters;
-  }
-
   // Each add/2addr instruction has size 1, so we add have as many instruction minus some padding
   // to make room for the instructions before and after but still in the same block.
   // Notice that this value may change if the generated code by the compiler changes. It must then
@@ -80,7 +80,10 @@
       compile(addCount)
           .run(parameters.getRuntime(), TestClass.class)
           .assertSuccessWithOutputLines("" + addCount)
-          .inspect(inspector -> checkTryCatchHandlers(2, inspector));
+          .inspect(
+              inspector ->
+                  checkTryCatchHandlers(
+                      1 + BooleanUtils.intValue(addCount > UNSPLIT_LIMIT + 1), inspector));
     }
   }
 
@@ -112,16 +115,17 @@
     compile(addCount)
         .run(parameters.getRuntime(), TestClass.class)
         .assertSuccessWithOutputLines("" + addCount)
-        .inspect(inspector -> checkTryCatchHandlers(3, inspector));
+        .inspect(inspector -> checkTryCatchHandlers(2, inspector));
   }
 
-  private D8TestBuilder compile(int addCount) throws Exception {
+  private D8TestBuilder compile(int addCount) {
     return testForD8(Backend.DEX)
         .addProgramClasses(TestClass.class)
         .addOptionsModification(
             o ->
                 o.testing.irModifier =
                     (code, appView) -> amendCodeWithAddInstructions(addCount, code))
+        .debug()
         .setMinApi(parameters);
   }
 
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/IdempotentFunctionCallCanonicalizationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/IdempotentFunctionCallCanonicalizationTest.java
index 8fa15d0..da15c99 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/IdempotentFunctionCallCanonicalizationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/IdempotentFunctionCallCanonicalizationTest.java
@@ -198,8 +198,8 @@
 
     D8TestRunResult result =
         testForD8()
-            .debug()
             .addProgramClasses(MAIN)
+            .release()
             .setMinApi(parameters)
             .run(parameters.getRuntime(), MAIN)
             .assertSuccessWithOutput(JAVA_OUTPUT);
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepEdgeAnnotationsTest.java b/src/test/java/com/android/tools/r8/keepanno/KeepEdgeAnnotationsTest.java
index 5c22e9f..fd8154f 100644
--- a/src/test/java/com/android/tools/r8/keepanno/KeepEdgeAnnotationsTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/KeepEdgeAnnotationsTest.java
@@ -34,7 +34,6 @@
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.google.common.collect.ImmutableList;
-import java.io.File;
 import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -68,16 +67,6 @@
     }
   }
 
-  public static Path getKeepAnnoPath() {
-    // TODO(b/270105162): This changes when new gradle setup is default.
-    if (ToolHelper.isNewGradleSetup()) {
-      return Paths.get(
-          System.getProperty("KEEP_ANNO_JAVAC_BUILD_DIR").split(File.pathSeparator)[0]);
-    } else {
-      return Paths.get(ToolHelper.BUILD_DIR, "classes", "java", "keepanno");
-    }
-  }
-
   private static List<Class<?>> getTestClasses() {
     return ImmutableList.of(
         KeepClassAndDefaultConstructorSource.class,
@@ -112,7 +101,7 @@
     Path out =
         JavaCompilerTool.create(parameters.getRuntime().asCf(), temp)
             .addAnnotationProcessors(typeName(KeepEdgeProcessor.class))
-            .addClasspathFiles(getKeepAnnoPath())
+            .addClasspathFiles(ToolHelper.getKeepAnnoPath())
             .addClassNames(Collections.singletonList(typeName(source)))
             .addClasspathFiles(Paths.get(ToolHelper.BUILD_DIR, "classes", "java", "test"))
             .addClasspathFiles(ToolHelper.getR8WithRelocatedDeps())
@@ -137,7 +126,7 @@
         JavaCompilerTool.create(parameters.getRuntime().asCf(), temp)
             .addSourceFiles(ToolHelper.getSourceFileForTestClass(source))
             .addAnnotationProcessors(typeName(KeepEdgeProcessor.class))
-            .addClasspathFiles(getKeepAnnoPath())
+            .addClasspathFiles(ToolHelper.getKeepAnnoPath())
             .addClasspathFiles(ToolHelper.getDeps())
             .compile();
     testForJvm(parameters)
diff --git a/src/test/java/com/android/tools/r8/keepanno/ast/KeepEdgeAstTest.java b/src/test/java/com/android/tools/r8/keepanno/ast/KeepEdgeAstTest.java
index 64f9378..602ee63 100644
--- a/src/test/java/com/android/tools/r8/keepanno/ast/KeepEdgeAstTest.java
+++ b/src/test/java/com/android/tools/r8/keepanno/ast/KeepEdgeAstTest.java
@@ -45,22 +45,34 @@
         KeepEdge.builder()
             .setConsequences(
                 KeepConsequences.builder()
-                    .addTarget(KeepTarget.builder().setItemPattern(KeepItemPattern.any()).build())
+                    .addTarget(
+                        KeepTarget.builder().setItemPattern(KeepItemPattern.anyClass()).build())
+                    .addTarget(
+                        KeepTarget.builder().setItemPattern(KeepItemPattern.anyMember()).build())
                     .build())
             .build();
-    assertEquals(StringUtils.unixLines("-keep class * { *; }"), extract(edge));
+    assertEquals(
+        StringUtils.unixLines(
+            "-keep class * { void finalize(); }", "-keepclassmembers class * { *; }"),
+        extract(edge));
   }
 
   @Test
   public void testSoftPinViaDisallow() {
+    KeepOptions disallowOptions = KeepOptions.disallow(KeepOption.OPTIMIZING);
     KeepEdge edge =
         KeepEdge.builder()
             .setConsequences(
                 KeepConsequences.builder()
                     .addTarget(
                         KeepTarget.builder()
-                            .setItemPattern(KeepItemPattern.any())
-                            .setOptions(KeepOptions.disallow(KeepOption.OPTIMIZING))
+                            .setItemPattern(KeepItemPattern.anyClass())
+                            .setOptions(disallowOptions)
+                            .build())
+                    .addTarget(
+                        KeepTarget.builder()
+                            .setItemPattern(KeepItemPattern.anyMember())
+                            .setOptions(disallowOptions)
                             .build())
                     .build())
             .build();
@@ -70,26 +82,37 @@
     String allows = String.join(",allow", options);
     // The "any" item will be split in two rules, one for the targeted types and one for the
     // targeted members.
-    assertEquals(StringUtils.unixLines("-keep,allow" + allows + " class * { *; }"), extract(edge));
+    assertEquals(
+        StringUtils.unixLines(
+            "-keep,allow" + allows + " class * { void finalize(); }",
+            "-keepclassmembers,allow" + allows + " class * { *; }"),
+        extract(edge));
   }
 
   @Test
   public void testSoftPinViaAllow() {
+    KeepOptions allowOptions = KeepOptions.allow(KeepOption.OBFUSCATING, KeepOption.SHRINKING);
     KeepEdge edge =
         KeepEdge.builder()
             .setConsequences(
                 KeepConsequences.builder()
                     .addTarget(
                         KeepTarget.builder()
-                            .setItemPattern(KeepItemPattern.any())
-                            .setOptions(
-                                KeepOptions.allow(KeepOption.OBFUSCATING, KeepOption.SHRINKING))
+                            .setItemPattern(KeepItemPattern.anyClass())
+                            .setOptions(allowOptions)
+                            .build())
+                    .addTarget(
+                        KeepTarget.builder()
+                            .setItemPattern(KeepItemPattern.anyMember())
+                            .setOptions(allowOptions)
                             .build())
                     .build())
             .build();
     // Allow is just the ordered list of options.
     assertEquals(
-        StringUtils.unixLines("-keep,allowshrinking,allowobfuscation class * { *; }"),
+        StringUtils.unixLines(
+            "-keep,allowshrinking,allowobfuscation class * { void finalize(); }",
+            "-keepclassmembers,allowshrinking,allowobfuscation class * { *; }"),
         extract(edge));
   }
 
diff --git a/src/test/java/com/android/tools/r8/regress/b115552239/B115552239.java b/src/test/java/com/android/tools/r8/regress/b115552239/B115552239.java
index 5cffb1a..cabd159 100644
--- a/src/test/java/com/android/tools/r8/regress/b115552239/B115552239.java
+++ b/src/test/java/com/android/tools/r8/regress/b115552239/B115552239.java
@@ -10,7 +10,11 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.D8Command;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.dex.code.DexCmpgFloat;
 import com.android.tools.r8.dex.code.DexIfGez;
@@ -26,6 +30,9 @@
 import java.util.Arrays;
 import java.util.concurrent.ExecutionException;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
 class TestClass {
   public float f(float d) {
@@ -36,7 +43,17 @@
   }
 }
 
-public class B115552239 {
+@RunWith(Parameterized.class)
+public class B115552239 extends TestBase {
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withNoneRuntime().build();
+  }
+
+  public B115552239(TestParameters parameters) {
+    parameters.assertNoneRuntime();
+  }
 
   private MethodSubject compileTestClassAndGetMethod(int apiLevel)
       throws IOException, CompilationFailedException {
@@ -44,7 +61,8 @@
         ToolHelper.runD8(
             D8Command.builder()
                 .addClassProgramData(ToolHelper.getClassAsBytes(TestClass.class), Origin.unknown())
-                .setMinApiLevel(apiLevel));
+                .setMinApiLevel(apiLevel)
+                .setMode(CompilationMode.RELEASE));
     CodeInspector inspector = new CodeInspector(app);
     ClassSubject clazz = inspector.clazz(TestClass.class);
     assertThat(clazz, isPresent());
@@ -72,8 +90,7 @@
   }
 
   @Test
-  public void lowering()
-      throws IOException, CompilationFailedException, ExecutionException {
+  public void lowering() throws IOException, CompilationFailedException {
     MethodSubject method = compileTestClassAndGetMethod(AndroidApiLevel.M.getLevel());
     boolean previousWasCmp = false;
     DexInstruction[] instructions = method.getMethod().getCode().asDexCode().instructions;
diff --git a/src/test/java/com/android/tools/r8/utils/NumberOfThreadsTest.java b/src/test/java/com/android/tools/r8/utils/NumberOfThreadsTest.java
deleted file mode 100644
index 4613f76..0000000
--- a/src/test/java/com/android/tools/r8/utils/NumberOfThreadsTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2017, 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.
-package com.android.tools.r8.utils;
-
-import org.junit.Test;
-
-public class NumberOfThreadsTest {
-
-  @Test(expected = IllegalArgumentException.class)
-  public void zeroProcessorTest() {
-    ThreadUtils.getExecutorServiceForProcessors(0).shutdown();
-  }
-
-  @Test
-  public void singleProcessorTest() {
-    ThreadUtils.getExecutorServiceForProcessors(1).shutdown();
-  }
-
-  @Test
-  public void twoProcessorsTest() {
-    ThreadUtils.getExecutorServiceForProcessors(2).shutdown();
-  }
-
-}
diff --git a/src/test/java/com/android/tools/r8/utils/Smali.java b/src/test/java/com/android/tools/r8/utils/Smali.java
index ade911f..29c6b92 100644
--- a/src/test/java/com/android/tools/r8/utils/Smali.java
+++ b/src/test/java/com/android/tools/r8/utils/Smali.java
@@ -108,7 +108,7 @@
     InternalOptions options = new InternalOptions();
     options.setMinApiLevel(AndroidApiLevel.getAndroidApiLevel(apiLevel));
     options.programConsumer = consumer;
-    ExecutorService executor = ThreadUtils.getExecutorService(1);
+    ExecutorService executor = options.getThreadingModule().createThreadedExecutorService(1);
     try {
       DexApplication dexApp = new ApplicationReader(app, options, Timing.empty()).read(executor);
       ApplicationWriter writer =
diff --git a/third_party/binary_compatibility_tests/compiler_api_tests.tar.gz.sha1 b/third_party/binary_compatibility_tests/compiler_api_tests.tar.gz.sha1
index 1f5ebb0..009f4e4 100644
--- a/third_party/binary_compatibility_tests/compiler_api_tests.tar.gz.sha1
+++ b/third_party/binary_compatibility_tests/compiler_api_tests.tar.gz.sha1
@@ -1 +1 @@
-28372bad4c1dc0bd9f0615d14def4dd687c3e6c6
\ No newline at end of file
+9de592304071fa794e07e9e8d955aa4ae62cdef1
\ No newline at end of file
diff --git a/tools/archive.py b/tools/archive.py
index eb4ab98..fd250dd 100755
--- a/tools/archive.py
+++ b/tools/archive.py
@@ -175,7 +175,6 @@
                 utils.GRADLE_TASK_R8LIB, utils.GRADLE_TASK_R8LIB_NO_DEPS,
                 utils.GRADLE_TASK_THREADING_MODULE_BLOCKING,
                 utils.GRADLE_TASK_THREADING_MODULE_SINGLE_THREADED,
-                utils.GRADLE_TASK_RETRACE, utils.GRADLE_TASK_RETRACE_NO_DEPS,
                 utils.GRADLE_TASK_SOURCE_JAR,
                 utils.GRADLE_TASK_SWISS_ARMY_KNIFE, '-Pno_internal'
             ])
@@ -243,10 +242,6 @@
             utils.DESUGAR_CONFIGURATION_JDK11_MINIMAL_MAVEN_ZIP,
             utils.DESUGAR_CONFIGURATION_JDK11_MAVEN_ZIP,
             utils.DESUGAR_CONFIGURATION_JDK11_NIO_MAVEN_ZIP, utils.R8_SRC_JAR,
-            utils.R8RETRACE_JAR, utils.R8RETRACE_JAR + '.map',
-            utils.R8RETRACE_JAR + '_map.zip', utils.R8RETRACE_EXCLUDE_DEPS_JAR,
-            utils.R8RETRACE_EXCLUDE_DEPS_JAR + '.map',
-            utils.R8RETRACE_EXCLUDE_DEPS_JAR + '_map.zip',
             utils.KEEPANNO_ANNOTATIONS_JAR,
             utils.GENERATED_LICENSE,
             'd8_r8/main/build/spdx/r8.spdx.json'
diff --git a/tools/create_r8lib.py b/tools/create_r8lib.py
index 93bfcbd..e8bf4f2 100755
--- a/tools/create_r8lib.py
+++ b/tools/create_r8lib.py
@@ -94,6 +94,7 @@
         cmd.extend([
             '-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005'
         ])
+    cmd.append('-Dcom.android.tools.r8.enableKeepAnnotations=1')
     cmd.extend(['-cp', args.r8compiler, 'com.android.tools.r8.R8'])
     cmd.append(args.r8jar)
     if args.debug_variant:
diff --git a/tools/r8_get.py b/tools/r8_get.py
index 44cc9f1..4dfc924 100755
--- a/tools/r8_get.py
+++ b/tools/r8_get.py
@@ -21,13 +21,18 @@
         '--outdir',
         help='Output directory to place the r8.jar in (default cwd).',
         default=None)
+    parser.add_argument(
+        '--nolib',
+        help='Use the non-lib distribution (default uses the lib distribution)',
+        default=False,
+        action='store_true')
     return parser.parse_args()
 
 
 def main():
     args = parse_arguments()
     outdir = args.outdir if args.outdir else ''
-    print(compiledump.download_distribution(args.version, True, outdir))
+    print(compiledump.download_distribution(args.version, args, outdir))
     return 0
 
 
diff --git a/tools/r8_release.py b/tools/r8_release.py
index f55181e..a5d7a4c 100755
--- a/tools/r8_release.py
+++ b/tools/r8_release.py
@@ -99,10 +99,6 @@
                       'is the same as exiting release (%s).' % old_version)
                     sys.exit(1)
 
-                subprocess.check_call(
-                    ['git', 'cl', 'new-branch',
-                     'release-%s' % version])
-
                 if args.dev_pre_cherry_pick:
                     for pre_commit in args.dev_pre_cherry_pick:
                         subprocess.check_call(
@@ -316,6 +312,13 @@
     assert args.version
     assert os.path.exists(args.studio), ("Could not find STUDIO path %s" %
                                          args.studio)
+    if (not args.studio.endswith('-dev')
+        and not args.studio.endswith('-dev/')
+        and not args.studio_legacy_release):
+        print("Please use the new release process, see go/r8-release-prebuilts. "
+            + "If for some reason the legacy release process is needed "
+            + "pass --studio-legacy-release")
+        sys.exit(1)
 
     def release_studio(options):
         print("Releasing for STUDIO")
@@ -421,9 +424,6 @@
             g4_open('src.jar')
             g4_open('lib.jar')
             g4_open('lib.jar.map')
-            g4_open('retrace_full.jar')
-            g4_open('retrace_lib.jar')
-            g4_open('retrace_lib.jar.map')
             g4_open('desugar_jdk_libs_configuration.jar')
             g4_open('threading-module-blocking.jar')
             g4_open('threading-module-single-threaded.jar')
@@ -431,9 +431,6 @@
                           'r8-full-exclude-deps.jar',
                           'full.jar')
             download_file(options.version,
-                          'r8-full-exclude-deps.jar',
-                          'retrace_full.jar')
-            download_file(options.version,
                           'r8-src.jar',
                           'src.jar')
             download_file(options.version,
@@ -446,12 +443,6 @@
                           'desugar_jdk_libs_configuration.jar',
                           'desugar_jdk_libs_configuration.jar')
             download_file(options.version,
-                          'r8retrace-exclude-deps.jar',
-                          'retrace_lib.jar')
-            download_file(options.version,
-                          'r8retrace-exclude-deps.jar.map',
-                          'retrace_lib.jar.map')
-            download_file(options.version,
                           'threading-module-blocking.jar',
                           'threading-module-blocking.jar')
             download_file(options.version,
@@ -461,7 +452,7 @@
                 g4_open('METADATA')
                 metadata_path = os.path.join(third_party_r8, 'METADATA')
                 match_count = 0
-                match_count_expected = 12
+                match_count_expected = 11
                 version_match_regexp = r'[1-9]\.[0-9]{1,2}\.[0-9]{1,3}-dev'
                 for line in open(metadata_path, 'r'):
                     result = re.search(version_match_regexp, line)
@@ -502,74 +493,6 @@
     return release_google3
 
 
-def prepare_google3_retrace(args):
-    assert args.version
-    # Check if an existing client exists.
-    if not args.use_existing_work_branch:
-        check_no_google3_client(args, args.p4_client)
-
-    def release_google3_retrace(options):
-        print("Releasing Retrace for Google 3")
-        if options.dry_run:
-            return 'DryRun: omitting g3 release for %s' % options.version
-
-        google3_base = subprocess.check_output(
-            ['p4', 'g4d', '-f', args.p4_client]).decode('utf-8').rstrip()
-        third_party_r8 = os.path.join(google3_base, 'third_party', 'java', 'r8')
-        with utils.ChangedWorkingDirectory(third_party_r8):
-            # download files
-            g4_open('retrace_full.jar')
-            g4_open('retrace_lib.jar')
-            g4_open('retrace_lib.jar.map')
-            download_file(options.version, 'r8-full-exclude-deps.jar',
-                          'retrace_full.jar')
-            download_file(options.version, 'r8retrace-exclude-deps.jar',
-                          'retrace_lib.jar')
-            download_file(options.version, 'r8lib-exclude-deps.jar.map',
-                          'retrace_lib.jar.map')
-            g4_open('METADATA')
-            metadata_path = os.path.join(third_party_r8, 'METADATA')
-            match_count = 0
-            version_match_regexp = r'[1-9]\.[0-9]{1,2}\.[0-9]{1,3}-dev/r8retrace-exclude-deps.jar'
-            for line in open(metadata_path, 'r'):
-                result = re.search(version_match_regexp, line)
-                if result:
-                    match_count = match_count + 1
-            if match_count != 1:
-                print((
-                    "Could not find the previous retrace release string to replace in "
-                    +
-                    "METADATA. Expected to find is mentioned 1 times. Please update %s "
-                    + "manually and run again with options --google3retrace " +
-                    "--use-existing-work-branch.") % metadata_path)
-                sys.exit(1)
-            sed(version_match_regexp,
-                options.version + "/r8retrace-exclude-deps.jar", metadata_path)
-            subprocess.check_output('chmod u+w *', shell=True)
-
-        with utils.ChangedWorkingDirectory(google3_base):
-            blaze_result = blaze_run(
-                '//third_party/java/r8:retrace -- --version')
-
-            print(blaze_result)
-            assert options.version in blaze_result
-
-            if not options.no_upload:
-                change_result = g4_change(options.version)
-                change_result += 'Run \'(g4d ' + args.p4_client \
-                                 + ' && tap_presubmit -p all --train -c ' \
-                                 + get_cl_id(change_result) + ')\' for running TAP global' \
-                                 + ' presubmit using the train.\n' \
-                                 + 'Run \'(g4d ' + args.p4_client \
-                                 + ' && tap_presubmit -p all --notrain --detach --email' \
-                                 + ' --skip_flaky_targets --skip_already_failing -c ' \
-                                 + get_cl_id(change_result) + ')\' for running an isolated' \
-                                 + ' TAP global presubmit.'
-                return change_result
-
-    return release_google3_retrace
-
-
 def update_desugar_library_in_studio(args):
     assert os.path.exists(args.studio), ("Could not find STUDIO path %s" %
                                          args.studio)
@@ -1040,6 +963,10 @@
         metavar=('<path>'),
         help='Release for studio by setting the path to a studio '
         'checkout')
+    result.add_argument('--studio-legacy-release',
+                        default=False,
+                        action='store_true',
+                        help='Allow Studio release using the legacy process')
     result.add_argument('--aosp',
                         metavar=('<path>'),
                         help='Release for aosp by setting the path to the '
@@ -1052,10 +979,6 @@
                         default=False,
                         action='store_true',
                         help='Release for google 3')
-    result.add_argument('--google3retrace',
-                        default=False,
-                        action='store_true',
-                        help='Release retrace for google 3')
     result.add_argument('--p4-client',
                         default='update-r8',
                         metavar=('<client name>'),
@@ -1130,8 +1053,6 @@
 
     if args.google3:
         targets_to_run.append(prepare_google3(args))
-    if args.google3retrace:
-        targets_to_run.append(prepare_google3_retrace(args))
     if args.studio and not args.update_desugar_library_in_studio:
         targets_to_run.append(prepare_studio(args))
     if args.aosp:
diff --git a/tools/retrace.py b/tools/retrace.py
index 6642224..911c646 100755
--- a/tools/retrace.py
+++ b/tools/retrace.py
@@ -188,7 +188,7 @@
         )
 
     if not r8jar:
-        r8jar = utils.R8_JAR if no_r8lib else utils.R8RETRACE_JAR
+        r8jar = utils.R8_JAR if no_r8lib else utils.R8LIB
 
     retrace_args += [
         '-cp', r8jar, 'com.android.tools.r8.retrace.Retrace', map_path
diff --git a/tools/run_benchmark.py b/tools/run_benchmark.py
index f98c8b7..7e0c692 100755
--- a/tools/run_benchmark.py
+++ b/tools/run_benchmark.py
@@ -132,7 +132,6 @@
         cmd.append('-Dcom.android.tools.r8.printtimes=1')
     if not options.golem:
         cmd.extend([
-            '-DUSE_NEW_GRADLE_SETUP=true',
             f'-DTEST_DATA_LOCATION={utils.REPO_ROOT}/d8_r8/test_modules/tests_java_8/build/classes/java/test'
         ])
     cmd.extend(['-cp', ':'.join([r8jar] + testjars)])
diff --git a/tools/run_on_app_dump.py b/tools/run_on_app_dump.py
index 902c675..c06e878 100755
--- a/tools/run_on_app_dump.py
+++ b/tools/run_on_app_dump.py
@@ -23,7 +23,7 @@
 import update_prebuilds_in_android
 import utils
 
-GOLEM_BUILD_TARGETS = [utils.GRADLE_TASK_R8LIB, utils.GRADLE_TASK_RETRACE]
+GOLEM_BUILD_TARGETS = [utils.GRADLE_TASK_R8LIB]
 SHRINKERS = ['r8', 'r8-full', 'r8-nolib', 'r8-nolib-full']
 
 
@@ -1287,7 +1287,7 @@
         elif options.version == 'main':
             if not options.no_build:
                 gradle.RunGradle([
-                    utils.GRADLE_TASK_RETRACE, utils.GRADLE_TASK_R8,
+                    utils.GRADLE_TASK_R8,
                     '-Pno_internal'
                 ])
                 build_r8lib = False
diff --git a/tools/utils.py b/tools/utils.py
index 4b84f58..597f8b1 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -48,8 +48,6 @@
 GRADLE_TASK_R8LIB_NO_DEPS = ':test:assembleR8LibNoDeps'
 GRADLE_TASK_THREADING_MODULE_BLOCKING = ':main:threadingModuleBlockingJar'
 GRADLE_TASK_THREADING_MODULE_SINGLE_THREADED = ':main:threadingModuleSingleThreadedJar'
-GRADLE_TASK_RETRACE = ':test:assembleRetraceLibWithRelocatedDeps'
-GRADLE_TASK_RETRACE_NO_DEPS = ':test:assembleRetraceLibNoDeps'
 GRADLE_TASK_SOURCE_JAR = ':test:packageSources'
 GRADLE_TASK_SWISS_ARMY_KNIFE = ':main:swissArmyKnife'
 GRADLE_TASK_TEST = ':test:test'
@@ -69,8 +67,6 @@
 R8_FULL_EXCLUDE_DEPS_JAR = os.path.join(LIBS, 'r8-full-exclude-deps.jar')
 THREADING_MODULE_BLOCKING_JAR = os.path.join(LIBS, 'threading-module-blocking.jar')
 THREADING_MODULE_SINGLE_THREADED_JAR = os.path.join(LIBS, 'threading-module-single-threaded.jar')
-R8RETRACE_JAR = os.path.join(LIBS, 'r8retrace.jar')
-R8RETRACE_EXCLUDE_DEPS_JAR = os.path.join(LIBS, 'r8retrace-exclude-deps.jar')
 R8_TESTS_JAR = os.path.join(LIBS, 'r8tests.jar')
 R8LIB_TESTS_JAR = os.path.join(LIBS, 'r8libtestdeps-cf.jar')
 R8_TESTS_DEPS_JAR = os.path.join(LIBS, 'test_deps_all.jar')
@@ -678,13 +674,13 @@
                             configuration)
         if (configuration_format_version != 3 and
                 configuration_format_version != 5 and
-                configuration_format_version != (200 if is_for_maven else 100)):
+                configuration_format_version != (200 if is_for_maven else 101)):
             raise Exception(
                 'Unsupported "configuration_format_version" "%s" found in %s' %
                 (configuration_format_version, configuration))
         version = configuration_json.get('version')
         if not version:
-            if configuration_format_version == (200 if is_for_maven else 100):
+            if configuration_format_version == (200 if is_for_maven else 101):
                 identifier = configuration_json.get('identifier')
                 if not identifier:
                     raise Exception('No "identifier" found in ' + configuration)
@@ -704,7 +700,7 @@
             else:
                 raise Exception('No "version" found in ' + configuration)
         else:
-            if configuration_format_version == (200 if is_for_maven else 100):
+            if configuration_format_version == (200 if is_for_maven else 101):
                 raise Exception('No "version" expected in ' + configuration)
         # Disallow prerelease, as older R8 versions cannot parse it causing hard to
         # understand errors.
