Enable new missing class reporting in tests

Bug: 154849103
Fixes: 70293332
Change-Id: Ie8071f9ff2c60f9871fa054a6f33ed74577221be
diff --git a/src/main/java/com/android/tools/r8/graph/DexApplication.java b/src/main/java/com/android/tools/r8/graph/DexApplication.java
index af6d9f6..37b8d28 100644
--- a/src/main/java/com/android/tools/r8/graph/DexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DexApplication.java
@@ -107,13 +107,16 @@
   }
 
   public List<DexProgramClass> classesWithDeterministicOrder() {
-    List<DexProgramClass> classes = new ArrayList<>(programClasses());
-    // We never actually sort by anything but the DexType, this is just here in case we ever change
-    // that.
-    if (options.testing.deterministicSortingBasedOnDexType) {
-      // To keep the order deterministic, we sort the classes by their type, which is a unique key.
-      classes.sort(Comparator.comparing(DexClass::getType));
-    }
+    return classesWithDeterministicOrder(new ArrayList<>(programClasses()));
+  }
+
+  public static <T extends DexClass> List<T> classesWithDeterministicOrder(Collection<T> classes) {
+    return classesWithDeterministicOrder(new ArrayList<>(classes));
+  }
+
+  public static <T extends DexClass> List<T> classesWithDeterministicOrder(List<T> classes) {
+    // To keep the order deterministic, we sort the classes by their type, which is a unique key.
+    classes.sort(Comparator.comparing(DexClass::getType));
     return classes;
   }
 
@@ -129,15 +132,9 @@
   }
 
   public abstract static class Builder<T extends Builder<T>> {
-    // We handle program class collection separately from classpath
-    // and library class collections. Since while we assume program
-    // class collection should always be fully loaded and thus fully
-    // represented by the map (making it easy, for example, adding
-    // new or removing existing classes), classpath and library
-    // collections will be considered monolithic collections.
 
-    private List<DexProgramClass> programClasses = new ArrayList<>();
-    private List<DexClasspathClass> classpathClasses = new ArrayList<>();
+    private final List<DexProgramClass> programClasses = new ArrayList<>();
+    private final List<DexClasspathClass> classpathClasses = new ArrayList<>();
 
     final List<DataResourceProvider> dataResourceProviders = new ArrayList<>();
 
diff --git a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
index c267e7c..4f38fb2 100644
--- a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
@@ -63,7 +63,7 @@
     return programClasses;
   }
 
-  public Collection<DexLibraryClass> libraryClasses() {
+  public List<DexLibraryClass> libraryClasses() {
     return libraryClasses;
   }
 
diff --git a/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java b/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java
index c6f7a5f..f3385af 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java
@@ -34,7 +34,7 @@
   }
 
   public static MethodMapBacking createSorted() {
-    Comparator<Wrapper<DexMethod>> comparator = (x, y) -> x.get().compareTo(y.get());
+    Comparator<Wrapper<DexMethod>> comparator = Comparator.comparing(Wrapper::get);
     return new MethodMapBacking(new Object2ReferenceRBTreeMap<>(comparator));
   }
 
diff --git a/src/main/java/com/android/tools/r8/graph/ResolutionResult.java b/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
index edb5e46..3356777 100644
--- a/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
@@ -567,18 +567,14 @@
     public LookupTarget lookupVirtualDispatchTarget(
         LambdaDescriptor lambdaInstance, AppInfoWithClassHierarchy appInfo) {
       if (lambdaInstance.getMainMethod().match(resolvedMethod)) {
-        DexMethod method = lambdaInstance.implHandle.asMethod();
-        DexClass holder = appInfo.definitionForHolder(method);
-        if (holder == null) {
-          assert false;
-          return null;
-        }
-        DexEncodedMethod definition = holder.lookupMethod(method);
-        if (definition == null) {
+        DexMethod methodReference = lambdaInstance.implHandle.asMethod();
+        DexClass holder = appInfo.definitionForHolder(methodReference);
+        DexClassAndMethod method = methodReference.lookupMemberOnClass(holder);
+        if (method == null) {
           // The targeted method might not exist, eg, Throwable.addSuppressed in an old library.
           return null;
         }
-        return new LookupLambdaTarget(lambdaInstance, DexClassAndMethod.create(holder, definition));
+        return new LookupLambdaTarget(lambdaInstance, method);
       }
       return lookupMaximallySpecificDispatchTarget(lambdaInstance, appInfo);
     }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
index bd6d488..0c27a75 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
@@ -481,7 +481,7 @@
             .appInfoForDesugaring()
             .resolveMethodOnInterface(clazz, invokedMethod)
             .asSingleResolution();
-    if (resolutionResult != null) {
+    if (resolutionResult != null && resolutionResult.getResolvedMethod().isStatic()) {
       instructions.replaceCurrentInstruction(
           new InvokeStatic(
               staticAsMethodOfCompanionClass(resolutionResult.getResolutionPair()),
@@ -490,28 +490,26 @@
       return;
     }
 
-    // Replace by throw new NoSuchMethodError.
-    UtilityMethodForCodeOptimizations throwNoSuchMethodErrorMethod =
-        UtilityMethodsForCodeOptimizations.synthesizeThrowNoSuchMethodErrorMethod(
-            appView, context, methodProcessingId);
-    throwNoSuchMethodErrorMethod.optimize(methodProcessor);
+    // Replace by throw new IncompatibleClassChangeError/NoSuchMethodError.
+    UtilityMethodForCodeOptimizations throwMethod =
+        resolutionResult == null
+            ? UtilityMethodsForCodeOptimizations.synthesizeThrowNoSuchMethodErrorMethod(
+                appView, context, methodProcessingId)
+            : UtilityMethodsForCodeOptimizations.synthesizeThrowIncompatibleClassChangeErrorMethod(
+                appView, context, methodProcessingId);
+    throwMethod.optimize(methodProcessor);
 
-    InvokeStatic throwNoSuchMethodErrorInvoke =
+    InvokeStatic throwInvoke =
         InvokeStatic.builder()
-            .setMethod(throwNoSuchMethodErrorMethod.getMethod())
+            .setMethod(throwMethod.getMethod())
             .setFreshOutValue(appView, code)
             .setPosition(invoke)
             .build();
     instructions.previous();
-    instructions.add(throwNoSuchMethodErrorInvoke);
+    instructions.add(throwInvoke);
     instructions.next();
     instructions.replaceCurrentInstructionWithThrow(
-        appView,
-        code,
-        blockIterator,
-        throwNoSuchMethodErrorInvoke.outValue(),
-        blocksToRemove,
-        affectedValues);
+        appView, code, blockIterator, throwInvoke.outValue(), blocksToRemove, affectedValues);
   }
 
   private void rewriteInvokeSuper(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/UtilityMethodsForCodeOptimizations.java b/src/main/java/com/android/tools/r8/ir/optimize/UtilityMethodsForCodeOptimizations.java
index 35467e9..9e360b4 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/UtilityMethodsForCodeOptimizations.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/UtilityMethodsForCodeOptimizations.java
@@ -77,6 +77,35 @@
             options, method);
   }
 
+  public static UtilityMethodForCodeOptimizations synthesizeThrowIncompatibleClassChangeErrorMethod(
+      AppView<?> appView, ProgramMethod context, MethodProcessingId methodProcessingId) {
+    InternalOptions options = appView.options();
+    DexItemFactory dexItemFactory = appView.dexItemFactory();
+    DexProto proto = dexItemFactory.createProto(dexItemFactory.icceType);
+    SyntheticItems syntheticItems = appView.getSyntheticItems();
+    ProgramMethod syntheticMethod =
+        syntheticItems.createMethod(
+            SyntheticNaming.SyntheticKind.THROW_ICCE,
+            context,
+            dexItemFactory,
+            builder ->
+                builder
+                    .setAccessFlags(MethodAccessFlags.createPublicStaticSynthetic())
+                    .setClassFileVersion(CfVersion.V1_8)
+                    .setCode(
+                        method -> getThrowIncompatibleClassChangeErrorCodeTemplate(method, options))
+                    .setProto(proto),
+            methodProcessingId);
+    return new UtilityMethodForCodeOptimizations(syntheticMethod);
+  }
+
+  private static CfCode getThrowIncompatibleClassChangeErrorCodeTemplate(
+      DexMethod method, InternalOptions options) {
+    return CfUtilityMethodsForCodeOptimizations
+        .CfUtilityMethodsForCodeOptimizationsTemplates_throwIncompatibleClassChangeError(
+            options, method);
+  }
+
   public static UtilityMethodForCodeOptimizations synthesizeThrowNoSuchMethodErrorMethod(
       AppView<?> appView, ProgramMethod context, MethodProcessingId methodProcessingId) {
     InternalOptions options = appView.options();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java b/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java
index a1731e7..831a0b3 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java
@@ -33,6 +33,7 @@
 
   public static void registerSynthesizedCodeReferences(DexItemFactory factory) {
     factory.createSynthesizedType("Ljava/lang/ClassCastException;");
+    factory.createSynthesizedType("Ljava/lang/IncompatibleClassChangeError;");
     factory.createSynthesizedType("Ljava/lang/NoSuchMethodError;");
   }
 
@@ -74,6 +75,30 @@
         ImmutableList.of());
   }
 
+  public static CfCode
+      CfUtilityMethodsForCodeOptimizationsTemplates_throwIncompatibleClassChangeError(
+          InternalOptions options, DexMethod method) {
+    CfLabel label0 = new CfLabel();
+    return new CfCode(
+        method.holder,
+        2,
+        0,
+        ImmutableList.of(
+            label0,
+            new CfNew(options.itemFactory.createType("Ljava/lang/IncompatibleClassChangeError;")),
+            new CfStackInstruction(CfStackInstruction.Opcode.Dup),
+            new CfInvoke(
+                183,
+                options.itemFactory.createMethod(
+                    options.itemFactory.createType("Ljava/lang/IncompatibleClassChangeError;"),
+                    options.itemFactory.createProto(options.itemFactory.voidType),
+                    options.itemFactory.createString("<init>")),
+                false),
+            new CfThrow()),
+        ImmutableList.of(),
+        ImmutableList.of());
+  }
+
   public static CfCode CfUtilityMethodsForCodeOptimizationsTemplates_throwNoSuchMethodError(
       InternalOptions options, DexMethod method) {
     CfLabel label0 = new CfLabel();
diff --git a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
index e7ca5b5..771c336 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
@@ -100,13 +100,6 @@
   }
 
   ClassRenaming computeRenaming(Timing timing) {
-    return computeRenaming(timing, Collections.emptyMap());
-  }
-
-  ClassRenaming computeRenaming(Timing timing, Map<DexType, DexString> syntheticClasses) {
-    // Externally defined synthetic classes populate an initial renaming.
-    renaming.putAll(syntheticClasses);
-
     // Collect names we have to keep.
     timing.begin("reserve");
     for (DexClass clazz : classes) {
diff --git a/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java b/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
index 8e19257..0f5924d 100644
--- a/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
@@ -23,7 +23,6 @@
 import com.google.common.collect.Sets;
 import java.io.PrintStream;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -397,7 +396,7 @@
     return Comparator.comparing(globalStateMap::get);
   }
 
-  private void reserveNamesInInterfaces(Collection<DexClass> interfaces) {
+  private void reserveNamesInInterfaces(Iterable<DexClass> interfaces) {
     for (DexClass iface : interfaces) {
       assert iface.isInterface();
       minifierState.allocateReservationStateAndReserve(iface.type, iface.type);
@@ -407,7 +406,7 @@
     }
   }
 
-  void assignNamesToInterfaceMethods(Timing timing, Collection<DexClass> interfaces) {
+  void assignNamesToInterfaceMethods(Timing timing, Iterable<DexClass> interfaces) {
     timing.begin("Interface minification");
     // Reserve all the names that are required for interfaces.
     timing.begin("Reserve direct and compute hierarchy");
diff --git a/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java b/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
index 49dcd83..0f50ecb 100644
--- a/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
@@ -16,7 +16,6 @@
 import com.google.common.collect.BiMap;
 import com.google.common.collect.HashBiMap;
 import com.google.common.collect.ImmutableMap;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.IdentityHashMap;
 import java.util.Map;
@@ -174,7 +173,7 @@
     }
   }
 
-  MethodRenaming computeRenaming(Collection<DexClass> interfaces, Timing timing) {
+  MethodRenaming computeRenaming(Iterable<DexClass> interfaces, Timing timing) {
     // Phase 1: Reserve all the names that need to be kept and allocate linked state in the
     //          library part.
     timing.begin("Phase 1");
diff --git a/src/main/java/com/android/tools/r8/naming/Minifier.java b/src/main/java/com/android/tools/r8/naming/Minifier.java
index 4bc638a..c00993f 100644
--- a/src/main/java/com/android/tools/r8/naming/Minifier.java
+++ b/src/main/java/com/android/tools/r8/naming/Minifier.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.naming;
 
+import static com.android.tools.r8.graph.DexApplication.classesWithDeterministicOrder;
 import static com.android.tools.r8.utils.StringUtils.EMPTY_CHAR_ARRAY;
 import static com.android.tools.r8.utils.SymbolGenerationUtils.PRIMITIVE_TYPE_NAMES;
 
@@ -26,11 +27,10 @@
 import com.android.tools.r8.utils.SymbolGenerationUtils;
 import com.android.tools.r8.utils.SymbolGenerationUtils.MixedCasing;
 import com.android.tools.r8.utils.Timing;
-import java.util.Comparator;
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.TreeSet;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.function.BiPredicate;
@@ -48,8 +48,7 @@
     assert appView.options().isMinifying();
     SubtypingInfo subtypingInfo = appView.appInfo().computeSubtypingInfo();
     timing.begin("ComputeInterfaces");
-    Set<DexClass> interfaces = new TreeSet<>(Comparator.comparing(a -> a.type));
-    interfaces.addAll(appView.appInfo().computeReachableInterfaces());
+    List<DexClass> interfaces = computeReachableInterfacesWithDeterministicOrder();
     timing.end();
     timing.begin("MinifyClasses");
     ClassNameMinifier classNameMinifier =
@@ -92,6 +91,12 @@
     return lens;
   }
 
+  private List<DexClass> computeReachableInterfacesWithDeterministicOrder() {
+    List<DexClass> interfaces = new ArrayList<>();
+    appView.appInfo().forEachReachableInterface(interfaces::add);
+    return classesWithDeterministicOrder(interfaces);
+  }
+
   abstract static class BaseMinificationNamingStrategy {
 
     // We have to ensure that the names proposed by the minifier is not used in the obfuscation
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
index 6d8c889..b75956e 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
@@ -4,6 +4,8 @@
 
 package com.android.tools.r8.naming;
 
+import static com.android.tools.r8.graph.DexApplication.classesWithDeterministicOrder;
+
 import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexClass;
@@ -35,7 +37,9 @@
 import com.google.common.collect.BiMap;
 import com.google.common.collect.HashBiMap;
 import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import java.util.ArrayDeque;
+import java.util.Comparator;
 import java.util.Deque;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -73,9 +77,8 @@
   private final SeedMapper seedMapper;
   private final BiMap<DexType, DexString> mappedNames = HashBiMap.create();
   // To keep the order deterministic, we sort the classes by their type, which is a unique key.
-  private final Set<DexClass> mappedClasses = new TreeSet<>((a, b) -> a.type.compareTo(b.type));
+  private final Set<DexClass> mappedClasses = Sets.newIdentityHashSet();
   private final Map<DexReference, MemberNaming> memberNames = Maps.newIdentityHashMap();
-  private final Map<DexType, DexString> syntheticCompanionClasses = Maps.newIdentityHashMap();
   private final Map<DexMethod, DexString> defaultInterfaceMethodImplementationNames =
       Maps.newIdentityHashMap();
   private final Map<DexMethod, DexString> additionalMethodNamings = Maps.newIdentityHashMap();
@@ -95,15 +98,15 @@
     Set<DexReference> notMappedReferences = new HashSet<>();
 
     timing.begin("MappingInterfaces");
-    Set<DexClass> interfaces = new TreeSet<>((a, b) -> a.type.compareTo(b.type));
+    Set<DexClass> interfaces = new TreeSet<>(Comparator.comparing(DexClass::getType));
     Consumer<DexClass> consumer =
-        dexClass -> {
-          if (dexClass.isInterface()) {
+        clazz -> {
+          if (clazz.isInterface()) {
             // Only visit top level interfaces because computeMapping will visit the hierarchy.
-            if (dexClass.interfaces.isEmpty()) {
-              computeMapping(dexClass.type, nonPrivateMembers, notMappedReferences, subtypingInfo);
+            if (clazz.interfaces.isEmpty()) {
+              computeMapping(clazz.type, nonPrivateMembers, notMappedReferences, subtypingInfo);
             }
-            interfaces.add(dexClass);
+            interfaces.add(clazz);
           }
         };
     // For union-find of interface methods we also need to add the library types above live types.
@@ -141,9 +144,8 @@
             // in the ClassNameMinifier that the strategy should produce a "fresh" name so we just
             // use the existing strategy.
             new MinificationPackageNamingStrategy(appView),
-            mappedClasses);
-    ClassRenaming classRenaming =
-        classNameMinifier.computeRenaming(timing, syntheticCompanionClasses);
+            classesWithDeterministicOrder(mappedClasses));
+    ClassRenaming classRenaming = classNameMinifier.computeRenaming(timing);
     timing.end();
 
     ApplyMappingMemberNamingStrategy nameStrategy =
@@ -341,11 +343,10 @@
       }
       // TODO(b/150736225): Is this sound? What if the type is a library type that has been pruned?
       DexClass dexClass = appView.appInfo().definitionForWithoutExistenceAssert(type);
-      if (dexClass == null) {
+      if (dexClass == null || dexClass.isClasspathClass()) {
         computeDefaultInterfaceMethodMappingsForType(
             type,
             classNaming,
-            syntheticCompanionClasses,
             defaultInterfaceMethodImplementationNames);
       }
     }
@@ -354,7 +355,6 @@
   private void computeDefaultInterfaceMethodMappingsForType(
       DexType type,
       ClassNamingForMapApplier classNaming,
-      Map<DexType, DexString> syntheticCompanionClasses,
       Map<DexMethod, DexString> defaultInterfaceMethodImplementationNames) {
     // If the class does not resolve, then check if it is a companion class for an interface on
     // the class path.
@@ -366,7 +366,6 @@
     if (interfaceType == null || !interfaceType.isClasspathClass()) {
       return;
     }
-    syntheticCompanionClasses.put(type, factory.createString(classNaming.renamedName));
     for (List<MemberNaming> namings : classNaming.getQualifiedMethodMembers().values()) {
       // If the qualified name has been mapped to multiple names we can't compute a mapping (and it
       // should not be possible that this is a default interface method in that case.)
diff --git a/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java b/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
index 30d9b7d..a675776 100644
--- a/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
+++ b/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
@@ -10,7 +10,6 @@
 
 import com.android.tools.r8.graph.AppView;
 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.DexMethod;
@@ -83,9 +82,7 @@
 
     // Phase 2: Visit classes and promote class/member to public if possible.
     timing.begin("Phase 2: promoteToPublic");
-    for (DexClass iface : appView.appInfo().computeReachableInterfaces()) {
-      publicizeType(iface.type);
-    }
+    appView.appInfo().forEachReachableInterface(clazz -> publicizeType(clazz.getType()));
     publicizeType(appView.dexItemFactory().objectType);
     timing.end();
 
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index e88a714..744e0fc 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -604,8 +604,7 @@
     return reprocess;
   }
 
-  public Collection<DexClass> computeReachableInterfaces() {
-    Set<DexClass> interfaces = Sets.newIdentityHashSet();
+  public void forEachReachableInterface(Consumer<DexClass> consumer) {
     WorkList<DexType> worklist = WorkList.newIdentityWorkList();
     worklist.addIfNotSeen(objectAllocationInfoCollection.getInstantiatedLambdaInterfaces());
     for (DexProgramClass clazz : classes()) {
@@ -618,14 +617,13 @@
         continue;
       }
       if (definition.isInterface()) {
-        interfaces.add(definition);
+        consumer.accept(definition);
       }
       if (definition.superType != null) {
         worklist.addIfNotSeen(definition.superType);
       }
       worklist.addIfNotSeen(definition.interfaces.values);
     }
-    return interfaces;
   }
 
   /**
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 1905d90..997ef55 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -5,6 +5,7 @@
 
 import static com.android.tools.r8.graph.DexProgramClass.asProgramClassOrNull;
 import static com.android.tools.r8.graph.FieldAccessInfoImpl.MISSING_FIELD_ACCESS_INFO;
+import static com.android.tools.r8.ir.desugar.LambdaDescriptor.isLambdaMetafactoryMethod;
 import static com.android.tools.r8.ir.optimize.enums.UnboxedEnumMemberRelocator.ENUM_UNBOXING_UTILITY_CLASS_SUFFIX;
 import static com.android.tools.r8.naming.IdentifierNameStringUtils.identifyIdentifier;
 import static com.android.tools.r8.naming.IdentifierNameStringUtils.isReflectionMethod;
@@ -553,10 +554,15 @@
   }
 
   private void recordMethodReference(DexMethod method, ProgramDefinition context) {
-    recordTypeReference(method.holder, context);
-    recordTypeReference(method.proto.returnType, context);
+    recordMethodReference(method, context, this::reportMissingClass);
+  }
+
+  private void recordMethodReference(
+      DexMethod method, ProgramDefinition context, Consumer<DexType> missingClassConsumer) {
+    recordTypeReference(method.holder, context, missingClassConsumer);
+    recordTypeReference(method.proto.returnType, context, missingClassConsumer);
     for (DexType type : method.proto.parameters.values) {
-      recordTypeReference(type, context);
+      recordTypeReference(type, context, missingClassConsumer);
     }
   }
 
@@ -941,13 +947,17 @@
   }
 
   void traceCallSite(DexCallSite callSite, ProgramMethod context) {
-    DexProgramClass bootstrapClass =
-        getProgramHolderOrNull(callSite.bootstrapMethod.asMethod(), context);
-    if (bootstrapClass != null) {
-      bootstrapMethods.add(callSite.bootstrapMethod.asMethod());
+    // Do not lookup java.lang.invoke.LambdaMetafactory when compiling for DEX to avoid reporting
+    // the class as missing.
+    if (options.isGeneratingClassFiles() || !isLambdaMetafactoryMethod(callSite, appInfo())) {
+      DexProgramClass bootstrapClass =
+          getProgramHolderOrNull(callSite.bootstrapMethod.asMethod(), context);
+      if (bootstrapClass != null) {
+        bootstrapMethods.add(callSite.bootstrapMethod.asMethod());
+      }
     }
 
-    LambdaDescriptor descriptor = LambdaDescriptor.tryInfer(callSite, appInfo, context);
+    LambdaDescriptor descriptor = LambdaDescriptor.tryInfer(callSite, appInfo(), context);
     if (descriptor == null) {
       return;
     }
@@ -1735,9 +1745,10 @@
     if (enclosingMethodAttribute != null) {
       DexMethod enclosingMethod = enclosingMethodAttribute.getEnclosingMethod();
       if (enclosingMethod != null) {
-        recordMethodReference(enclosingMethod, clazz);
+        recordMethodReference(enclosingMethod, clazz, this::ignoreMissingClass);
       } else {
-        recordTypeReference(enclosingMethodAttribute.getEnclosingClass(), clazz);
+        recordTypeReference(
+            enclosingMethodAttribute.getEnclosingClass(), clazz, this::ignoreMissingClass);
       }
     }
 
@@ -2312,20 +2323,24 @@
   private void checkLambdaInterface(DexType itf, ProgramMethod context) {
     DexClass clazz = definitionFor(itf, context);
     if (clazz == null) {
-      StringDiagnostic message =
-          new StringDiagnostic(
-              "Lambda expression implements missing interface `" + itf.toSourceString() + "`",
-              context.getOrigin());
-      options.reporter.warning(message);
+      if (!options.getProguardConfiguration().getDontWarnPatterns().matches(itf)) {
+        StringDiagnostic message =
+            new StringDiagnostic(
+                "Lambda expression implements missing interface `" + itf.toSourceString() + "`",
+                context.getOrigin());
+        options.reporter.warning(message);
+      }
     } else if (!clazz.isInterface()) {
-      StringDiagnostic message =
-          new StringDiagnostic(
-              "Lambda expression expected to implement an interface, but found "
-                  + "`"
-                  + itf.toSourceString()
-                  + "`",
-              context.getOrigin());
-      options.reporter.warning(message);
+      if (!options.getProguardConfiguration().getDontWarnPatterns().matches(itf)) {
+        StringDiagnostic message =
+            new StringDiagnostic(
+                "Lambda expression expected to implement an interface, but found "
+                    + "`"
+                    + itf.toSourceString()
+                    + "`",
+                context.getOrigin());
+        options.reporter.warning(message);
+      }
     }
   }
 
@@ -4664,7 +4679,7 @@
     }
 
     public DexClass definitionFor(DexType type, ProgramDefinition context) {
-      return enqueuer.definitionFor(type, context);
+      return enqueuer.definitionFor(type, context, enqueuer::ignoreMissingClass);
     }
   }
 }
diff --git a/src/main/java/com/android/tools/r8/shaking/MissingClasses.java b/src/main/java/com/android/tools/r8/shaking/MissingClasses.java
index d3cd164..d8dbca6 100644
--- a/src/main/java/com/android/tools/r8/shaking/MissingClasses.java
+++ b/src/main/java/com/android/tools/r8/shaking/MissingClasses.java
@@ -93,6 +93,7 @@
     public MissingClasses reportMissingClasses(InternalOptions options) {
       Set<DexType> newMissingClassesWithoutDontWarn =
           options.getProguardConfiguration().getDontWarnPatterns().getNonMatches(newMissingClasses);
+      newMissingClassesWithoutDontWarn.removeAll(alreadyMissingClasses);
       newMissingClassesWithoutDontWarn.removeAll(
           getAllowedMissingClasses(options.dexItemFactory()));
       if (!newMissingClassesWithoutDontWarn.isEmpty()) {
@@ -111,7 +112,15 @@
     }
 
     private static Collection<DexType> getAllowedMissingClasses(DexItemFactory dexItemFactory) {
-      return ImmutableList.of(dexItemFactory.annotationThrows);
+      return ImmutableList.of(
+          dexItemFactory.annotationDefault,
+          dexItemFactory.annotationMethodParameters,
+          dexItemFactory.annotationSourceDebugExtension,
+          dexItemFactory.annotationThrows,
+          // TODO(b/176133674) StringConcatFactory is backported, but the class is reported as
+          //  missing because the enqueuer runs prior to backporting and thus sees the non-desugared
+          //  code.
+          dexItemFactory.stringConcatFactoryType);
     }
 
     /** Intentionally private, use {@link Builder#reportMissingClasses(InternalOptions)}. */
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index decafef..78957e7 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1336,7 +1336,6 @@
     public Consumer<IRCode> irModifier = null;
     public int basicBlockMuncherIterationLimit = NO_LIMIT;
     public boolean dontReportFailingCheckDiscarded = false;
-    public boolean deterministicSortingBasedOnDexType = true;
     public PrintStream whyAreYouNotInliningConsumer = System.out;
     public boolean trackDesugaredAPIConversions =
         System.getProperty("com.android.tools.r8.trackDesugaredAPIConversions") != null;
diff --git a/src/main/keep.txt b/src/main/keep.txt
index 82f6965..24d0fbc 100644
--- a/src/main/keep.txt
+++ b/src/main/keep.txt
@@ -26,3 +26,8 @@
 
 # Compatibility command line program used by the Android Platform build.
 -keep public class com.android.tools.r8.compatproguard.CompatProguard { public static void main(java.lang.String[]); }
+
+# TODO(b/176783536): Avoid need to use -dontwarn.
+-dontwarn com.google.errorprone.annotations.**
+-dontwarn com.google.j2objc.annotations.*
+-dontwarn javax.annotation.Nullable
diff --git a/src/test/java/com/android/tools/r8/Keep.java b/src/test/java/com/android/tools/r8/Keep.java
new file mode 100644
index 0000000..ed8275b
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/Keep.java
@@ -0,0 +1,10 @@
+// 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 java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.CLASS)
+public @interface Keep {}
diff --git a/src/test/java/com/android/tools/r8/TestBuilderMinAndroidJarTest.java b/src/test/java/com/android/tools/r8/TestBuilderMinAndroidJarTest.java
index 06cba56..d917ab6 100644
--- a/src/test/java/com/android/tools/r8/TestBuilderMinAndroidJarTest.java
+++ b/src/test/java/com/android/tools/r8/TestBuilderMinAndroidJarTest.java
@@ -28,7 +28,10 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimes().withAllApiLevels().build();
+    return getTestParameters()
+        .withAllRuntimes()
+        .withApiLevelsStartingAtIncluding(AndroidApiLevel.N)
+        .build();
   }
 
   public TestBuilderMinAndroidJarTest(TestParameters parameters) {
diff --git a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java b/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
index f196151..27033d8 100644
--- a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
@@ -46,6 +46,7 @@
   public static final Consumer<InternalOptions> DEFAULT_OPTIONS =
       options -> {
         options.testing.allowClassInlinerGracefulExit = false;
+        options.testing.enableExperimentalMissingClassesReporting = true;
         options.testing.reportUnusedProguardConfigurationRules = true;
         options.horizontalClassMergerOptions().enable();
       };
diff --git a/src/test/java/com/android/tools/r8/TestParametersCollection.java b/src/test/java/com/android/tools/r8/TestParametersCollection.java
index 52bc8d5..8351a9c 100644
--- a/src/test/java/com/android/tools/r8/TestParametersCollection.java
+++ b/src/test/java/com/android/tools/r8/TestParametersCollection.java
@@ -6,7 +6,6 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.stream.Stream;
-import org.jetbrains.annotations.NotNull;
 
 public class TestParametersCollection implements Iterable<TestParameters> {
 
@@ -17,7 +16,6 @@
     this.parameters = parameters;
   }
 
-  @NotNull
   @Override
   public Iterator<TestParameters> iterator() {
     return parameters.iterator();
diff --git a/src/test/java/com/android/tools/r8/TestRunResult.java b/src/test/java/com/android/tools/r8/TestRunResult.java
index c775215..4a7d5c7 100644
--- a/src/test/java/com/android/tools/r8/TestRunResult.java
+++ b/src/test/java/com/android/tools/r8/TestRunResult.java
@@ -66,8 +66,12 @@
   }
 
   public RR assertSuccessWithOutputLinesIf(boolean condition, String... expected) {
+    return assertSuccessWithOutputLinesIf(condition, Arrays.asList(expected));
+  }
+
+  public RR assertSuccessWithOutputLinesIf(boolean condition, List<String> expected) {
     if (condition) {
-      return assertSuccessWithOutputLines(Arrays.asList(expected));
+      return assertSuccessWithOutputLines(expected);
     }
     return self();
   }
diff --git a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
index 12b42cb..9ac6cdb 100644
--- a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
@@ -4,6 +4,8 @@
 
 package com.android.tools.r8;
 
+import static com.android.tools.r8.ir.desugar.InterfaceMethodRewriter.COMPANION_CLASS_NAME_SUFFIX;
+
 import com.android.tools.r8.TestBase.Backend;
 import com.android.tools.r8.dexsplitter.SplitterTestBase.RunInterface;
 import com.android.tools.r8.references.MethodReference;
@@ -108,6 +110,98 @@
     return addKeepRules("-dontwarn " + className);
   }
 
+  public T addDontWarn(String... classes) {
+    for (String clazz : classes) {
+      addKeepRules("-dontwarn " + clazz);
+    }
+    return self();
+  }
+
+  @Deprecated
+  public T addDontWarnCompanionClasses() {
+    return addDontWarn("**" + COMPANION_CLASS_NAME_SUFFIX);
+  }
+
+  @Deprecated
+  public T addDontWarnCompilerSynthesizedAnnotations() {
+    return addDontWarn("com.android.tools.r8.annotations.SynthesizedClass")
+        .addDontWarn("com.android.tools.r8.annotations.SynthesizedClassMap");
+  }
+
+  // TODO(b/176143558): Should not report missing classes for compiler synthesized classes.
+  @Deprecated
+  public T addDontWarnEmulatedLibraryClasses() {
+    return addDontWarn("**$-EL");
+  }
+
+  public T addDontWarnGoogle() {
+    return addDontWarn("com.google.**");
+  }
+
+  public T addDontWarnJavax() {
+    return addDontWarn("javax.**");
+  }
+
+  public T addDontWarnJavaLangInvoke() {
+    return addDontWarn("java.lang.invoke.*");
+  }
+
+  public T addDontWarnJavaNioFile() {
+    return addDontWarn("java.nio.file.**");
+  }
+
+  // TODO(b/176133676): Investigate why there are missing class references to org.jetbrains
+  @Deprecated
+  public T addDontWarnJetBrains() {
+    return addDontWarn("org.jetbrains.**");
+  }
+
+  public T addDontWarnJetBrainsAnnotations() {
+    return addDontWarn("org.jetbrains.annotations.NotNull", "org.jetbrains.annotations.Nullable");
+  }
+
+  // TODO(b/176133676): Should not report missing classes for Kotlin classes.
+  @Deprecated
+  public T addDontWarnKotlin() {
+    return addDontWarn("kotlin.**");
+  }
+
+  // TODO(b/176133676): Should not report missing classes for Kotlin metadata.
+  @Deprecated
+  public T addDontWarnKotlinMetadata() {
+    return addDontWarn("kotlin.Metadata");
+  }
+
+  // TODO(b/176133676): Investigate kotlinx missing class references.
+  @Deprecated
+  public T addDontWarnKotlinx() {
+    return addDontWarn("kotlinx.**");
+  }
+
+  // TODO(b/176144018): Should not report compiler synthesized references as missing.
+  @Deprecated
+  public T addDontWarnRetargetLibraryMembers() {
+    return addDontWarn("j$.retarget.$r8$retargetLibraryMember**");
+  }
+
+  // TODO(b/154849103): Should not warn about SerializedLambda.
+  @Deprecated
+  public T addDontWarnSerializedLambda() {
+    return addDontWarn("java.lang.invoke.SerializedLambda");
+  }
+
+  // TODO(b/176781593): Should not be reported missing.
+  @Deprecated
+  public T addDontWarnTimeConversions() {
+    return addDontWarn("java.time.TimeConversions");
+  }
+
+  // TODO(b/176144018): Should not report compiler synthesized references as missing.
+  @Deprecated
+  public T addDontWarnVivifiedClasses() {
+    return addDontWarn("$-vivified-$.**");
+  }
+
   public T addKeepKotlinMetadata() {
     return addKeepRules("-keep class kotlin.Metadata { *; }");
   }
@@ -331,6 +425,10 @@
     return addTestingAnnotation(NeverInline.class);
   }
 
+  public final T addKeepAnnotation() {
+    return addTestingAnnotation(Keep.class);
+  }
+
   public final T addMemberValuePropagationAnnotations() {
     return addTestingAnnotation(NeverPropagateValue.class);
   }
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java
index ce40a93..1127d82 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java
@@ -23,7 +23,7 @@
     this.parameters = parameters;
   }
 
-  static void assertPublic(CodeInspector codeInspector, Class clazz, MethodSignature signature) {
+  static void assertPublic(CodeInspector codeInspector, Class<?> clazz, MethodSignature signature) {
     ClassSubject classSubject = codeInspector.clazz(clazz);
     assertThat(classSubject, isPresent());
     MethodSubject methodSubject = classSubject.method(signature);
@@ -31,12 +31,12 @@
     assertThat(methodSubject, isPublic());
   }
 
-  static void assertNotPublic(CodeInspector codeInspector, Class clazz, MethodSignature signature) {
+  static void assertNotPublic(
+      CodeInspector codeInspector, Class<?> clazz, MethodSignature signature) {
     ClassSubject classSubject = codeInspector.clazz(clazz);
     assertThat(classSubject, isPresent());
     MethodSubject methodSubject = classSubject.method(signature);
     assertThat(methodSubject, isPresent());
     assertThat(methodSubject, not(isPublic()));
   }
-
 }
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java
index 83a0155..339361b 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.R8TestCompileResult;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.StringUtils;
@@ -103,7 +104,11 @@
   @Parameterized.Parameters(name = "{0}, access-modification: {1}")
   public static List<Object[]> data() {
     return buildParameters(
-        getTestParameters().withAllRuntimesAndApiLevels().build(), BooleanUtils.values());
+        getTestParameters()
+            .withAllRuntimes()
+            .withApiLevelsStartingAtIncluding(AndroidApiLevel.K)
+            .build(),
+        BooleanUtils.values());
   }
 
   public NoRelaxationForSerializableTest(TestParameters parameters, boolean accessModification) {
@@ -141,6 +146,8 @@
     R8TestCompileResult result =
         testForR8(parameters.getBackend())
             .addProgramClasses(CLASSES)
+            .addMemberValuePropagationAnnotations()
+            .addNoVerticalClassMergingAnnotations()
             .enableInliningAnnotations()
             .addKeepRuleFiles(configuration)
             .addKeepRules(KEEPMEMBER_RULES)
@@ -174,6 +181,7 @@
     R8TestCompileResult result =
         testForR8(parameters.getBackend())
             .addProgramClasses(CLASSES)
+            .addNoVerticalClassMergingAnnotations()
             .enableInliningAnnotations()
             .enableMemberValuePropagationAnnotations()
             .addKeepRuleFiles(configuration)
diff --git a/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java b/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
index 607f96d..84d55b4 100644
--- a/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
+++ b/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
@@ -66,6 +66,7 @@
         .addProgramFiles(kotlinSources)
         .addKeepAttributes(ProguardKeepAttributes.SOURCE_DEBUG_EXTENSION)
         .addKeepAllClassesRule()
+        .addDontWarnJetBrainsAnnotations()
         .setMode(CompilationMode.RELEASE)
         .setMinApi(parameters.getApiLevel())
         .compile()
diff --git a/src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java b/src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
index 8bb8e36..902d503 100644
--- a/src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.TestShrinkerBuilder;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
@@ -26,9 +27,9 @@
 @RunWith(Parameterized.class)
 public class KeepDeserializeLambdaMethodTestRunner extends TestBase {
 
-  private static final Class TEST_CLASS_CF =
+  private static final Class<?> TEST_CLASS_CF =
       com.android.tools.r8.cf.KeepDeserializeLambdaMethodTestCf.class;
-  private static final Class TEST_CLASS_DEX =
+  private static final Class<?> TEST_CLASS_DEX =
       com.android.tools.r8.cf.KeepDeserializeLambdaMethodTestDex.class;
 
   private static final String EXPECTED =
@@ -89,8 +90,10 @@
           // TODO(b/148836254): Support deserialized lambdas without the need of additional rules.
           "-keep class * { private static synthetic void lambda$*(); }");
     } else {
-      builder.noMinification();
-      builder.noTreeShaking();
+      builder
+          .applyIf(parameters.isDexRuntime(), TestShrinkerBuilder::addDontWarnSerializedLambda)
+          .noMinification()
+          .noTreeShaking();
     }
     builder
         .run(parameters.getRuntime(), getMainClass())
diff --git a/src/test/java/com/android/tools/r8/cf/MissingClassJoinsToObjectTest.java b/src/test/java/com/android/tools/r8/cf/MissingClassJoinsToObjectTest.java
index 81f1d09..43d02cb 100644
--- a/src/test/java/com/android/tools/r8/cf/MissingClassJoinsToObjectTest.java
+++ b/src/test/java/com/android/tools/r8/cf/MissingClassJoinsToObjectTest.java
@@ -51,6 +51,7 @@
             .enableInliningAnnotations()
             .addProgramClasses(TestClass.class, A.class)
             .addKeepMainRule(TestClass.class)
+            .addDontWarn(B.class)
             .setMinApi(parameters.getApiLevel())
             .compile()
             .addRunClasspathFiles(getRuntimeClasspath())
diff --git a/src/test/java/com/android/tools/r8/cf/PrintSeedsWithDeserializeLambdaMethodTest.java b/src/test/java/com/android/tools/r8/cf/PrintSeedsWithDeserializeLambdaMethodTest.java
index 497a1bf..ed9277a 100644
--- a/src/test/java/com/android/tools/r8/cf/PrintSeedsWithDeserializeLambdaMethodTest.java
+++ b/src/test/java/com/android/tools/r8/cf/PrintSeedsWithDeserializeLambdaMethodTest.java
@@ -53,6 +53,7 @@
         .addProgramClasses(getClasses())
         .setMinApi(parameters.getApiLevel())
         .addKeepMainRule(getMainClass())
+        .addDontWarnSerializedLambda()
         .addPrintSeeds()
         .allowStdoutMessages()
         .noMinification()
diff --git a/src/test/java/com/android/tools/r8/cf/UnusedMultiNewArrayTest.java b/src/test/java/com/android/tools/r8/cf/UnusedMultiNewArrayTest.java
index 5b9ad45..0820b25 100644
--- a/src/test/java/com/android/tools/r8/cf/UnusedMultiNewArrayTest.java
+++ b/src/test/java/com/android/tools/r8/cf/UnusedMultiNewArrayTest.java
@@ -20,7 +20,7 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimes().build();
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
   }
 
   public UnusedMultiNewArrayTest(TestParameters parameters) {
@@ -32,7 +32,8 @@
     testForR8(parameters.getBackend())
         .addProgramClasses(TestClass.class)
         .addKeepMainRule(TestClass.class)
-        .setMinApi(parameters.getRuntime())
+        .addDontWarn(A.class)
+        .setMinApi(parameters.getApiLevel())
         .compile();
   }
 
diff --git a/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardModifyDiagnosticsLevelTest.java b/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardModifyDiagnosticsLevelTest.java
index bac9468..ffe8230 100644
--- a/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardModifyDiagnosticsLevelTest.java
+++ b/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardModifyDiagnosticsLevelTest.java
@@ -18,6 +18,8 @@
 import com.android.tools.r8.checkdiscarded.testclasses.Main;
 import com.android.tools.r8.checkdiscarded.testclasses.UnusedClass;
 import com.android.tools.r8.checkdiscarded.testclasses.UsedClass;
+import com.android.tools.r8.checkdiscarded.testclasses.WillBeGone;
+import com.android.tools.r8.checkdiscarded.testclasses.WillStay;
 import com.android.tools.r8.errors.CheckDiscardDiagnostic;
 import com.android.tools.r8.utils.InternalOptions;
 import com.google.common.collect.ImmutableList;
@@ -79,7 +81,8 @@
   public void dontFailCompilationOnCheckDiscardedFailure() {
     try {
       testForR8(Backend.DEX)
-          .addProgramClasses(UnusedClass.class, UsedClass.class, Main.class)
+          .addProgramClasses(
+              UnusedClass.class, UsedClass.class, Main.class, WillBeGone.class, WillStay.class)
           .addKeepMainRule(Main.class)
           .addKeepRules("-checkdiscard class " + UsedClass.class.getTypeName())
           .addOptionsModification(this::noInlining)
diff --git a/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardedTest.java b/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardedTest.java
index 61f8917..da2e4cb 100644
--- a/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardedTest.java
+++ b/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardedTest.java
@@ -46,7 +46,7 @@
   }
 
   private void compile(
-      Class annotation,
+      Class<?> annotation,
       boolean checkMembers,
       Consumer<TestDiagnosticMessages> onCompilationFailure) {
     R8FullTestBuilder builder = testForR8(Backend.DEX);
@@ -54,7 +54,8 @@
     try {
       R8TestCompileResult result =
           builder
-              .addProgramClasses(UnusedClass.class, UsedClass.class, Main.class)
+              .addProgramClasses(
+                  UnusedClass.class, UsedClass.class, Main.class, WillBeGone.class, WillStay.class)
               .addKeepMainRule(Main.class)
               .addKeepRules(checkDiscardRule(checkMembers, annotation))
               .minification(minify)
@@ -122,5 +123,4 @@
                             containsString("is invoked from"))));
     compile(WillStay.class, true, check);
   }
-
 }
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/AdaptVerticallyMergedResourceFileContentsTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/AdaptVerticallyMergedResourceFileContentsTest.java
index 0ebbb9d..090cb9e 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/AdaptVerticallyMergedResourceFileContentsTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/AdaptVerticallyMergedResourceFileContentsTest.java
@@ -12,7 +12,6 @@
 
 import com.android.tools.r8.DataEntryResource;
 import com.android.tools.r8.NeverClassInline;
-import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.utils.DataResourceConsumerForTesting;
@@ -51,9 +50,11 @@
             .addHorizontallyMergedClassesInspectorIf(
                 enableHorizontalClassMerging,
                 inspector -> inspector.assertMergedInto(B.class, A.class))
+            .addVerticallyMergedClassesInspector(
+                inspector -> inspector.assertMergedIntoSubtype(Parent.class))
             .compile()
             .run(parameters.getRuntime(), Main.class)
-            .assertSuccessWithOutputLines("a", "foo parent", "b")
+            .assertSuccessWithOutputLines("a", "b")
             .inspector();
 
     assertThat(codeInspector.clazz(Parent.class), not(isPresent()));
@@ -72,13 +73,7 @@
         ImmutableList.of(aClassSubject.getFinalName(), aClassSubject.getFinalName(), newClassName));
   }
 
-  @NeverClassInline
-  public static class Parent {
-    @NeverInline
-    public void foo() {
-      System.out.println("foo parent");
-    }
-  }
+  public static class Parent {}
 
   @NeverClassInline
   public static class A extends Parent {
@@ -95,13 +90,8 @@
   }
 
   public static class Main {
-    @NeverInline
-    public static void parent(Parent p) {
-      p.foo();
-    }
-
     public static void main(String[] args) {
-      parent(new A());
+      new A();
       new B();
     }
   }
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java
index 935e75e..369ebfd 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java
@@ -50,7 +50,6 @@
     }
   }
 
-  @NoHorizontalClassMerging
   @NeverClassInline
   public static class B extends A {}
 
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingProducesFieldCollisionTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingProducesFieldCollisionTest.java
index 34972f6..13cc54f 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingProducesFieldCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingProducesFieldCollisionTest.java
@@ -59,7 +59,6 @@
             });
   }
 
-  @NoVerticalClassMerging
   public static class Parent {
     @NeverInline
     public void foo() {
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonReboundFieldAccessOnMergedClassTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonReboundFieldAccessOnMergedClassTest.java
index 671f740..ce0425e 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonReboundFieldAccessOnMergedClassTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonReboundFieldAccessOnMergedClassTest.java
@@ -35,6 +35,7 @@
               }
             })
         .enableNeverClassInliningAnnotations()
+        .enableNoVerticalClassMergingAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByCheckCastTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByCheckCastTest.java
index 366800a..eba6de8 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByCheckCastTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByCheckCastTest.java
@@ -25,6 +25,7 @@
         .addOptionsModification(
             options ->
                 options.horizontalClassMergerOptions().enableIf(enableHorizontalClassMerging))
+        .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByInstanceOfTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByInstanceOfTest.java
index c8ad21d..47994ef 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByInstanceOfTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByInstanceOfTest.java
@@ -25,6 +25,7 @@
         .addOptionsModification(
             options ->
                 options.horizontalClassMergerOptions().enableIf(enableHorizontalClassMerging))
+        .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/NoIllegalClassAccessWithAccessModificationsTest.java b/src/test/java/com/android/tools/r8/classmerging/vertical/NoIllegalClassAccessWithAccessModificationsTest.java
index 35e27eb..f2edbce 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/NoIllegalClassAccessWithAccessModificationsTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/NoIllegalClassAccessWithAccessModificationsTest.java
@@ -42,6 +42,7 @@
         .addKeepMainRule(TestClass.class)
         .addVerticallyMergedClassesInspector(this::inspectVerticallyMergedClasses)
         .allowAccessModification()
+        .enableInliningAnnotations()
         .enableNoHorizontalClassMergingAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java b/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java
index 0f28809..c65809a 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java
@@ -37,6 +37,7 @@
         .addVerticallyMergedClassesInspector(
             inspector -> inspector.assertMergedIntoSubtype(C.class))
         .enableNeverClassInliningAnnotations()
+        .enableNoVerticalClassMergingAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java b/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java
index 8dc4e01..5468cae 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java
@@ -39,7 +39,6 @@
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import java.io.File;
@@ -336,7 +335,8 @@
           CF_DIR.resolve("ConflictingInterfaceSignaturesTest.class"),
           CF_DIR.resolve("ConflictingInterfaceSignaturesTest$A.class"),
           CF_DIR.resolve("ConflictingInterfaceSignaturesTest$B.class"),
-          CF_DIR.resolve("ConflictingInterfaceSignaturesTest$InterfaceImpl.class")
+          CF_DIR.resolve("ConflictingInterfaceSignaturesTest$InterfaceImpl.class"),
+          CF_DIR.resolve("NeverInline.class")
         };
     Set<String> preservedClassNames =
         ImmutableSet.of(
@@ -361,7 +361,8 @@
           JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest.class"),
           JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$A.class"),
           JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$B.class"),
-          JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$C.class")
+          JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$C.class"),
+          JAVA8_CF_DIR.resolve("NeverInline.class")
         };
     Set<String> preservedClassNames =
         ImmutableSet.of(
@@ -384,7 +385,8 @@
         new Path[] {
           JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest.class"),
           JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$A.class"),
-          JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$B.class")
+          JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$B.class"),
+          JAVA8_CF_DIR.resolve("NeverInline.class")
         };
     Set<String> preservedClassNames =
         ImmutableSet.of(
@@ -461,8 +463,14 @@
         new Path[] {
           CF_DIR.resolve("ProguardFieldMapTest.class"),
           CF_DIR.resolve("ProguardFieldMapTest$A.class"),
-          CF_DIR.resolve("ProguardFieldMapTest$B.class")
+          CF_DIR.resolve("ProguardFieldMapTest$B.class"),
+          CF_DIR.resolve("NeverClassInline.class")
         };
+    Set<String> preservedClassNamesWithoutClassMerging =
+        ImmutableSet.of(
+            "classmerging.ProguardFieldMapTest",
+            "classmerging.ProguardFieldMapTest$A",
+            "classmerging.ProguardFieldMapTest$B");
 
     // Try without vertical class merging, to check that output is as expected.
     R8TestCompileResult compileResultWithoutClassMerging =
@@ -478,7 +486,7 @@
                 .allowUnusedProguardConfigurationRules(),
             main,
             readProgramFiles(programFiles),
-            Predicates.alwaysTrue());
+            preservedClassNamesWithoutClassMerging::contains);
 
     ClassNameMapper mappingWithoutClassMerging =
         ClassNameMapper.mapperFromString(compileResultWithoutClassMerging.getProguardMap());
@@ -528,8 +536,14 @@
         new Path[] {
           CF_DIR.resolve("ProguardMethodMapTest.class"),
           CF_DIR.resolve("ProguardMethodMapTest$A.class"),
-          CF_DIR.resolve("ProguardMethodMapTest$B.class")
+          CF_DIR.resolve("ProguardMethodMapTest$B.class"),
+          CF_DIR.resolve("NeverClassInline.class")
         };
+    Set<String> preservedClassNamesWithoutClassMerging =
+        ImmutableSet.of(
+            "classmerging.ProguardMethodMapTest",
+            "classmerging.ProguardMethodMapTest$A",
+            "classmerging.ProguardMethodMapTest$B");
 
     // Try without vertical class merging, to check that output is as expected.
     R8TestCompileResult compileResultWithoutClassMerging =
@@ -545,7 +559,7 @@
                 .allowUnusedProguardConfigurationRules(),
             main,
             readProgramFiles(programFiles),
-            Predicates.alwaysTrue());
+            preservedClassNamesWithoutClassMerging::contains);
 
     ClassNameMapper mappingWithoutClassMerging =
         ClassNameMapper.mapperFromString(compileResultWithoutClassMerging.getProguardMap());
@@ -603,8 +617,14 @@
         new Path[] {
           CF_DIR.resolve("ProguardMethodMapTest.class"),
           CF_DIR.resolve("ProguardMethodMapTest$A.class"),
-          CF_DIR.resolve("ProguardMethodMapTest$B.class")
+          CF_DIR.resolve("ProguardMethodMapTest$B.class"),
+          CF_DIR.resolve("NeverClassInline.class")
         };
+    Set<String> preservedClassNamesWithoutClassMerging =
+        ImmutableSet.of(
+            "classmerging.ProguardMethodMapTest",
+            "classmerging.ProguardMethodMapTest$A",
+            "classmerging.ProguardMethodMapTest$B");
 
     // Try without vertical class merging, to check that output is as expected.
     R8TestCompileResult compileResultWithoutClassMerging =
@@ -624,7 +644,7 @@
                 .allowUnusedProguardConfigurationRules(),
             main,
             readProgramFiles(programFiles),
-            Predicates.alwaysTrue());
+            preservedClassNamesWithoutClassMerging::contains);
 
     ClassNameMapper mappingWithoutClassMerging =
         ClassNameMapper.mapperFromString(compileResultWithoutClassMerging.getProguardMap());
@@ -690,7 +710,8 @@
         new Path[] {
           CF_DIR.resolve("SubClassThatReferencesSuperMethod.class"),
           CF_DIR.resolve("SuperClassWithReferencedMethod.class"),
-          CF_DIR.resolve("SuperCallRewritingTest.class")
+          CF_DIR.resolve("SuperCallRewritingTest.class"),
+          CF_DIR.resolve("NeverInline.class")
         };
     Set<String> preservedClassNames =
         ImmutableSet.of(
@@ -721,7 +742,8 @@
     Path[] programFiles =
         new Path[] {
           CF_DIR.resolve("SuperClassWithReferencedMethod.class"),
-          CF_DIR.resolve("SuperCallRewritingTest.class")
+          CF_DIR.resolve("SuperCallRewritingTest.class"),
+          CF_DIR.resolve("NeverInline.class")
         };
 
     // Build SubClassThatReferencesMethod.
@@ -936,7 +958,8 @@
           CF_DIR.resolve("ConflictingInterfaceSignaturesTest.class"),
           CF_DIR.resolve("ConflictingInterfaceSignaturesTest$A.class"),
           CF_DIR.resolve("ConflictingInterfaceSignaturesTest$B.class"),
-          CF_DIR.resolve("ConflictingInterfaceSignaturesTest$InterfaceImpl.class")
+          CF_DIR.resolve("ConflictingInterfaceSignaturesTest$InterfaceImpl.class"),
+          CF_DIR.resolve("NeverInline.class")
         };
     Set<String> preservedClassNames =
         ImmutableSet.of(
@@ -958,7 +981,8 @@
         new Path[] {
           JAVA8_CF_DIR.resolve("MergeDefaultMethodIntoClassTest.class"),
           JAVA8_CF_DIR.resolve("MergeDefaultMethodIntoClassTest$A.class"),
-          JAVA8_CF_DIR.resolve("MergeDefaultMethodIntoClassTest$B.class")
+          JAVA8_CF_DIR.resolve("MergeDefaultMethodIntoClassTest$B.class"),
+          JAVA8_CF_DIR.resolve("NeverInline.class")
         };
     ImmutableSet<String> preservedClassNames =
         ImmutableSet.of(
@@ -1021,17 +1045,21 @@
     Path[] programFiles =
         new Path[] {
           CF_DIR.resolve("SimpleInterfaceAccessTest.class"),
+          CF_DIR.resolve("SimpleInterfaceAccessTest$1.class"),
           CF_DIR.resolve("SimpleInterfaceAccessTest$SimpleInterface.class"),
           CF_DIR.resolve("SimpleInterfaceAccessTest$OtherSimpleInterface.class"),
           CF_DIR.resolve("SimpleInterfaceAccessTest$OtherSimpleInterfaceImpl.class"),
           CF_DIR.resolve("pkg/SimpleInterfaceImplRetriever.class"),
-          CF_DIR.resolve("pkg/SimpleInterfaceImplRetriever$SimpleInterfaceImpl.class")
+          CF_DIR.resolve("pkg/SimpleInterfaceImplRetriever$SimpleInterfaceImpl.class"),
+          CF_DIR.resolve("pkg/SimpleInterfaceImplRetriever$1.class"),
+          CF_DIR.resolve("NeverInline.class")
         };
     // SimpleInterface cannot be merged into SimpleInterfaceImpl because SimpleInterfaceImpl
     // is in a different package and is not public.
     ImmutableSet<String> preservedClassNames =
         ImmutableSet.of(
             "classmerging.SimpleInterfaceAccessTest",
+            "classmerging.SimpleInterfaceAccessTest$1",
             "classmerging.SimpleInterfaceAccessTest$SimpleInterface",
             "classmerging.SimpleInterfaceAccessTest$OtherSimpleInterface",
             "classmerging.SimpleInterfaceAccessTest$OtherSimpleInterfaceImpl",
@@ -1081,8 +1109,10 @@
     Path[] programFiles =
         new Path[] {
           CF_DIR.resolve("TemplateMethodTest.class"),
+          CF_DIR.resolve("TemplateMethodTest$1.class"),
           CF_DIR.resolve("TemplateMethodTest$AbstractClass.class"),
-          CF_DIR.resolve("TemplateMethodTest$AbstractClassImpl.class")
+          CF_DIR.resolve("TemplateMethodTest$AbstractClassImpl.class"),
+          CF_DIR.resolve("NeverInline.class")
         };
     Set<String> preservedClassNames =
         ImmutableSet.of(
diff --git a/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java b/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java
index deb97d8..ff841d7 100644
--- a/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java
+++ b/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java
@@ -54,6 +54,7 @@
         .noMinification()
         .noTreeShaking()
         .addKeepAllAttributes()
+        .addDontWarnJetBrainsAnnotations()
         .setMode(CompilationMode.DEBUG)
         .setMinApi(parameters.getApiLevel())
         .compileWithExpectedDiagnostics(TestDiagnosticMessages::assertNoMessages);
diff --git a/src/test/java/com/android/tools/r8/desugar/InvokeSuperToRewrittenDefaultMethodTest.java b/src/test/java/com/android/tools/r8/desugar/InvokeSuperToRewrittenDefaultMethodTest.java
index f63c4d9..93e46d0 100644
--- a/src/test/java/com/android/tools/r8/desugar/InvokeSuperToRewrittenDefaultMethodTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/InvokeSuperToRewrittenDefaultMethodTest.java
@@ -106,7 +106,6 @@
     }
   }
 
-  @FunctionalInterface
   public interface CharConsumer extends Consumer<Character>, IntConsumer {
 
     void accept(char c);
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java
index f71c916..8397b6d 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java
@@ -174,6 +174,7 @@
                     configurationAlternative3(options, false, parameters))
         .addInnerClasses(BufferedReaderTest.class)
         .addKeepMainRule(TestClass.class)
+        .addDontWarnRetargetLibraryMembers()
         .setMinApi(parameters.getApiLevel())
         .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
         .enableInliningAnnotations()
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionForwardingTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionForwardingTest.java
index cf0d8ef..1d08bfa 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionForwardingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionForwardingTest.java
@@ -5,7 +5,6 @@
 package com.android.tools.r8.desugar.desugaredlibrary;
 
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
 import java.util.ArrayList;
@@ -15,7 +14,6 @@
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Spliterator;
-import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -64,6 +62,7 @@
         .addKeepMainRule(Executor.class)
         .setMinApi(parameters.getApiLevel())
         .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
+        .addDontWarnEmulatedLibraryClasses()
         .compile()
         .addDesugaredCoreLibraryRunClassPath(
             this::buildDesugaredLibrary,
@@ -115,21 +114,18 @@
       return false;
     }
 
-    @NotNull
     @Override
     public Iterator<E> iterator() {
       return null;
     }
 
-    @NotNull
     @Override
     public Object[] toArray() {
       return new Object[0];
     }
 
-    @NotNull
     @Override
-    public <T> T[] toArray(@NotNull T[] a) {
+    public <T> T[] toArray(T[] a) {
       return null;
     }
 
@@ -144,27 +140,27 @@
     }
 
     @Override
-    public boolean containsAll(@NotNull Collection<?> c) {
+    public boolean containsAll(Collection<?> c) {
       return false;
     }
 
     @Override
-    public boolean addAll(@NotNull Collection<? extends E> c) {
+    public boolean addAll(Collection<? extends E> c) {
       return false;
     }
 
     @Override
-    public boolean addAll(int index, @NotNull Collection<? extends E> c) {
+    public boolean addAll(int index, Collection<? extends E> c) {
       return false;
     }
 
     @Override
-    public boolean removeAll(@NotNull Collection<?> c) {
+    public boolean removeAll(Collection<?> c) {
       return false;
     }
 
     @Override
-    public boolean retainAll(@NotNull Collection<?> c) {
+    public boolean retainAll(Collection<?> c) {
       return false;
     }
 
@@ -199,19 +195,16 @@
       return 0;
     }
 
-    @NotNull
     @Override
     public ListIterator<E> listIterator() {
       return null;
     }
 
-    @NotNull
     @Override
     public ListIterator<E> listIterator(int index) {
       return null;
     }
 
-    @NotNull
     @Override
     public List<E> subList(int fromIndex, int toIndex) {
       return null;
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionInterfaceSuperTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionInterfaceSuperTest.java
index 4bd591e..e26c8c3 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionInterfaceSuperTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionInterfaceSuperTest.java
@@ -7,7 +7,6 @@
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
 import java.util.Collection;
@@ -15,7 +14,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.function.Predicate;
-import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -82,6 +80,8 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(CustomCollectionInterfaceSuperTest.class)
         .addKeepMainRule(Main.class)
+        .addDontWarnEmulatedLibraryClasses()
+        .addDontWarnVivifiedClasses()
         .setMinApi(parameters.getApiLevel())
         .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
         .compile()
@@ -153,21 +153,18 @@
       return false;
     }
 
-    @NotNull
     @Override
     public Iterator<E> iterator() {
       return Collections.emptyIterator();
     }
 
-    @NotNull
     @Override
     public Object[] toArray() {
       return new Object[0];
     }
 
-    @NotNull
     @Override
-    public <T> T[] toArray(@NotNull T[] a) {
+    public <T> T[] toArray(T[] a) {
       return a;
     }
 
@@ -182,22 +179,22 @@
     }
 
     @Override
-    public boolean containsAll(@NotNull Collection<?> c) {
+    public boolean containsAll(Collection<?> c) {
       return false;
     }
 
     @Override
-    public boolean addAll(@NotNull Collection<? extends E> c) {
+    public boolean addAll(Collection<? extends E> c) {
       return false;
     }
 
     @Override
-    public boolean removeAll(@NotNull Collection<?> c) {
+    public boolean removeAll(Collection<?> c) {
       return false;
     }
 
     @Override
-    public boolean retainAll(@NotNull Collection<?> c) {
+    public boolean retainAll(Collection<?> c) {
       return false;
     }
 
@@ -226,21 +223,18 @@
       return false;
     }
 
-    @NotNull
     @Override
     public Iterator<E> iterator() {
       return Collections.emptyIterator();
     }
 
-    @NotNull
     @Override
     public Object[] toArray() {
       return new Object[0];
     }
 
-    @NotNull
     @Override
-    public <T> T[] toArray(@NotNull T[] a) {
+    public <T> T[] toArray(T[] a) {
       return a;
     }
 
@@ -255,22 +249,22 @@
     }
 
     @Override
-    public boolean containsAll(@NotNull Collection<?> c) {
+    public boolean containsAll(Collection<?> c) {
       return false;
     }
 
     @Override
-    public boolean addAll(@NotNull Collection<? extends E> c) {
+    public boolean addAll(Collection<? extends E> c) {
       return false;
     }
 
     @Override
-    public boolean removeAll(@NotNull Collection<?> c) {
+    public boolean removeAll(Collection<?> c) {
       return false;
     }
 
     @Override
-    public boolean retainAll(@NotNull Collection<?> c) {
+    public boolean retainAll(Collection<?> c) {
       return false;
     }
 
@@ -299,21 +293,18 @@
       return false;
     }
 
-    @NotNull
     @Override
     public Iterator<E> iterator() {
       return Collections.emptyIterator();
     }
 
-    @NotNull
     @Override
     public Object[] toArray() {
       return new Object[0];
     }
 
-    @NotNull
     @Override
-    public <T> T[] toArray(@NotNull T[] a) {
+    public <T> T[] toArray(T[] a) {
       return a;
     }
 
@@ -328,22 +319,22 @@
     }
 
     @Override
-    public boolean containsAll(@NotNull Collection<?> c) {
+    public boolean containsAll(Collection<?> c) {
       return false;
     }
 
     @Override
-    public boolean addAll(@NotNull Collection<? extends E> c) {
+    public boolean addAll(Collection<? extends E> c) {
       return false;
     }
 
     @Override
-    public boolean removeAll(@NotNull Collection<?> c) {
+    public boolean removeAll(Collection<?> c) {
       return false;
     }
 
     @Override
-    public boolean retainAll(@NotNull Collection<?> c) {
+    public boolean retainAll(Collection<?> c) {
       return false;
     }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionSuperCallsTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionSuperCallsTest.java
index 0707ab9..6d78e52 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionSuperCallsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionSuperCallsTest.java
@@ -106,6 +106,7 @@
         testForR8(parameters.getBackend())
             .addInnerClasses(CustomCollectionSuperCallsTest.class)
             .addKeepMainRule(Executor.class)
+            .addDontWarnVivifiedClasses()
             .setMinApi(parameters.getApiLevel())
             .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
             .compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java
index 0947a55..cd832f4 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java
@@ -24,8 +24,6 @@
 import java.util.List;
 import java.util.SortedSet;
 import java.util.stream.Stream;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -97,10 +95,7 @@
               .disableDesugaring()
               .compile()
               .assertNoMessages()
-              .inspect(
-                  inspector -> {
-                    this.assertCustomCollectionCallsCorrect(inspector);
-                  })
+              .inspect(this::assertCustomCollectionCallsCorrect)
               .addDesugaredCoreLibraryRunClassPath(
                   this::buildDesugaredLibrary,
                   parameters.getApiLevel(),
@@ -138,6 +133,8 @@
             .addInnerClasses(CustomCollectionTest.class)
             .setMinApi(parameters.getApiLevel())
             .addKeepClassAndMembersRules(Executor.class)
+            .addDontWarnEmulatedLibraryClasses()
+            .addDontWarnVivifiedClasses()
             .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
             .compile()
             .inspect(this::assertCustomCollectionCallsCorrect)
@@ -161,7 +158,8 @@
               .allMatch(
                   instr ->
                       instr.toString().contains("$-EL")
-                          || instr.toString().contains("Comparator$-CC")));
+                          || instr.toString().contains("Comparator$-CC")
+                          || instr.toString().contains("Stream$-CC")));
     } else {
       assertTrue(direct.streamInstructions().noneMatch(instr -> instr.toString().contains("$-EL")));
     }
@@ -178,7 +176,8 @@
             .allMatch(
                 instr ->
                     instr.toString().contains("$-EL")
-                        || instr.toString().contains("Comparator$-CC")));
+                        || instr.toString().contains("Comparator$-CC")
+                        || instr.toString().contains("Stream$-CC")));
     inherited.streamInstructions().forEach(this::assertInheritedDispatchCorrect);
   }
 
@@ -311,21 +310,18 @@
       return false;
     }
 
-    @NotNull
     @Override
     public Iterator<E> iterator() {
       return Collections.emptyIterator();
     }
 
-    @NotNull
     @Override
     public Object[] toArray() {
       return new Object[0];
     }
 
-    @NotNull
     @Override
-    public <T> T[] toArray(@NotNull T[] a) {
+    public <T> T[] toArray(T[] a) {
       return a;
     }
 
@@ -340,22 +336,22 @@
     }
 
     @Override
-    public boolean containsAll(@NotNull Collection<?> c) {
+    public boolean containsAll(Collection<?> c) {
       return false;
     }
 
     @Override
-    public boolean addAll(@NotNull Collection<? extends E> c) {
+    public boolean addAll(Collection<? extends E> c) {
       return false;
     }
 
     @Override
-    public boolean removeAll(@NotNull Collection<?> c) {
+    public boolean removeAll(Collection<?> c) {
       return false;
     }
 
     @Override
-    public boolean retainAll(@NotNull Collection<?> c) {
+    public boolean retainAll(Collection<?> c) {
       return false;
     }
 
@@ -369,25 +365,21 @@
   // Implements directly a core library interface which implements other library interfaces.
   static class CustomSortedSet<E> implements SortedSet<E> {
 
-    @Nullable
     @Override
     public Comparator<? super E> comparator() {
       return null;
     }
 
-    @NotNull
     @Override
     public SortedSet<E> subSet(E fromElement, E toElement) {
       return new CustomSortedSet<>();
     }
 
-    @NotNull
     @Override
     public SortedSet<E> headSet(E toElement) {
       return new CustomSortedSet<>();
     }
 
-    @NotNull
     @Override
     public SortedSet<E> tailSet(E fromElement) {
       return new CustomSortedSet<>();
@@ -418,21 +410,18 @@
       return false;
     }
 
-    @NotNull
     @Override
     public Iterator<E> iterator() {
       return Collections.emptyIterator();
     }
 
-    @NotNull
     @Override
     public Object[] toArray() {
       return new Object[0];
     }
 
-    @NotNull
     @Override
-    public <T> T[] toArray(@NotNull T[] a) {
+    public <T> T[] toArray(T[] a) {
       return a;
     }
 
@@ -447,7 +436,7 @@
     }
 
     @Override
-    public boolean addAll(@NotNull Collection c) {
+    public boolean addAll(Collection c) {
       return false;
     }
 
@@ -455,17 +444,17 @@
     public void clear() {}
 
     @Override
-    public boolean removeAll(@NotNull Collection c) {
+    public boolean removeAll(Collection c) {
       return false;
     }
 
     @Override
-    public boolean retainAll(@NotNull Collection c) {
+    public boolean retainAll(Collection c) {
       return false;
     }
 
     @Override
-    public boolean containsAll(@NotNull Collection c) {
+    public boolean containsAll(Collection c) {
       return false;
     }
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/FeatureSplitTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/FeatureSplitTest.java
index d4f08fc..16377244 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/FeatureSplitTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/FeatureSplitTest.java
@@ -247,6 +247,7 @@
                   SplitterTestBase.simpleSplitProvider(
                       builder, feature2Path, temp, FeatureClass2.class))
           .addKeepAllClassesRule()
+          .addDontWarnEmulatedLibraryClasses()
           .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
           .compile()
           .writeToZip(basePath);
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterableTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterableTest.java
index f998b89..0c16701 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterableTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterableTest.java
@@ -19,7 +19,6 @@
 import java.util.function.Consumer;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
-import org.jetbrains.annotations.NotNull;
 import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -138,7 +137,6 @@
       this.collection = collection;
     }
 
-    @NotNull
     @Override
     public Iterator<E> iterator() {
       return collection.iterator();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaTimeTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaTimeTest.java
index 31bbcbd..e030d3f 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaTimeTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaTimeTest.java
@@ -264,6 +264,7 @@
         testForR8(parameters.getBackend())
             .addInnerClasses(JavaTimeTest.class)
             .addKeepMainRule(TestClass.class)
+            .addDontWarnRetargetLibraryMembers()
             .enableNoVerticalClassMergingAnnotations()
             .setMinApi(parameters.getApiLevel())
             .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MinimalInterfaceSuperTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MinimalInterfaceSuperTest.java
index 616ec2c..1e2a8e8 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MinimalInterfaceSuperTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MinimalInterfaceSuperTest.java
@@ -12,7 +12,6 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.function.Predicate;
-import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -46,6 +45,7 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(MinimalInterfaceSuperTest.class)
         .addKeepMainRule(Main.class)
+        .addDontWarnVivifiedClasses()
         .setMinApi(parameters.getApiLevel())
         .enableCoreLibraryDesugaring(parameters.getApiLevel())
         .compile()
@@ -71,7 +71,6 @@
   }
 
   static class Col1<E> extends AbstractCollection<E> implements Col1Itf<E> {
-    @NotNull
     @Override
     public Iterator<E> iterator() {
       return Collections.emptyIterator();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoDesugaredLibraryDexFileTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoDesugaredLibraryDexFileTest.java
index a6ea994..f0e55c0 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoDesugaredLibraryDexFileTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoDesugaredLibraryDexFileTest.java
@@ -16,8 +16,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.SortedSet;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
 import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -97,25 +95,21 @@
   // Implements directly a core library interface which implements other library interfaces.
   static class CustomSortedSet<E> implements SortedSet<E> {
 
-    @Nullable
     @Override
     public Comparator<? super E> comparator() {
       return null;
     }
 
-    @NotNull
     @Override
     public SortedSet<E> subSet(E fromElement, E toElement) {
       return new CustomSortedSet<>();
     }
 
-    @NotNull
     @Override
     public SortedSet<E> headSet(E toElement) {
       return new CustomSortedSet<>();
     }
 
-    @NotNull
     @Override
     public SortedSet<E> tailSet(E fromElement) {
       return new CustomSortedSet<>();
@@ -146,21 +140,18 @@
       return false;
     }
 
-    @NotNull
     @Override
     public Iterator<E> iterator() {
       return Collections.emptyIterator();
     }
 
-    @NotNull
     @Override
     public Object[] toArray() {
       return new Object[0];
     }
 
-    @NotNull
     @Override
-    public <T> T[] toArray(@NotNull T[] a) {
+    public <T> T[] toArray(T[] a) {
       return a;
     }
 
@@ -175,7 +166,7 @@
     }
 
     @Override
-    public boolean addAll(@NotNull Collection c) {
+    public boolean addAll(Collection c) {
       return false;
     }
 
@@ -183,17 +174,17 @@
     public void clear() {}
 
     @Override
-    public boolean removeAll(@NotNull Collection c) {
+    public boolean removeAll(Collection c) {
       return false;
     }
 
     @Override
-    public boolean retainAll(@NotNull Collection c) {
+    public boolean retainAll(Collection c) {
       return false;
     }
 
     @Override
-    public boolean containsAll(@NotNull Collection c) {
+    public boolean containsAll(Collection c) {
       return false;
     }
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoForwardingMethodsTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoForwardingMethodsTest.java
index 98ad7dc..b8f2a9f 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoForwardingMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoForwardingMethodsTest.java
@@ -17,8 +17,6 @@
 import java.util.List;
 import java.util.Objects;
 import java.util.SortedSet;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -67,6 +65,7 @@
         .setMinApi(parameters.getApiLevel())
         .addKeepClassAndMembersRules(Executor.class)
         .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
+        .addDontWarnEmulatedLibraryClasses()
         .compile()
         .inspect(this::assertNoForwardingStreamMethod)
         .addDesugaredCoreLibraryRunClassPath(
@@ -103,25 +102,21 @@
   // Implements directly a core library interface which implements other library interfaces.
   static class CustomSortedSet<E> implements SortedSet<E> {
 
-    @Nullable
     @Override
     public Comparator<? super E> comparator() {
       return null;
     }
 
-    @NotNull
     @Override
     public SortedSet<E> subSet(E fromElement, E toElement) {
       return new CustomSortedSet<>();
     }
 
-    @NotNull
     @Override
     public SortedSet<E> headSet(E toElement) {
       return new CustomSortedSet<>();
     }
 
-    @NotNull
     @Override
     public SortedSet<E> tailSet(E fromElement) {
       return new CustomSortedSet<>();
@@ -152,21 +147,18 @@
       return false;
     }
 
-    @NotNull
     @Override
     public Iterator<E> iterator() {
       return Collections.emptyIterator();
     }
 
-    @NotNull
     @Override
     public Object[] toArray() {
       return new Object[0];
     }
 
-    @NotNull
     @Override
-    public <T> T[] toArray(@NotNull T[] a) {
+    public <T> T[] toArray(T[] a) {
       return a;
     }
 
@@ -181,7 +173,7 @@
     }
 
     @Override
-    public boolean addAll(@NotNull Collection c) {
+    public boolean addAll(Collection c) {
       return false;
     }
 
@@ -189,17 +181,17 @@
     public void clear() {}
 
     @Override
-    public boolean removeAll(@NotNull Collection c) {
+    public boolean removeAll(Collection c) {
       return false;
     }
 
     @Override
-    public boolean retainAll(@NotNull Collection c) {
+    public boolean retainAll(Collection c) {
       return false;
     }
 
     @Override
-    public boolean containsAll(@NotNull Collection c) {
+    public boolean containsAll(Collection c) {
       return false;
     }
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java
index 69f366f..7dde5dc 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java
@@ -120,6 +120,7 @@
           testForR8(parameters.getBackend())
               .minification(minifying)
               .addKeepMainRule(TEST_CLASS)
+              .addDontWarnEmulatedLibraryClasses()
               .addProgramFiles(Paths.get(ToolHelper.EXAMPLES_JAVA9_BUILD_DIR + "stream.jar"))
               .setMinApi(parameters.getApiLevel())
               .addOptionsModification(
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetOverrideTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetOverrideTest.java
index 59dbd1b..bacc4ec 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetOverrideTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetOverrideTest.java
@@ -5,8 +5,6 @@
 package com.android.tools.r8.desugar.desugaredlibrary;
 
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper.DexVm.Version;
-import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.BooleanUtils;
 import java.time.Instant;
 import java.time.ZonedDateTime;
@@ -64,6 +62,9 @@
         testForR8(Backend.DEX)
             .addKeepMainRule(Executor.class)
             .addInnerClasses(RetargetOverrideTest.class)
+            .addDontWarnRetargetLibraryMembers()
+            .addDontWarnTimeConversions()
+            .addDontWarnVivifiedClasses()
             .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
             .setMinApi(parameters.getApiLevel())
             .compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/SynchronizedCollectionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/SynchronizedCollectionTest.java
index 2ad9b4f..b1234ab 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/SynchronizedCollectionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/SynchronizedCollectionTest.java
@@ -79,6 +79,7 @@
     testForR8(parameters.getBackend())
         .addProgramFiles(INPUT_JAR)
         .addKeepMainRule(MAIN_CLASS)
+        .addDontWarnEmulatedLibraryClasses()
         .setMinApi(parameters.getApiLevel())
         .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
         .compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/CallBackConversionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/CallBackConversionTest.java
index cb8c24f..71e690e 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/CallBackConversionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/CallBackConversionTest.java
@@ -172,6 +172,7 @@
         .setMinApi(parameters.getApiLevel())
         .addProgramClasses(Impl.class)
         .addLibraryClasses(CustomLibClass.class)
+        .addDontWarnVivifiedClasses()
         .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
         .compile()
         .inspect(this::assertLibraryOverridesThere)
@@ -189,6 +190,7 @@
         .setMinApi(parameters.getApiLevel())
         .addProgramClasses(Impl.class)
         .addLibraryClasses(CustomLibClass.class)
+        .addDontWarnVivifiedClasses()
         .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
         .compile()
         .inspect(this::assertLibraryOverridesThere)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java
index 5c01507..d769448 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java
@@ -23,7 +23,6 @@
 import java.util.List;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
-import org.jetbrains.annotations.NotNull;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -155,6 +154,7 @@
                 opt.desugaredLibraryConfiguration =
                     configurationWithSupportAllCallbacksFromLibrary(
                         opt, false, parameters, supportAllCallbacksFromLibrary))
+        .addDontWarnVivifiedClasses()
         .compile()
         .inspect(this::assertDoubleForEach)
         .inspect(this::assertWrapperMethodsPresent)
@@ -224,15 +224,13 @@
       return Collections.<E>singletonList(null).iterator();
     }
 
-    @NotNull
     @Override
     public Object[] toArray() {
       return new Object[0];
     }
 
-    @NotNull
     @Override
-    public <T> T[] toArray(@NotNull T[] a) {
+    public <T> T[] toArray(T[] a) {
       return null;
     }
 
@@ -247,22 +245,22 @@
     }
 
     @Override
-    public boolean containsAll(@NotNull Collection<?> c) {
+    public boolean containsAll(Collection<?> c) {
       return false;
     }
 
     @Override
-    public boolean addAll(@NotNull Collection<? extends E> c) {
+    public boolean addAll(Collection<? extends E> c) {
       return false;
     }
 
     @Override
-    public boolean removeAll(@NotNull Collection<?> c) {
+    public boolean removeAll(Collection<?> c) {
       return false;
     }
 
     @Override
-    public boolean retainAll(@NotNull Collection<?> c) {
+    public boolean retainAll(Collection<?> c) {
       return false;
     }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIProgramTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIProgramTest.java
index b62045b..4b8c213 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIProgramTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIProgramTest.java
@@ -84,6 +84,7 @@
             .addKeepMainRule(Executor.class)
             .addProgramClasses(Executor.class, MyMap.class)
             .addLibraryClasses(CustomLibClass.class)
+            .addDontWarnVivifiedClasses()
             .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
             .compile()
             .inspect(this::assertDupMethod)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/FunctionConversionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/FunctionConversionTest.java
index 6afc3a5..24588c6 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/FunctionConversionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/FunctionConversionTest.java
@@ -174,7 +174,7 @@
 
       private Object1 field;
 
-      private Object2(Object1 o) {
+      Object2(Object1 o) {
         this.field = o;
       }
     }
@@ -183,7 +183,7 @@
 
       private Object2 field;
 
-      private Object3(Object2 o) {
+      Object3(Object2 o) {
         this.field = o;
       }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/GetGenericInterfaceTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/GetGenericInterfaceTest.java
index 249f26f..1ba5416 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/GetGenericInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/GetGenericInterfaceTest.java
@@ -24,8 +24,6 @@
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -75,6 +73,7 @@
         testForR8(Backend.DEX)
             .addInnerClasses(GetGenericInterfaceTest.class)
             .addKeepMainRule(Executor.class)
+            .addDontWarnRetargetLibraryMembers()
             .noMinification()
             .setMinApi(parameters.getApiLevel())
             .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
@@ -301,7 +300,6 @@
       return null;
     }
 
-    @Nullable
     @Override
     public V put(K k, V v) {
       return null;
@@ -313,46 +311,43 @@
     }
 
     @Override
-    public void putAll(@NotNull Map<? extends K, ? extends V> map) {}
+    public void putAll(Map<? extends K, ? extends V> map) {}
 
     @Override
     public void clear() {}
 
-    @NotNull
     @Override
     public Set<K> keySet() {
       return null;
     }
 
-    @NotNull
     @Override
     public Collection<V> values() {
       return null;
     }
 
-    @NotNull
     @Override
     public Set<Entry<K, V>> entrySet() {
       return null;
     }
 
     @Override
-    public V putIfAbsent(@NotNull K k, V v) {
+    public V putIfAbsent(K k, V v) {
       return null;
     }
 
     @Override
-    public boolean remove(@NotNull Object o, Object o1) {
+    public boolean remove(Object o, Object o1) {
       return false;
     }
 
     @Override
-    public boolean replace(@NotNull K k, @NotNull V v, @NotNull V v1) {
+    public boolean replace(K k, V v, V v1) {
       return false;
     }
 
     @Override
-    public V replace(@NotNull K k, @NotNull V v) {
+    public V replace(K k, V v) {
       return null;
     }
   }
@@ -394,7 +389,6 @@
       return null;
     }
 
-    @Nullable
     @Override
     public V put(K k, V v) {
       return null;
@@ -406,46 +400,43 @@
     }
 
     @Override
-    public void putAll(@NotNull Map<? extends K, ? extends V> map) {}
+    public void putAll(Map<? extends K, ? extends V> map) {}
 
     @Override
     public void clear() {}
 
-    @NotNull
     @Override
     public Set<K> keySet() {
       return null;
     }
 
-    @NotNull
     @Override
     public Collection<V> values() {
       return null;
     }
 
-    @NotNull
     @Override
     public Set<Entry<K, V>> entrySet() {
       return null;
     }
 
     @Override
-    public V putIfAbsent(@NotNull K k, V v) {
+    public V putIfAbsent(K k, V v) {
       return null;
     }
 
     @Override
-    public boolean remove(@NotNull Object o, Object o1) {
+    public boolean remove(Object o, Object o1) {
       return false;
     }
 
     @Override
-    public boolean replace(@NotNull K k, @NotNull V v, @NotNull V v1) {
+    public boolean replace(K k, V v, V v1) {
       return false;
     }
 
     @Override
-    public V replace(@NotNull K k, @NotNull V v) {
+    public V replace(K k, V v) {
       return null;
     }
 
@@ -475,21 +466,18 @@
       return false;
     }
 
-    @NotNull
     @Override
     public Iterator<E> iterator() {
       return null;
     }
 
-    @NotNull
     @Override
     public Object[] toArray() {
       return new Object[0];
     }
 
-    @NotNull
     @Override
-    public <T> T[] toArray(@NotNull T[] ts) {
+    public <T> T[] toArray(T[] ts) {
       return null;
     }
 
@@ -504,27 +492,27 @@
     }
 
     @Override
-    public boolean containsAll(@NotNull Collection<?> collection) {
+    public boolean containsAll(Collection<?> collection) {
       return false;
     }
 
     @Override
-    public boolean addAll(@NotNull Collection<? extends E> collection) {
+    public boolean addAll(Collection<? extends E> collection) {
       return false;
     }
 
     @Override
-    public boolean addAll(int i, @NotNull Collection<? extends E> collection) {
+    public boolean addAll(int i, Collection<? extends E> collection) {
       return false;
     }
 
     @Override
-    public boolean removeAll(@NotNull Collection<?> collection) {
+    public boolean removeAll(Collection<?> collection) {
       return false;
     }
 
     @Override
-    public boolean retainAll(@NotNull Collection<?> collection) {
+    public boolean retainAll(Collection<?> collection) {
       return false;
     }
 
@@ -559,19 +547,16 @@
       return 0;
     }
 
-    @NotNull
     @Override
     public ListIterator<E> listIterator() {
       return null;
     }
 
-    @NotNull
     @Override
     public ListIterator<E> listIterator(int i) {
       return null;
     }
 
-    @NotNull
     @Override
     public List<E> subList(int i, int i1) {
       return null;
@@ -603,21 +588,18 @@
       return false;
     }
 
-    @NotNull
     @Override
     public Iterator<E> iterator() {
       return null;
     }
 
-    @NotNull
     @Override
     public Object[] toArray() {
       return new Object[0];
     }
 
-    @NotNull
     @Override
-    public <T> T[] toArray(@NotNull T[] ts) {
+    public <T> T[] toArray(T[] ts) {
       return null;
     }
 
@@ -632,27 +614,27 @@
     }
 
     @Override
-    public boolean containsAll(@NotNull Collection<?> collection) {
+    public boolean containsAll(Collection<?> collection) {
       return false;
     }
 
     @Override
-    public boolean addAll(@NotNull Collection<? extends E> collection) {
+    public boolean addAll(Collection<? extends E> collection) {
       return false;
     }
 
     @Override
-    public boolean addAll(int i, @NotNull Collection<? extends E> collection) {
+    public boolean addAll(int i, Collection<? extends E> collection) {
       return false;
     }
 
     @Override
-    public boolean removeAll(@NotNull Collection<?> collection) {
+    public boolean removeAll(Collection<?> collection) {
       return false;
     }
 
     @Override
-    public boolean retainAll(@NotNull Collection<?> collection) {
+    public boolean retainAll(Collection<?> collection) {
       return false;
     }
 
@@ -687,19 +669,16 @@
       return 0;
     }
 
-    @NotNull
     @Override
     public ListIterator<E> listIterator() {
       return null;
     }
 
-    @NotNull
     @Override
     public ListIterator<E> listIterator(int i) {
       return null;
     }
 
-    @NotNull
     @Override
     public List<E> subList(int i, int i1) {
       return null;
@@ -710,7 +689,6 @@
   }
 
   static class CollectionMapImplements2<R, C> implements Iterable<R>, Map<R, C> {
-    @NotNull
     @Override
     public Iterator<R> iterator() {
       return null;
@@ -741,7 +719,6 @@
       return null;
     }
 
-    @Nullable
     @Override
     public C put(R r, C c) {
       return null;
@@ -753,24 +730,21 @@
     }
 
     @Override
-    public void putAll(@NotNull Map<? extends R, ? extends C> map) {}
+    public void putAll(Map<? extends R, ? extends C> map) {}
 
     @Override
     public void clear() {}
 
-    @NotNull
     @Override
     public Set<R> keySet() {
       return null;
     }
 
-    @NotNull
     @Override
     public Collection<C> values() {
       return null;
     }
 
-    @NotNull
     @Override
     public Set<Entry<R, C>> entrySet() {
       return null;
@@ -778,7 +752,6 @@
   }
 
   static class CollectionMapExtendImplement<R, C> extends HashMap<R, C> implements Iterable<R> {
-    @NotNull
     @Override
     public Iterator<R> iterator() {
       return null;
@@ -809,7 +782,6 @@
       return null;
     }
 
-    @Nullable
     @Override
     public C put(R r, C c) {
       return null;
@@ -821,24 +793,21 @@
     }
 
     @Override
-    public void putAll(@NotNull Map<? extends R, ? extends C> map) {}
+    public void putAll(Map<? extends R, ? extends C> map) {}
 
     @Override
     public void clear() {}
 
-    @NotNull
     @Override
     public Set<R> keySet() {
       return null;
     }
 
-    @NotNull
     @Override
     public Collection<C> values() {
       return null;
     }
 
-    @NotNull
     @Override
     public Set<Entry<R, C>> entrySet() {
       return null;
@@ -847,7 +816,6 @@
 
   static class CollectionMapImplements2Integer1<C>
       implements Iterable<PathClassLoader>, Map<PathClassLoader, C> {
-    @NotNull
     @Override
     public Iterator<PathClassLoader> iterator() {
       return null;
@@ -878,7 +846,6 @@
       return null;
     }
 
-    @Nullable
     @Override
     public C put(PathClassLoader unsafe, C c) {
       return null;
@@ -890,24 +857,21 @@
     }
 
     @Override
-    public void putAll(@NotNull Map<? extends PathClassLoader, ? extends C> map) {}
+    public void putAll(Map<? extends PathClassLoader, ? extends C> map) {}
 
     @Override
     public void clear() {}
 
-    @NotNull
     @Override
     public Set<PathClassLoader> keySet() {
       return null;
     }
 
-    @NotNull
     @Override
     public Collection<C> values() {
       return null;
     }
 
-    @NotNull
     @Override
     public Set<Entry<PathClassLoader, C>> entrySet() {
       return null;
@@ -916,7 +880,6 @@
 
   static class CollectionMapExtendImplementInteger1<C> extends HashMap<PathClassLoader, C>
       implements Iterable<PathClassLoader> {
-    @NotNull
     @Override
     public Iterator<PathClassLoader> iterator() {
       return null;
@@ -924,7 +887,6 @@
   }
 
   static class CollectionMapImplements2Integer2<R> implements Iterable<R>, Map<R, PathClassLoader> {
-    @NotNull
     @Override
     public Iterator<R> iterator() {
       return null;
@@ -955,7 +917,6 @@
       return null;
     }
 
-    @Nullable
     @Override
     public PathClassLoader put(R r, PathClassLoader unsafe) {
       return null;
@@ -967,24 +928,21 @@
     }
 
     @Override
-    public void putAll(@NotNull Map<? extends R, ? extends PathClassLoader> map) {}
+    public void putAll(Map<? extends R, ? extends PathClassLoader> map) {}
 
     @Override
     public void clear() {}
 
-    @NotNull
     @Override
     public Set<R> keySet() {
       return null;
     }
 
-    @NotNull
     @Override
     public Collection<PathClassLoader> values() {
       return null;
     }
 
-    @NotNull
     @Override
     public Set<Entry<R, PathClassLoader>> entrySet() {
       return null;
@@ -993,7 +951,6 @@
 
   static class CollectionMapExtendImplementInteger2<R> extends HashMap<R, PathClassLoader>
       implements Iterable<R> {
-    @NotNull
     @Override
     public Iterator<R> iterator() {
       return null;
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java
index 89748a7..aa5393a 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java
@@ -133,7 +133,8 @@
             .addKeepAllClassesRule()
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
             .setMinApi(parameters.getApiLevel())
-            .allowDiagnosticWarningMessages();
+            .allowDiagnosticWarningMessages()
+            .addDontWarnJetBrains();
     KeepRuleConsumer keepRuleConsumer = null;
     if (desugarLibrary) {
       keepRuleConsumer = createKeepRuleConsumer(parameters);
diff --git a/src/test/java/com/android/tools/r8/desugar/enclosingmethod/EnclosingMethodRewriteTest.java b/src/test/java/com/android/tools/r8/desugar/enclosingmethod/EnclosingMethodRewriteTest.java
index 897f4a7..3e60058 100644
--- a/src/test/java/com/android/tools/r8/desugar/enclosingmethod/EnclosingMethodRewriteTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/enclosingmethod/EnclosingMethodRewriteTest.java
@@ -3,20 +3,26 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.desugar.enclosingmethod;
 
-import static org.hamcrest.CoreMatchers.containsString;
+import static com.android.tools.r8.ir.desugar.InterfaceMethodRewriter.COMPANION_CLASS_NAME_SUFFIX;
+import static com.android.tools.r8.ir.desugar.InterfaceMethodRewriter.DEFAULT_METHOD_PREFIX;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.ClassFileConsumer.ArchiveConsumer;
-import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper.DexVm;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import com.google.common.collect.ImmutableList;
 import java.nio.file.Path;
 import java.util.Collection;
+import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -52,11 +58,6 @@
 @RunWith(Parameterized.class)
 public class EnclosingMethodRewriteTest extends TestBase {
   private static final Class<?> MAIN = TestClass.class;
-  private static final String JAVA_OUTPUT = StringUtils.lines(
-      "interface " + A.class.getName(),
-      "public default int " + A.class.getName() + ".def()",
-      "42"
-  );
 
   private final TestParameters parameters;
   private final boolean enableMinification;
@@ -64,8 +65,7 @@
   @Parameterized.Parameters(name = "{0} minification: {1}")
   public static Collection<Object[]> data() {
     return buildParameters(
-        getTestParameters().withAllRuntimes().withAllApiLevels().build(),
-        BooleanUtils.values());
+        getTestParameters().withAllRuntimesAndApiLevels().build(), BooleanUtils.values());
   }
 
   public EnclosingMethodRewriteTest(TestParameters parameters, boolean enableMinification) {
@@ -79,7 +79,7 @@
     testForJvm()
         .addTestClasspath()
         .run(parameters.getRuntime(), MAIN)
-        .assertSuccessWithOutput(JAVA_OUTPUT);
+        .assertSuccessWithOutputLines(getExpectedOutput());
   }
 
   @Test
@@ -88,7 +88,8 @@
     Path desugared = temp.newFile("desugared.jar").toPath().toAbsolutePath();
     R8FullTestBuilder builder =
         testForR8(parameters.getBackend())
-            .addProgramClasses(A.class, C.class, MAIN)
+            .addProgramClassesAndInnerClasses(A.class)
+            .addProgramClasses(C.class, MAIN)
             .addKeepMainRule(MAIN)
             .addKeepRules("-keepattributes InnerClasses,EnclosingMethod")
             .setProgramConsumer(new ArchiveConsumer(desugared))
@@ -99,41 +100,100 @@
       builder.addKeepAllClassesRule();
     }
     builder.compile().assertNoMessages();
-    try {
-      testForProguard()
-          .addProgramFiles(desugared)
-          .addKeepMainRule(MAIN)
-          .addKeepRules("-keepattributes InnerClasses,EnclosingMethod")
-          .run(parameters.getRuntime(), MAIN)
-          .assertSuccessWithOutput(JAVA_OUTPUT);
-    } catch (CompilationFailedException e) {
-      // TODO(b/70293332)
-      assertThat(e.getMessage(), containsString("unresolved references"));
-      assertThat(e.getMessage(), containsString(A.class.getName() + "$1"));
-    }
+    testForProguard()
+        .addProgramFiles(desugared)
+        .addKeepMainRule(MAIN)
+        .addKeepRules("-keepattributes InnerClasses,EnclosingMethod")
+        .run(parameters.getRuntime(), MAIN)
+        .assertSuccess();
   }
 
   @Test
   public void testR8() throws Exception {
     R8FullTestBuilder builder =
         testForR8(parameters.getBackend())
-            .addProgramClasses(A.class, C.class, MAIN)
+            .addProgramClassesAndInnerClasses(A.class)
+            .addProgramClasses(C.class, MAIN)
             .addKeepMainRule(MAIN)
             .addKeepRules("-keepattributes InnerClasses,EnclosingMethod")
             .setMinApi(parameters.getApiLevel());
     if (enableMinification) {
       builder.addKeepAllClassesRuleWithAllowObfuscation();
     } else {
-      builder.addKeepAllClassesRule();
-    }
-    String errorType = "ClassNotFoundException";
-    if (parameters.isDexRuntime()
-        && parameters.getRuntime().asDex().getVm().isOlderThanOrEqual(DexVm.ART_4_4_4_HOST)) {
-      errorType = "NoClassDefFoundError";
+      builder.noTreeShaking().noMinification();
     }
     builder
+        .compile()
+        .inspect(
+            inspect -> {
+              ClassSubject cImplSubject = inspect.clazz(A.class.getTypeName() + "$1");
+              assertThat(cImplSubject, isPresent());
+
+              ClassSubject enclosingClassSubject =
+                  inspect.clazz(
+                      parameters.canUseDefaultAndStaticInterfaceMethods()
+                          ? A.class.getTypeName()
+                          : A.class.getTypeName() + COMPANION_CLASS_NAME_SUFFIX);
+              assertThat(enclosingClassSubject, isPresent());
+              assertEquals(
+                  enclosingClassSubject.getDexProgramClass().getType(),
+                  cImplSubject
+                      .getDexProgramClass()
+                      .getEnclosingMethodAttribute()
+                      .getEnclosingMethod()
+                      .getHolderType());
+            })
         .run(parameters.getRuntime(), MAIN)
-        // TODO(b/70293332)
-        .assertFailureWithErrorThatMatches(containsString(errorType));
+        .apply(
+            result -> result.assertSuccessWithOutputLines(getExpectedOutput(result.inspector())));
+  }
+
+  private List<String> getExpectedOutput() {
+    return ImmutableList.of(
+        "interface " + A.class.getTypeName(),
+        "public default int " + A.class.getTypeName() + ".def()",
+        "42");
+  }
+
+  private List<String> getExpectedOutput(CodeInspector inspector) {
+    ClassSubject aClassSubject = inspector.clazz(A.class);
+    assertThat(aClassSubject, isPresent());
+
+    MethodSubject defMethodSubject = aClassSubject.uniqueMethodWithName("def");
+    assertThat(defMethodSubject, isPresent());
+
+    if (parameters.canUseDefaultAndStaticInterfaceMethods()) {
+      String modifiers =
+          parameters.isCfRuntime()
+                  || parameters.getDexRuntimeVersion().isNewerThanOrEqual(Version.V8_1_0)
+              ? "public default"
+              : "public";
+      return ImmutableList.of(
+          "interface " + aClassSubject.getFinalName(),
+          modifiers
+              + " int "
+              + aClassSubject.getFinalName()
+              + "."
+              + defMethodSubject.getFinalName()
+              + "()",
+          "42");
+    }
+
+    ClassSubject aCompanionClassSubject =
+        inspector.clazz(A.class.getTypeName() + COMPANION_CLASS_NAME_SUFFIX);
+    assertThat(aCompanionClassSubject, isPresent());
+
+    String methodNamePrefix = enableMinification ? "" : DEFAULT_METHOD_PREFIX;
+    return ImmutableList.of(
+        "class " + aCompanionClassSubject.getFinalName(),
+        "public static int "
+            + aCompanionClassSubject.getFinalName()
+            + "."
+            + methodNamePrefix
+            + defMethodSubject.getFinalName()
+            + "("
+            + aClassSubject.getFinalName()
+            + ")",
+        "42");
   }
 }
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
index 1fa2bdc..8a37cd0 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
@@ -50,7 +50,7 @@
     return getTestParameters()
         .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
         .withDexRuntimes()
-        .withAllApiLevels()
+        .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
         .build();
   }
 
@@ -143,6 +143,7 @@
         .addKeepAllAttributes()
         .addOptionsModification(options -> options.enableNestReduction = false)
         .addProgramFiles(JAR)
+        .addInliningAnnotations()
         .setMinApi(minApi)
         .compile();
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
index 5a788bf..ee5b311 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
@@ -68,6 +68,8 @@
         .addKeepRuleFiles(MAIN_KEEP)
         .addOptionsModification(
             options -> options.testing.enableForceNestBasedAccessDesugaringForTest = desugar)
+        .addDontWarnGoogle()
+        .addDontWarnJavax()
         .compile()
         .inspect(inspector -> assertNests(inspector, desugar))
         .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
index 6ebe0db..eecd15c 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
@@ -5,7 +5,6 @@
 package com.android.tools.r8.desugar.nestaccesscontrol;
 
 import static junit.framework.TestCase.assertTrue;
-import static org.hamcrest.CoreMatchers.containsString;
 
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -51,10 +50,11 @@
         .setMinApi(parameters.getApiLevel())
         .addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR)
         .addKeepRuleFiles(MAIN_KEEP)
+        // TODO(b/177967938): Investigate why this is needed.
+        .addDontWarnJavaLangInvoke()
+        .addDontWarnJavaNioFile()
         .addOptionsModification(opt -> opt.ignoreMissingClasses = true)
-        .allowDiagnosticWarningMessages()
         .compile()
-        .assertAllWarningMessagesMatch(containsString("Missing class "))
         .inspect(this::assertNotEmpty)
         .inspect(Java11R8CompilationTest::assertNoNests);
   }
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
index 56b025c..c55df8c 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
@@ -37,7 +37,7 @@
         .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
         .withDexRuntime(DexVm.Version.first())
         .withDexRuntime(DexVm.Version.last())
-        .withAllApiLevels()
+        .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
         .build();
   }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
index 816a233..aa22447 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
@@ -94,6 +94,7 @@
               options.enableClassInlining = false;
             })
         .addProgramFiles(classesMatching(outerNestName))
+        .addInliningAnnotations()
         .compile()
         .inspect(
             inspector -> {
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java
index e9cdbe0..62aa4a3 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java
@@ -53,7 +53,7 @@
         .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
         .withDexRuntime(DexVm.Version.first())
         .withDexRuntime(DexVm.Version.last())
-        .withAllApiLevels()
+        .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
         .build();
   }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java
index 1ed0e0a..85bade9 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java
@@ -33,7 +33,7 @@
         .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
         .withDexRuntime(DexVm.Version.first())
         .withDexRuntime(DexVm.Version.last())
-        .withAllApiLevels()
+        .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
         .build();
   }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/twr/TwrCloseResourceDuplicationTest.java b/src/test/java/com/android/tools/r8/desugar/twr/TwrCloseResourceDuplicationTest.java
index dde98e2..aac4a9e 100644
--- a/src/test/java/com/android/tools/r8/desugar/twr/TwrCloseResourceDuplicationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/twr/TwrCloseResourceDuplicationTest.java
@@ -90,6 +90,9 @@
         .addInnerClasses(getClass())
         .addKeepMainRule(TestClass.class)
         .addKeepClassAndMembersRules(Foo.class, Bar.class)
+        .applyIf(
+            parameters.getApiLevel().isLessThan(apiLevelWithTwrCloseResourceSupport()),
+            builder -> builder.addDontWarn("java.lang.AutoCloseable"))
         .setMinApi(parameters.getApiLevel())
         .noMinification()
         .run(parameters.getRuntime(), TestClass.class, getZipFile())
diff --git a/src/test/java/com/android/tools/r8/desugaring/lambdanames/PackageDependentLambdaNamesTest.java b/src/test/java/com/android/tools/r8/desugaring/lambdanames/PackageDependentLambdaNamesTest.java
index 5730599..771a77f 100644
--- a/src/test/java/com/android/tools/r8/desugaring/lambdanames/PackageDependentLambdaNamesTest.java
+++ b/src/test/java/com/android/tools/r8/desugaring/lambdanames/PackageDependentLambdaNamesTest.java
@@ -85,7 +85,6 @@
     return transformer.transform();
   }
 
-  @FunctionalInterface
   public interface StringConsumer {
     void accept(String arg);
   }
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterMergeRegression.java b/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterMergeRegression.java
index c9dd274..780696e 100644
--- a/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterMergeRegression.java
+++ b/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterMergeRegression.java
@@ -62,8 +62,7 @@
             r8FullTestBuilder
                 .enableNoVerticalClassMergingAnnotations()
                 .enableInliningAnnotations()
-                .noMinification()
-                .addOptionsModification(o -> o.testing.deterministicSortingBasedOnDexType = true);
+                .noMinification();
     ProcessResult processResult =
         testDexSplitter(
             parameters,
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java b/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
index c41a1d1..dce9fbc 100644
--- a/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
+++ b/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
@@ -143,6 +143,7 @@
         .addProgramClasses(baseClasses)
         .addFeatureSplit(
             builder -> simpleSplitProvider(builder, featureOutput, temp, featureClasses))
+        .addInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .addKeepMainRule(SplitRunner.class)
         .addKeepClassRules(toRun);
@@ -182,6 +183,7 @@
             .addClasspathClasses(baseClasses)
             .addClasspathClasses(RunInterface.class)
             .addKeepAllClassesRule()
+            .addInliningAnnotations()
             .setMinApi(parameters.getApiLevel())
             .compile()
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/diagnostics/ModifyDiagnosticsLevelTest.java b/src/test/java/com/android/tools/r8/diagnostics/ModifyDiagnosticsLevelTest.java
index 3dabac7..4b1bb9e 100644
--- a/src/test/java/com/android/tools/r8/diagnostics/ModifyDiagnosticsLevelTest.java
+++ b/src/test/java/com/android/tools/r8/diagnostics/ModifyDiagnosticsLevelTest.java
@@ -48,12 +48,11 @@
             })
         .allowDiagnosticInfoMessages()
         .compileWithExpectedDiagnostics(
-            diagnostics -> {
-              diagnostics
-                  .assertOnlyInfos()
-                  .assertInfosCount(1)
-                  .assertInfosMatch(diagnosticMessage(startsWith(MISSING_CLASS_MESSAGE_PREFIX)));
-            });
+            diagnostics ->
+                diagnostics
+                    .assertOnlyInfos()
+                    .assertInfosCount(1)
+                    .assertInfosMatch(diagnosticMessage(startsWith(MISSING_CLASS_MESSAGE_PREFIX))));
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/AnnotationEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/AnnotationEnumUnboxingTest.java
index 20362c3..0bc6b67 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/AnnotationEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/AnnotationEnumUnboxingTest.java
@@ -51,6 +51,7 @@
         .addKeepRuntimeVisibleAnnotations()
         .enableNeverClassInliningAnnotations()
         .enableInliningAnnotations()
+        .enableMemberValuePropagationAnnotations()
         .enableNoVerticalClassMergingAnnotations()
         .addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
         .allowDiagnosticInfoMessages()
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/kotlin/SimpleKotlinEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/kotlin/SimpleKotlinEnumUnboxingTest.java
index a4f280c..3c48865 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/kotlin/SimpleKotlinEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/kotlin/SimpleKotlinEnumUnboxingTest.java
@@ -4,8 +4,10 @@
 
 package com.android.tools.r8.enumunboxing.kotlin;
 
+import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
 import static com.android.tools.r8.KotlinTestBase.getCompileMemoizer;
 import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+import static org.hamcrest.core.StringContains.containsString;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
@@ -68,18 +70,25 @@
   public void testEnumUnboxing() throws Exception {
     assumeTrue(parameters.isDexRuntime());
     testForR8(parameters.getBackend())
-        .addProgramFiles(jars.getForConfiguration(kotlinCompiler, targetVersion))
+        .addProgramFiles(
+            jars.getForConfiguration(kotlinCompiler, targetVersion),
+            ToolHelper.getKotlinStdlibJar(kotlinCompiler))
         .addKeepMainRule(PKG + ".MainKt")
         .addKeepRules(enumKeepRules.getKeepRules())
         .addKeepRuntimeVisibleAnnotations()
         .addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
-        .allowDiagnosticInfoMessages()
+        .allowDiagnosticMessages()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .inspectDiagnosticMessages(
-            m -> {
+            messages -> {
+              messages
+                  .assertNoErrors()
+                  .assertAllWarningsMatch(
+                      diagnosticMessage(
+                          containsString("Resource 'META-INF/MANIFEST.MF' already exists.")));
               assertEnumIsUnboxed(
-                  PKG + ".Color", SimpleKotlinEnumUnboxingTest.class.getSimpleName(), m);
+                  PKG + ".Color", SimpleKotlinEnumUnboxingTest.class.getSimpleName(), messages);
             })
         .run(parameters.getRuntime(), PKG + ".MainKt")
         .assertSuccessWithOutputLines("RED", "GREEN", "BLUE");
diff --git a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
index 183ae6b..509bfa2 100644
--- a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
@@ -34,20 +34,20 @@
   @Test
   public void testRuntime() throws Exception {
     testForRuntime(parameters.getRuntime(), parameters.getApiLevel())
-        .addProgramClasses(I.class, Main.class)
+        .addProgramClassesAndInnerClasses(Main.class)
+        .addProgramClasses(I.class)
         .addProgramClassFileData(getClassWithTransformedInvoked())
         .run(parameters.getRuntime(), Main.class)
-        .assertFailureWithErrorThatThrows(
-            parameters.isCfRuntime()
-                ? VerifyError.class
-                // TODO(b/144410139): Consider making this a compilation failure.
-                : NoClassDefFoundError.class);
+        // TODO(b/144410139): Consider making this a compilation failure when generating DEX.
+        .assertSuccessWithOutputLinesIf(parameters.isDexRuntime(), "Hello World!")
+        .assertFailureWithErrorThatThrowsIf(parameters.isCfRuntime(), VerifyError.class);
   }
 
   @Test
   public void testR8() throws Exception {
     testForR8(parameters.getBackend())
-        .addProgramClasses(I.class, Main.class)
+        .addProgramClassesAndInnerClasses(Main.class)
+        .addProgramClasses(I.class)
         .addProgramClassFileData(getClassWithTransformedInvoked())
         .addKeepMainRule(Main.class)
         .setMinApi(parameters.getApiLevel())
@@ -56,7 +56,7 @@
             parameters.isCfRuntime()
                 ? VerifyError.class
                 // TODO(b/144410139): Consider making this a compilation failure.
-                : NoClassDefFoundError.class);
+                : NullPointerException.class);
   }
 
   private byte[] getClassWithTransformedInvoked() throws IOException {
diff --git a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialToSubclassTest.java b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialToSubclassTest.java
index b439787..9c44e2a 100644
--- a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialToSubclassTest.java
+++ b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialToSubclassTest.java
@@ -42,25 +42,21 @@
   @Test
   public void testRuntime() throws Exception {
     testForRuntime(parameters.getRuntime(), parameters.getApiLevel())
-        .addProgramClasses(EmptySubC.class, C.class, Main.class)
+        .addProgramClasses(EmptySubC.class, C.class, D.class, Main.class)
         .addProgramClassFileData(getClassBWithTransformedInvoked(holder))
         .run(parameters.getRuntime(), Main.class)
-        // The failures are very different from one back-end to another: verification error,
-        // invalid invoke-super, segmentation fault, NoSuchMethod, etc.
-        .assertFailure();
+        .assertSuccessWithOutputLines("Should not be called.");
   }
 
   @Test
   public void testR8() throws Exception {
     testForR8(parameters.getBackend())
-        .addProgramClasses(EmptySubC.class, C.class, Main.class)
+        .addProgramClasses(EmptySubC.class, C.class, D.class, Main.class)
         .addProgramClassFileData(getClassBWithTransformedInvoked(holder))
         .addKeepMainRule(Main.class)
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), Main.class)
-        // The failures are very different from one back-end to another: verification error,
-        // invalid invoke-super, segmentation fault, NoSuchMethod, etc.
-        .assertFailure();
+        .assertSuccessWithOutputLines("Should not be called.");
   }
 
   private byte[] getClassBWithTransformedInvoked(Class<?> holder) throws IOException {
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/MissingClassesJoinTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/MissingClassesJoinTest.java
index 6d3c6cb..e654b89 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/MissingClassesJoinTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/MissingClassesJoinTest.java
@@ -69,6 +69,7 @@
               .addProgramClasses(A.class, ASub1.class, Box.class, TestClass.class)
               .addKeepAllClassesRule()
               .addOptionsModification(options -> options.testing.allowTypeErrors = allowTypeErrors)
+              .addDontWarn(ASub2.class)
               .allowDiagnosticWarningMessages()
               .enableNoVerticalClassMergingAnnotations()
               .setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java b/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
index 14d7e6b..da19669 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
@@ -5,7 +5,9 @@
 
 import static org.junit.Assert.assertEquals;
 
+import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.ThrowableConsumer;
 import com.android.tools.r8.ir.optimize.nonnull.FieldAccessTest;
 import com.android.tools.r8.ir.optimize.nonnull.NonNullAfterArrayAccess;
 import com.android.tools.r8.ir.optimize.nonnull.NonNullAfterFieldAccess;
@@ -32,10 +34,19 @@
   }
 
   private void testR8(Class<?> testClass, List<MethodSignature> signatures) throws Exception {
+    testR8(testClass, signatures, null);
+  }
+
+  private void testR8(
+      Class<?> testClass,
+      List<MethodSignature> signatures,
+      ThrowableConsumer<R8FullTestBuilder> configuration)
+      throws Exception {
     CodeInspector codeInspector =
         testForR8(Backend.DEX)
             .addProgramClasses(testClass)
             .addKeepRules("-keep class " + testClass.getCanonicalName() + " { *; }")
+            .apply(configuration)
             .compile()
             .inspector();
     verifyAbsenceOfIf(codeInspector, testClass, signatures);
@@ -67,6 +78,9 @@
         new String[]{FieldAccessTest.class.getCanonicalName()});
     MethodSignature foo2 = new MethodSignature("foo2", "int",
         new String[]{FieldAccessTest.class.getCanonicalName()});
-    testR8(NonNullAfterFieldAccess.class, ImmutableList.of(foo, bar, foo2));
+    testR8(
+        NonNullAfterFieldAccess.class,
+        ImmutableList.of(foo, bar, foo2),
+        testBuilder -> testBuilder.addProgramClasses(FieldAccessTest.class));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/SubsumedCatchHandlerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/SubsumedCatchHandlerTest.java
index 87de375..19d7226 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/SubsumedCatchHandlerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/SubsumedCatchHandlerTest.java
@@ -86,6 +86,7 @@
         testForR8(backend)
             .addInnerClasses(SubsumedCatchHandlerTest.class)
             .addKeepMainRule(TestClass.class)
+            .enableForceInliningAnnotations()
             .enableInliningAnnotations()
             .run(TestClass.class)
             .assertSuccessWithOutput(expected)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/EffectivelyFinalFieldCanonicalizationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/EffectivelyFinalFieldCanonicalizationTest.java
index 4e73445..59eff5b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/EffectivelyFinalFieldCanonicalizationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/EffectivelyFinalFieldCanonicalizationTest.java
@@ -40,6 +40,8 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(EffectivelyFinalFieldCanonicalizationTest.class)
         .addKeepMainRule(TestClass.class)
+        .enableInliningAnnotations()
+        .enableNeverClassInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinitializerdefaults/NonFinalFieldWithDefaultValueTest.java b/src/test/java/com/android/tools/r8/ir/optimize/classinitializerdefaults/NonFinalFieldWithDefaultValueTest.java
index c9033f5..2922b90 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinitializerdefaults/NonFinalFieldWithDefaultValueTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinitializerdefaults/NonFinalFieldWithDefaultValueTest.java
@@ -58,6 +58,7 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(NonFinalFieldWithDefaultValueTest.class)
         .addKeepMainRule(TestClass.class)
+        .enableInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ExtraMethodNullTest.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ExtraMethodNullTest.java
index 3ece2da..9890166 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ExtraMethodNullTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ExtraMethodNullTest.java
@@ -4,21 +4,36 @@
 
 package com.android.tools.r8.ir.optimize.classinliner;
 
-import static org.hamcrest.CoreMatchers.containsString;
 
-import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
+@RunWith(Parameterized.class)
 public class ExtraMethodNullTest extends TestBase {
 
+  private final TestParameters parameters;
+
+  @Parameterized.Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
+  }
+
+  public ExtraMethodNullTest(TestParameters parameters) {
+    this.parameters = parameters;
+  }
+
   @Test
   public void test() throws Exception {
-    testForR8(Backend.DEX)
+    testForR8(parameters.getBackend())
         .addProgramClassesAndInnerClasses(One.class)
         .addKeepMainRule(One.class)
-        .run(One.class)
-        .assertFailureWithErrorThatMatches(containsString("java.lang.NullPointerException"));
+        .setMinApi(parameters.getApiLevel())
+        .run(parameters.getRuntime(), One.class)
+        .assertFailureWithErrorThatThrows(NullPointerException.class);
   }
 
   public static class One {
@@ -30,7 +45,6 @@
     }
 
     static class Other {
-      @NeverInline
       Object print(Object one) {
         return one;
       }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InterfaceRenewalInLoopDebugTestRunner.java b/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InterfaceRenewalInLoopDebugTestRunner.java
index b21e168..be426b1 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InterfaceRenewalInLoopDebugTestRunner.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InterfaceRenewalInLoopDebugTestRunner.java
@@ -26,13 +26,15 @@
 
   @Test
   public void test() throws Throwable {
-    R8TestCompileResult result = testForR8(Backend.CF)
-        .setMode(CompilationMode.DEBUG)
-        .addProgramClasses(TestInterface.class, IMPL, MAIN)
-        .addKeepMainRule(MAIN)
-        .addKeepRules(ImmutableList.of("-keepattributes SourceFile,LineNumberTable"))
-        .noMinification()
-        .compile();
+    R8TestCompileResult result =
+        testForR8(Backend.CF)
+            .setMode(CompilationMode.DEBUG)
+            .addProgramClasses(TestInterface.class, IMPL, MAIN)
+            .addKeepMainRule(MAIN)
+            .addKeepRules(ImmutableList.of("-keepattributes SourceFile,LineNumberTable"))
+            .enableNoVerticalClassMergingAnnotations()
+            .noMinification()
+            .compile();
 
     CodeInspector inspector = result.inspector();
     ClassSubject mainSubject = inspector.clazz(MAIN);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/fields/NonFinalFinalFieldTest.java b/src/test/java/com/android/tools/r8/ir/optimize/fields/NonFinalFinalFieldTest.java
index 292f74e..d8cdbc5 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/fields/NonFinalFinalFieldTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/fields/NonFinalFinalFieldTest.java
@@ -49,6 +49,7 @@
         .addProgramClasses(TestClass.class)
         .addProgramClassFileData(getProgramClassFileData())
         .addKeepMainRule(TestClass.class)
+        .enableNeverClassInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .run(parameters.getRuntime(), TestClass.class)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineMappingOnSameLineTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineMappingOnSameLineTest.java
index a8abf65..c4a0b9d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineMappingOnSameLineTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineMappingOnSameLineTest.java
@@ -9,6 +9,7 @@
 
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.R8TestBuilder;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.naming.retrace.RetraceTestBase;
 import com.android.tools.r8.naming.retrace.StackTrace;
@@ -46,6 +47,11 @@
   }
 
   @Override
+  public void configure(R8TestBuilder<?> builder) {
+    builder.enableInliningAnnotations();
+  }
+
+  @Override
   public Class<?> getMainClass() {
     return Main.class;
   }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java
index a3b0c4a..46727f2 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java
@@ -10,6 +10,7 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
+import com.android.tools.r8.R8TestBuilder;
 import com.android.tools.r8.R8TestRunResult;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ir.optimize.inliner.testclasses.InliningIntoVisibilityBridgeTestClasses;
@@ -47,10 +48,10 @@
             .addInnerClasses(InliningIntoVisibilityBridgeTest.class)
             .addInnerClasses(InliningIntoVisibilityBridgeTestClasses.class)
             .addKeepMainRule(TestClass.class)
-            .addKeepRules(
-                neverInline
-                    ? ("-neverinline class " + getClassA().getTypeName() + " { method(); }")
-                    : "")
+            .addForceInliningAnnotations()
+            .addInliningAnnotations()
+            .applyIf(neverInline, R8TestBuilder::enableInliningAnnotations)
+            .applyIf(!neverInline, R8TestBuilder::enableForceInliningAnnotations)
             .enableNoVerticalClassMergingAnnotations()
             .enableProguardTestOptions()
             .compile()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/MultipleIndirectCallSitesTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/MultipleIndirectCallSitesTest.java
index a0ed3e6..09bb71b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/MultipleIndirectCallSitesTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/MultipleIndirectCallSitesTest.java
@@ -29,7 +29,8 @@
 
   @Parameterized.Parameters(name = "{1}, invoke A.m(): {0}")
   public static List<Object[]> data() {
-    return buildParameters(BooleanUtils.values(), getTestParameters().withAllRuntimes().build());
+    return buildParameters(
+        BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
   }
 
   public MultipleIndirectCallSitesTest(boolean invokeMethodOnA, TestParameters parameters) {
@@ -47,6 +48,7 @@
         // kept, there is a single call site that invokes A.m(). However, this does not mean that
         // A.m() has a single call site, so it should not allow inlining of A.m().
         .addKeepRules(getKeepRules())
+        .enableNeverClassInliningAnnotations()
         .setMinApi(parameters.getRuntime())
         .compile()
         .inspect(this::verifyInlining)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/Regress131349148.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/Regress131349148.java
index 09b0ae3..235aa07 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/Regress131349148.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/Regress131349148.java
@@ -26,7 +26,10 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection params() {
-    return getTestParameters().withDexRuntimes().withAllApiLevels().build();
+    return getTestParameters()
+        .withDexRuntimes()
+        .withApiLevelsStartingAtIncluding(AndroidApiLevel.K)
+        .build();
   }
 
   public Regress131349148(TestParameters parameters) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java
index c8c60ae..54018ee 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java
@@ -5,6 +5,7 @@
 package com.android.tools.r8.ir.optimize.inliner.testclasses;
 
 import com.android.tools.r8.ForceInline;
+import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoVerticalClassMerging;
 
 public class InliningIntoVisibilityBridgeTestClasses {
@@ -17,6 +18,7 @@
   static class InliningIntoVisibilityBridgeTestClassA {
 
     @ForceInline
+    @NeverInline
     public static void method() {
       System.out.println("Hello world");
     }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/B143686595.java b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/B143686595.java
index 036bde7..4f95f4d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/B143686595.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/B143686595.java
@@ -39,6 +39,7 @@
         .addProgramClasses(TestClass.class)
         .addClasspathClasses(I.class)
         .addKeepMainRule(TestClass.class)
+        .enableInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .addRunClasspathFiles(libraryResult.writeToZip())
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.java b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.java
index d2b739e..6c7cf37 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.java
@@ -40,6 +40,7 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.class)
         .addKeepMainRule(TestClass.class)
+        .enableNeverClassInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlineFromStaticInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlineFromStaticInterfaceMethodTest.java
index ec4c859..c0267f2 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlineFromStaticInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlineFromStaticInterfaceMethodTest.java
@@ -50,6 +50,7 @@
               options.outline.minSize = 2;
             })
         .enableInliningAnnotations()
+        .enableNeverClassInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java
index 3e28157..d1d5f1f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.ForceInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoHorizontalClassMerging;
+import com.android.tools.r8.R8TestBuilder;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.ListUtils;
@@ -218,6 +219,8 @@
     testForR8(parameters.getBackend())
         .setMode(mode)
         .addInnerClasses(GetClassTest.class)
+        .addForceInliningAnnotations()
+        .applyIf(mode == CompilationMode.RELEASE, R8TestBuilder::enableForceInliningAnnotations)
         .enableInliningAnnotations()
         .enableNoHorizontalClassMergingAnnotations()
         .addKeepMainRule(MAIN)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetSimpleNameTest.java b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetSimpleNameTest.java
index a9a5c6f..81612ee 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetSimpleNameTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetSimpleNameTest.java
@@ -214,6 +214,7 @@
     R8TestRunResult result =
         testForR8(parameters.getBackend())
             .addProgramFiles(classPaths)
+            .enableForceInliningAnnotations()
             .enableInliningAnnotations()
             .addKeepMainRule(MAIN)
             .addKeepRules("-keep class **.ClassGetSimpleName*")
@@ -243,6 +244,7 @@
             .addKeepRules("-keep,allowobfuscation class **.Outer*")
             .addKeepAttributes("InnerClasses", "EnclosingMethod")
             .addKeepRules("-printmapping " + createNewMappingPath().toAbsolutePath().toString())
+            .enableForceInliningAnnotations()
             .minification(enableMinification)
             .setMinApi(parameters.getApiLevel())
             .addOptionsModification(this::configure)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
index 9ee6ad7..6e91c38 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
@@ -116,6 +116,7 @@
         .addKeepMainRule(main)
         .addKeepAttributes("InnerClasses", "EnclosingMethod")
         .addOptionsModification(this::configure)
+        .enableInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), main)
         .assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthTest.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthTest.java
index 59c3d5c..7924a77 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthTest.java
@@ -96,6 +96,7 @@
     R8TestRunResult result =
         testForR8(parameters.getBackend())
             .addProgramClasses(MAIN)
+            .enableForceInliningAnnotations()
             .enableInliningAnnotations()
             .addKeepMainRule(MAIN)
             .setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java
index 7d68bda..2e1709c 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java
@@ -111,6 +111,7 @@
     SingleTestRunResult<?> result =
         testForR8(parameters.getBackend())
             .addProgramClassesAndInnerClasses(MAIN)
+            .enableForceInliningAnnotations()
             .enableInliningAnnotations()
             .enableMemberValuePropagationAnnotations()
             .addKeepMainRule(MAIN)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidInitTest.java b/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidInitTest.java
index c8d8086..cb50223 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidInitTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidInitTest.java
@@ -35,6 +35,7 @@
     testForR8(parameters.getBackend())
         .addKeepMainRule(Main.class)
         .enableInliningAnnotations()
+        .enableNeverClassInliningAnnotations()
         .addInnerClasses(SwitchMapInvalidInitTest.class)
         .setMinApi(parameters.getApiLevel())
         .compile()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidOrdinalTest.java b/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidOrdinalTest.java
index a779afb..8c84a76 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidOrdinalTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidOrdinalTest.java
@@ -45,6 +45,7 @@
                 + "com.android.tools.r8.ir.optimize.switches.SwitchMapInvalidOrdinalTest$MyEnum {"
                 + " static <fields>; }")
         .addInnerClasses(SwitchMapInvalidOrdinalTest.class)
+        .enableNeverClassInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizationsTemplates.java b/src/test/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizationsTemplates.java
index 9dd23f8..c1b1f8b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizationsTemplates.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizationsTemplates.java
@@ -18,6 +18,10 @@
     }
   }
 
+  public static IncompatibleClassChangeError throwIncompatibleClassChangeError() {
+    throw new IncompatibleClassChangeError();
+  }
+
   public static NoSuchMethodError throwNoSuchMethodError() {
     throw new NoSuchMethodError();
   }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
index 035ab54..c6dfe83 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
@@ -54,6 +54,7 @@
   public void test() throws Exception {
     testForR8(parameters.getBackend())
         .addInnerClasses(UninstantiatedAnnotatedArgumentsTest.class)
+        .addConstantArgumentAnnotations()
         .addKeepMainRule(TestClass.class)
         .addKeepClassRules(Instantiated.class, Uninstantiated.class)
         .addKeepAttributes("RuntimeVisibleParameterAnnotations")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
index 09c0de7..bd1b805 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
@@ -52,6 +52,7 @@
   public void test() throws Exception {
     testForR8(parameters.getBackend())
         .addInnerClasses(UnusedAnnotatedArgumentsTest.class)
+        .addUnusedArgumentAnnotations()
         .addKeepMainRule(TestClass.class)
         .addKeepClassRules(Used.class, Unused.class)
         .addKeepAttributes("RuntimeVisibleParameterAnnotations")
diff --git a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
index 0abfe16..f272406 100644
--- a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
@@ -270,6 +270,7 @@
         .enableProguardTestOptions()
         .noMinification()
         .apply(configuration)
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .assertAllWarningMessagesMatch(
             containsString("Resource 'META-INF/MANIFEST.MF' already exists."))
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
index c683b1a..5d41673 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
@@ -58,6 +58,7 @@
             StringUtils.lines(
                 "-keepclasseswithmembers class " + MAIN + "{", "  public static *** *(...);", "}"))
         .allowAccessModification(allowAccessModification)
+        .addDontWarnJetBrainsAnnotations()
         .noMinification()
         .setMinApi(parameters.getRuntime())
         .compile()
@@ -102,6 +103,7 @@
                 "-keepclasseswithmembers class " + MAIN + "{",
                 "  public static *** " + methodName + "(...);",
                 "}"))
+        .addDontWarnJetBrainsAnnotations()
         .allowAccessModification(allowAccessModification)
         .noMinification()
         .setMinApi(parameters.getRuntime())
diff --git a/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinReflectionLibTest.java b/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinReflectionLibTest.java
index e90a8b6..cd17827 100644
--- a/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinReflectionLibTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinReflectionLibTest.java
@@ -52,6 +52,7 @@
         .addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
         .addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
         .addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+        .addDontWarnJetBrains()
         .apply(consumer)
         .compile();
   }
diff --git a/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinStdlibTest.java b/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinStdlibTest.java
index 7b3fd69..b335d4c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinStdlibTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinStdlibTest.java
@@ -37,13 +37,12 @@
     this.parameters = parameters;
   }
 
-  private void test(Collection<String> rules, boolean expectInvalidFoo) throws Exception {
-    test(rules, expectInvalidFoo, null);
+  private void test(Collection<String> rules) throws Exception {
+    test(rules, null);
   }
 
   private void test(
       Collection<String> rules,
-      boolean expectInvalidDebugInfo,
       ThrowableConsumer<R8FullTestBuilder> consumer)
       throws Exception {
     testForR8(parameters.getBackend())
@@ -52,25 +51,25 @@
         .addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
         .addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
         .addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+        .addDontWarnJetBrainsAnnotations()
         .apply(consumer)
         .compile();
   }
 
   @Test
   public void testAsIs() throws Exception {
-    test(ImmutableList.of("-dontshrink", "-dontoptimize", "-dontobfuscate"), true);
+    test(ImmutableList.of("-dontshrink", "-dontoptimize", "-dontobfuscate"));
   }
 
   @Test
   public void testDontShrinkAndDontOptimize() throws Exception {
-    test(ImmutableList.of("-dontshrink", "-dontoptimize"), true);
+    test(ImmutableList.of("-dontshrink", "-dontoptimize"));
   }
 
   @Test
   public void testDontShrinkAndDontOptimizeDifferently() throws Exception {
     test(
         ImmutableList.of("-keep,allowobfuscation class **.*Exception*"),
-        true,
         tb -> {
           tb.noTreeShaking();
           tb.addOptionsModification(
@@ -85,29 +84,28 @@
 
   @Test
   public void testDontShrinkAndDontObfuscate() throws Exception {
-    test(ImmutableList.of("-dontshrink", "-dontobfuscate"), true);
+    test(ImmutableList.of("-dontshrink", "-dontobfuscate"));
   }
 
   @Test
   public void testDontShrink() throws Exception {
-    test(ImmutableList.of("-dontshrink"), true);
+    test(ImmutableList.of("-dontshrink"));
   }
 
   @Test
   public void testDontShrinkDifferently() throws Exception {
     test(
         ImmutableList.of("-keep,allowobfuscation class **.*Exception*"),
-        true,
         tb -> tb.noTreeShaking());
   }
 
   @Test
   public void testDontOptimize() throws Exception {
-    test(ImmutableList.of("-dontoptimize"), false);
+    test(ImmutableList.of("-dontoptimize"));
   }
 
   @Test
   public void testDontObfuscate() throws Exception {
-    test(ImmutableList.of("-dontobfuscate"), false);
+    test(ImmutableList.of("-dontobfuscate"));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java b/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java
index 9ae5aed..f15fce0 100644
--- a/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java
+++ b/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java
@@ -80,10 +80,15 @@
             .addKeepAllAttributes()
             // The BASE_LIBRARY contains proguard rules that do not match.
             .allowUnusedProguardConfigurationRules()
-            .addKeepRules(
-                "-dontwarn reactor.blockhound.integration.BlockHoundIntegration",
-                "-dontwarn org.junit.runners.model.Statement",
-                "-dontwarn org.junit.rules.TestRule")
+            .addDontWarnKotlinx()
+            .addDontWarn(
+                "edu.umd.cs.findbugs.annotations.SuppressFBWarnings",
+                "reactor.blockhound.BlockHound$Builder",
+                "reactor.blockhound.integration.BlockHoundIntegration",
+                "org.junit.rules.TestRule",
+                "org.junit.runner.Description",
+                "org.junit.runners.model.Statement",
+                "org.junit.runners.model.TestTimedOutException")
             .compile()
             .inspect(inspector -> assertEqualMetadata(new CodeInspector(BASE_LIBRARY), inspector))
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KStyleKotlinLambdaMergingWithEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KStyleKotlinLambdaMergingWithEnumUnboxingTest.java
index b9baae8..5f52b83 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KStyleKotlinLambdaMergingWithEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KStyleKotlinLambdaMergingWithEnumUnboxingTest.java
@@ -55,6 +55,7 @@
         .addHorizontallyMergedLambdaClassesInspector(
             inspector -> inspector.assertMerged(Lambda1.class, Lambda2.class))
         .addEnumUnboxingInspector(inspector -> inspector.assertUnboxed(EnumUnboxingCandidate.class))
+        .addDontWarnJetBrainsAnnotations()
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
         .enableNoHorizontalClassMergingAnnotations()
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java
index 1b6d4c0..22d66d3 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java
@@ -57,6 +57,7 @@
         .addLibraryFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
         .addProgramFiles(ktClasses)
         .addKeepMainRule("**.B143165163Kt")
+        .addDontWarnJetBrainsAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
@@ -80,6 +81,7 @@
         .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
         .addProgramFiles(ktClasses)
         .addKeepMainRule("**.B143165163Kt")
+        .addDontWarnJetBrainsAnnotations()
         .allowDiagnosticWarningMessages()
         .setMinApi(parameters.getApiLevel())
         .compile()
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingDebugTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingDebugTest.java
index e7c4762..42e5bd8 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingDebugTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingDebugTest.java
@@ -45,6 +45,7 @@
         .setMode(CompilationMode.DEBUG)
         .addProgramFiles(compiledJars.getForConfiguration(kotlinc, KotlinTargetVersion.JAVA_6))
         .addProgramFiles(getJavaJarFile(FOLDER))
+        .addDontWarnJetBrainsAnnotations()
         .setMinApi(parameters.getApiLevel())
         .addKeepMainRule(MAIN_CLASS)
         .allowDiagnosticWarningMessages()
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java b/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java
index 0dd8a62..ca609ec 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java
@@ -139,6 +139,7 @@
                         .setProgramConsumer(new ArchiveConsumer(featureCode, false))
                         .build())
             .allowDiagnosticWarningMessages()
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .assertAllWarningMessagesMatch(
                 equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaGroupGCLimitTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaGroupGCLimitTest.java
index 57cdae7..2538c24 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaGroupGCLimitTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaGroupGCLimitTest.java
@@ -94,6 +94,7 @@
                     inspector.assertNoClassesMerged();
                   }
                 })
+            .addDontWarnJetBrainsAnnotations()
             .compile();
     Path path = compileResult.writeToZip();
     compileResult
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java
index c261c25..251880f 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java
@@ -71,6 +71,7 @@
             options -> options.horizontalClassMergerOptions().disableKotlinLambdaMerging())
         .setMinApi(parameters.getApiLevel())
         .addKeepMainRule(PKG_NAME + ".SimpleKt")
+        .addDontWarnJetBrainsAnnotations()
         .applyIf(
             splitGroup,
             b ->
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrimitiveTypeRewriteTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrimitiveTypeRewriteTest.java
index 31b489a..b4fd614 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrimitiveTypeRewriteTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrimitiveTypeRewriteTest.java
@@ -86,6 +86,7 @@
             .addKeepAllClassesRuleWithAllowObfuscation()
             .addKeepRules("-keep class " + PKG_LIB + ".LibKt { *; }")
             .addKeepRules("-keep class kotlin.Metadata { *; }")
+            .addDontWarnJetBrainsAnnotations()
             .applyIf(keepUnit, b -> b.addKeepRules("-keep class kotlin.Unit { *; }"))
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
             .allowDiagnosticWarningMessages()
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java
index ea9ed33..405cbcb 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java
@@ -104,7 +104,6 @@
             .addKeepRules("-keepclassmembers,allowaccessmodification class **.Lib$Comp { *; }")
             .addKeepRules("-keep,allowaccessmodification,allowobfuscation class **.Lib$Comp { *; }")
             .addKeepRules("-keep,allowaccessmodification,allowobfuscation class **.LibKt { *; }")
-            .addKeepRules("-allowaccessmodification")
             .addApplyMapping(
                 StringUtils.lines(
                     PKG_LIB + ".Lib -> " + PKG_LIB + ".LibReference:",
@@ -115,6 +114,9 @@
                     "  void staticPrivate() -> staticPrivateReference",
                     "  void staticInternal() -> staticInternalReference"))
             .addKeepRuntimeVisibleAnnotations()
+            .addDontWarnJetBrainsAnnotations()
+            .addDontWarnKotlin()
+            .allowAccessModification()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java
index 428103f..f08e2d3 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java
@@ -121,6 +121,8 @@
                 ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS,
                 ProguardKeepAttributes.RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS,
                 ProguardKeepAttributes.RUNTIME_VISIBLE_TYPE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
+            .addDontWarnKotlin()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnonymousTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnonymousTest.java
index 0ff40ff..45cf55a 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnonymousTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnonymousTest.java
@@ -76,6 +76,7 @@
                 ProguardKeepAttributes.SIGNATURE,
                 ProguardKeepAttributes.INNER_CLASSES,
                 ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteBoxedTypesTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteBoxedTypesTest.java
index 2c2ae83..4e7d224 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteBoxedTypesTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteBoxedTypesTest.java
@@ -101,6 +101,7 @@
                 ProguardKeepAttributes.SIGNATURE,
                 ProguardKeepAttributes.INNER_CLASSES,
                 ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
@@ -157,6 +158,7 @@
                 ProguardKeepAttributes.SIGNATURE,
                 ProguardKeepAttributes.INNER_CLASSES,
                 ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .writeToZip();
     Path main =
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineAnonFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineAnonFunctionTest.java
index 56fd483..94aacab 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineAnonFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineAnonFunctionTest.java
@@ -68,6 +68,8 @@
             .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
             .addKeepAllClassesRule()
             .addKeepAllAttributes()
+            .addDontWarnJetBrainsAnnotations()
+            .addDontWarnKotlin()
             .compile()
             .writeToZip();
     Path output =
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineConcreteFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineConcreteFunctionTest.java
index b8c5ac2..f538a45 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineConcreteFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineConcreteFunctionTest.java
@@ -68,6 +68,8 @@
             .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
             .addKeepAllClassesRule()
             .addKeepAllAttributes()
+            .addDontWarnJetBrainsAnnotations()
+            .addDontWarnKotlin()
             .compile()
             .writeToZip();
     Path output =
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
index d71248e..b43f846 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
@@ -71,6 +71,8 @@
             .addProgramFiles(jars.getForConfiguration(kotlinc, targetVersion))
             .addKeepAllClassesRule()
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
+            .addDontWarnKotlin()
             .compile()
             .inspect(
                 inspector ->
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDependentKeep.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDependentKeep.java
index 15112f6..2ccbb3a 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDependentKeep.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDependentKeep.java
@@ -51,6 +51,7 @@
         .addKeepKotlinMetadata()
         .addKeepRules(StringUtils.joinLines("-if class *.Metadata", "-keep class <1>.io.** { *; }"))
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .inspect(this::inspect);
   }
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDoNotEmitValuesIfEmpty.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDoNotEmitValuesIfEmpty.java
index fb4dab9..feca0f8 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDoNotEmitValuesIfEmpty.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDoNotEmitValuesIfEmpty.java
@@ -53,6 +53,7 @@
         .addKeepAllClassesRule()
         .addKeepKotlinMetadata()
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .inspect(this::inspectEmptyValuesAreNotPresent);
   }
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteFlexibleUpperBoundTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteFlexibleUpperBoundTest.java
index ecaea79..90badba 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteFlexibleUpperBoundTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteFlexibleUpperBoundTest.java
@@ -88,6 +88,7 @@
                 ProguardKeepAttributes.SIGNATURE,
                 ProguardKeepAttributes.INNER_CLASSES,
                 ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java
index 09d3af7..056719b 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java
@@ -94,6 +94,7 @@
             // to be called with Kotlin syntax from other kotlin code.
             .addKeepRules("-keep class **.ImplKt { <methods>; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectRenamed)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java
index d025713..2059f24 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java
@@ -93,6 +93,7 @@
             // To keep ...$Companion structure
             .addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
             .addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(codeInspector -> inspect(codeInspector, true))
             .writeToZip();
@@ -135,6 +136,7 @@
             // To keep ...$Companion structure
             .addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
             .addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(codeInspector -> inspect(codeInspector, false))
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java
index ac363d4..8a5a520 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java
@@ -92,6 +92,7 @@
             .addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
             .addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
             .addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectMerged)
             .writeToZip();
@@ -146,6 +147,7 @@
             .addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
             .addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
             .addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectRenamed)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java
index 327ec34..084acb0 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java
@@ -88,6 +88,7 @@
             // to be called with Kotlin syntax from other kotlin code.
             .addKeepRules("-keep class **.BKt { <methods>; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectMerged)
             .writeToZip();
@@ -151,6 +152,7 @@
             // to be called with Kotlin syntax from other kotlin code.
             .addKeepRules("-keep class **.BKt { <methods>; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectRenamed)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
index 91ed797..cd55724 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
@@ -86,6 +86,7 @@
             // Keep the BKt method, which will be called from other kotlin code.
             .addKeepRules("-keep class **.BKt { <methods>; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectMerged)
             .writeToZip();
@@ -147,6 +148,7 @@
             // Keep the BKt method, which will be called from other kotlin code.
             .addKeepRules("-keep class **.BKt { <methods>; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectRenamed)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithDefaultValueTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithDefaultValueTest.java
index c9210a1..b63d162 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithDefaultValueTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithDefaultValueTest.java
@@ -87,6 +87,7 @@
             .addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
             .addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
             .addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithVarargTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithVarargTest.java
index a65c4b9..cae6b9e 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithVarargTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithVarargTest.java
@@ -89,6 +89,7 @@
             .addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
             .addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
             .addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInLibraryTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInLibraryTypeTest.java
index e635091..e10d738 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInLibraryTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInLibraryTypeTest.java
@@ -87,7 +87,6 @@
     Path out =
         testForR8(parameters.getBackend())
             // Intentionally not providing baseLibJar as lib file nor classpath file.
-            .addClasspathFiles()
             .addProgramFiles(
                 extLibJarMap.getForConfiguration(kotlinc, targetVersion),
                 appJarMap.getForConfiguration(kotlinc, targetVersion))
@@ -97,6 +96,9 @@
             // Keep the main entry.
             .addKeepMainRule(main)
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarn(PKG + ".**")
+            .addDontWarnJetBrainsAnnotations()
+            .addDontWarnKotlin()
             .allowDiagnosticWarningMessages()
             // -dontoptimize so that basic code structure is kept.
             .noOptimization()
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
index 8adeb48..e9c1a44 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
@@ -91,6 +91,7 @@
             .addKeepRules("-keep class **.UtilKt")
             .addKeepRules("-keepclassmembers class * { ** comma*Join*(...); }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectMerged)
             .writeToZip();
@@ -135,6 +136,7 @@
             // Keep yet rename joinOf*(String).
             .addKeepRules("-keepclassmembers,allowobfuscation class * { ** joinOf*(...); }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectRenamed)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInNestedClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInNestedClassTest.java
index 8bb4603..78e5307 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInNestedClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInNestedClassTest.java
@@ -84,6 +84,7 @@
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
             .addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
             .addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInParameterTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInParameterTypeTest.java
index a2a85c3..e2c1191 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInParameterTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInParameterTypeTest.java
@@ -78,6 +78,7 @@
             // Keep Itf, but allow minification.
             .addKeepRules("-keep,allowobfuscation class **.Itf")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTest.java
index d012f10..15ee754 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTest.java
@@ -84,6 +84,7 @@
             .addKeepRules("-keep class **.Person { <init>(...); }")
             .addKeepRules("-keepclassmembers class **.Person { *** get*(); }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectGetterOnly)
             .writeToZip();
@@ -179,6 +180,7 @@
             // Keep LibKt extension methods
             .addKeepRules("-keep class **.LibKt { <methods>; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectSetterOnly)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTypeTest.java
index 9641f64..3d16307 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTypeTest.java
@@ -76,6 +76,7 @@
             // Keep non-private members of Impl
             .addKeepRules("-keep public class **.Impl { !private *; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInRenamedTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInRenamedTypeTest.java
index a4a3a68..d6d8fc9 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInRenamedTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInRenamedTypeTest.java
@@ -68,6 +68,7 @@
         .addProgramFiles(inputJarMap.getForConfiguration(kotlinc, targetVersion))
         .addKeepRules(OBFUSCATE_RENAMED, KEEP_KEPT)
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .inspect(this::inspect);
   }
@@ -81,6 +82,7 @@
         .addProgramFiles(inputJarMap.getForConfiguration(kotlinc, targetVersion))
         .addKeepRules(OBFUSCATE_RENAMED, KEEP_KEPT)
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .inspect(this::inspect);
   }
@@ -97,6 +99,7 @@
         .addKeepKotlinMetadata()
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
         .allowDiagnosticWarningMessages()
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .assertWarningMessageThatMatches(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
         // TODO(b/155536535): Enable this assert.
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInReturnTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInReturnTypeTest.java
index 9783f3b..6f2a2b1 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInReturnTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInReturnTypeTest.java
@@ -78,6 +78,7 @@
             // Keep Itf, but allow minification.
             .addKeepRules("-keep,allowobfuscation class **.Itf")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassNestedTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassNestedTest.java
index f33fc30..db927a8 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassNestedTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassNestedTest.java
@@ -77,6 +77,7 @@
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
             .addKeepAttributes(
                 ProguardKeepAttributes.INNER_CLASSES, ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .writeToZip();
     Path output =
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
index 2dbbc48..008851a 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
@@ -87,6 +87,7 @@
             // Keep the factory object and utils
             .addKeepRules("-keep class **.ExprFactory { *; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectValid)
             .writeToZip();
@@ -152,6 +153,7 @@
             // Keep the extension function
             .addKeepRules("-keep class **.LibKt { <methods>; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectInvalid)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSuperTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSuperTypeTest.java
index 9b0da43..b4cf3e6 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSuperTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSuperTypeTest.java
@@ -79,6 +79,7 @@
             // Keep non-private members except for ones in `internal` definitions.
             .addKeepRules("-keep public class !**.internal.**, * { !private *; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectMerged)
             .writeToZip();
@@ -126,6 +127,7 @@
             // Keep `internal` definitions, but allow minification.
             .addKeepRules("-keep,allowobfuscation class **.internal.** { *; }")
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspectRenamed)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
index edade6e..7725e83 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
@@ -129,6 +129,7 @@
                 ProguardKeepAttributes.SIGNATURE,
                 ProguardKeepAttributes.INNER_CLASSES,
                 ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java
index 788abf2..45f153f 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java
@@ -133,6 +133,7 @@
                 ProguardKeepAttributes.SIGNATURE,
                 ProguardKeepAttributes.INNER_CLASSES,
                 ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlinePropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlinePropertyTest.java
index 133dd37..641edce 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlinePropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlinePropertyTest.java
@@ -81,6 +81,7 @@
                 ProguardKeepAttributes.SIGNATURE,
                 ProguardKeepAttributes.INNER_CLASSES,
                 ProguardKeepAttributes.ENCLOSING_METHOD)
+            .addDontWarnJetBrainsAnnotations()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java
index 83b8e62..e4e2705 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java
@@ -89,6 +89,8 @@
             .addProgramFiles(kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
             .addKeepAllClassesRule()
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
+            .addDontWarnKotlin()
             .compile()
             .inspect(this::inspect)
             .writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepPathTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepPathTest.java
index 40c7573..51f5fc9 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepPathTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepPathTest.java
@@ -60,6 +60,7 @@
         .applyIf(keepMetadata, TestShrinkerBuilder::addKeepKotlinMetadata)
         .addKeepRuntimeVisibleAnnotations()
         .allowDiagnosticWarningMessages()
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
         .inspect(inspector -> inspect(inspector, keepMetadata));
@@ -72,6 +73,7 @@
         .addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
         .addKeepRules("-keep class " + LIB_CLASS_NAME)
         .addKeepRuntimeVisibleAnnotations()
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .inspect(inspector -> inspect(inspector, true));
   }
@@ -84,6 +86,7 @@
         .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
         .addKeepRules("-keep class " + LIB_CLASS_NAME)
         .addKeepRuntimeVisibleAnnotations()
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .inspect(inspector -> inspect(inspector, true));
   }
@@ -94,6 +97,8 @@
         .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
         .addKeepRules("-keep class " + LIB_CLASS_NAME)
         .addKeepRuntimeVisibleAnnotations()
+        .addDontWarnJetBrainsAnnotations()
+        .addDontWarnKotlin()
         .compile()
         .inspect(inspector -> inspect(inspector, true));
   }
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java
index 8c681bd..74159a6 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java
@@ -47,6 +47,7 @@
         .addKeepKotlinMetadata()
         .addKeepRules("-keep class kotlin.io.** { *; }")
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .inspect(this::inspect);
   }
@@ -59,6 +60,7 @@
         .addKeepRules("-keep class kotlin.io.** { *; }")
         .addKeepRules("-if class *", "-keep class kotlin.Metadata { *; }")
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .inspect(this::inspect);
   }
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
index 3e62729..0b65ec3 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
@@ -44,6 +44,7 @@
         .addKeepAllClassesRule()
         .addKeepKotlinMetadata()
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .inspect(
             inspector ->
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java
index 39793cf..427c87d 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java
@@ -75,6 +75,8 @@
             .addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
             .addKeepRules("-keep class " + PKG_LIB + ".Sub { <init>(); *** kept(); }")
             .addKeepRuntimeVisibleAnnotations()
+            .addDontWarnJetBrainsAnnotations()
+            .addDontWarnKotlinMetadata()
             .noMinification()
             .compile()
             .inspect(this::checkPruned)
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
index 168cbc5..1a2cd73 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
@@ -61,6 +61,7 @@
             .addKeepMainRule(mainClassName)
             .addKeepKotlinMetadata()
             .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .allowDiagnosticWarningMessages()
             .setMinApi(parameters.getApiLevel())
             .compile()
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java
index 9cd2614..e23ac8f 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java
@@ -56,6 +56,7 @@
         .setMinApi(parameters.getApiLevel())
         .addKeepAllClassesRule()
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .inspect(inspector -> inspectMetadataVersion(inspector, "1.4.0"));
   }
@@ -68,6 +69,7 @@
         .setMinApi(parameters.getApiLevel())
         .addKeepAllClassesRule()
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .inspect(inspector -> inspectMetadataVersion(inspector, "1.4.0"));
   }
@@ -80,6 +82,7 @@
         .setMinApi(parameters.getApiLevel())
         .addKeepAllClassesRule()
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+        .addDontWarnJetBrainsAnnotations()
         .compile()
         .inspect(inspector -> inspectMetadataVersion(inspector, "1.4.2"));
   }
diff --git a/src/test/java/com/android/tools/r8/kotlin/optimize/switches/KotlinEnumSwitchTest.java b/src/test/java/com/android/tools/r8/kotlin/optimize/switches/KotlinEnumSwitchTest.java
index d7eeae4..8b2b027 100644
--- a/src/test/java/com/android/tools/r8/kotlin/optimize/switches/KotlinEnumSwitchTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/optimize/switches/KotlinEnumSwitchTest.java
@@ -46,6 +46,7 @@
               options.enableEnumValueOptimization = enableSwitchMapRemoval;
               options.enableEnumSwitchMapRemoval = enableSwitchMapRemoval;
             })
+        .addDontWarnJetBrainsAnnotations()
         .setMinApi(parameters.getRuntime())
         .noMinification()
         .compile()
diff --git a/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java b/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
index 53b9d9b..ac7eb23 100644
--- a/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
@@ -96,6 +96,7 @@
         .addKeepAllClassesRule()
         .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
         .allowDiagnosticWarningMessages()
+        .addDontWarnJetBrains()
         .compile()
         .writeToZip(foo.toPath())
         .assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
diff --git a/src/test/java/com/android/tools/r8/kotlin/sealed/SealedClassTest.java b/src/test/java/com/android/tools/r8/kotlin/sealed/SealedClassTest.java
index 6b70ca2..b115bb7 100644
--- a/src/test/java/com/android/tools/r8/kotlin/sealed/SealedClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/sealed/SealedClassTest.java
@@ -76,6 +76,7 @@
         .allowAccessModification()
         .allowDiagnosticWarningMessages(parameters.isCfRuntime())
         .addKeepMainRule(MAIN)
+        .addDontWarnJetBrainsAnnotations()
         .compileWithExpectedDiagnostics(
             diagnostics ->
                 diagnostics.assertAllWarningsMatch(
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
index cf2aeeb..172005c 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
@@ -210,7 +210,11 @@
         Paths.get(EXAMPLE_SRC_DIR, "multidex", "main-dex-rules.txt"),
         Paths.get(EXAMPLE_O_SRC_DIR, "multidex004", "ref-list-1.txt"),
         Paths.get(EXAMPLE_O_SRC_DIR, "multidex004", "ref-list-1.txt"),
-        AndroidApiLevel.I);
+        AndroidApiLevel.I,
+        builder ->
+            builder
+                .addDontWarnCompilerSynthesizedAnnotations()
+                .addOptionsModification(options -> options.enableInlining = false));
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/maindexlist/warnings/MainDexWarningsTest.java b/src/test/java/com/android/tools/r8/maindexlist/warnings/MainDexWarningsTest.java
index 4f5e54a..22bad85 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/warnings/MainDexWarningsTest.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/warnings/MainDexWarningsTest.java
@@ -57,6 +57,7 @@
         .addKeepMainRule(mainClass)
         // Include main dex rule for class Static.
         .addMainDexClassRules(Main.class, Static.class)
+        .enableForceInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .inspect(this::classStaticGone)
@@ -69,9 +70,11 @@
         .setMinApi(AndroidApiLevel.K)
         .addProgramClasses(testClassesWithoutStatic)
         .addKeepMainRule(mainClass)
+        .addDontWarn(Static.class)
         // Include explicit main dex entry for class Static.
         .addMainDexListClasses(Static.class)
         .allowDiagnosticWarningMessages()
+        .enableForceInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .inspect(this::classStaticGone)
@@ -91,7 +94,9 @@
         .addMainDexListClasses(Main.class, Static.class)
         // Include main dex rule for class Static2.
         .addMainDexClassRules(Static2.class)
+        .addDontWarn(Static.class)
         .allowDiagnosticWarningMessages()
+        .enableForceInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .inspect(this::classStaticGone)
diff --git a/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java b/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java
index 837459c..8dd68fc 100644
--- a/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java
+++ b/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java
@@ -64,6 +64,7 @@
             .addProgramFiles(getJavaJarFile(FOLDER))
             .addKeepMainRule(MAIN_CLASS_NAME)
             .addKeepClassRulesWithAllowObfuscation(ENUM_CLASS_NAME)
+            .addDontWarnJetBrainsAnnotations()
             .allowDiagnosticWarningMessages()
             .minification(minify)
             .setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/naming/FieldNamingObfuscationDictionaryTest.java b/src/test/java/com/android/tools/r8/naming/FieldNamingObfuscationDictionaryTest.java
index 0ab866f..165d0f7 100644
--- a/src/test/java/com/android/tools/r8/naming/FieldNamingObfuscationDictionaryTest.java
+++ b/src/test/java/com/android/tools/r8/naming/FieldNamingObfuscationDictionaryTest.java
@@ -99,6 +99,7 @@
         .addInnerClasses(FieldNamingObfuscationDictionaryTest.class)
         .addKeepRules("-overloadaggressively", "-obfuscationdictionary " + dictionary.toString())
         .addKeepMainRule(Runner.class)
+        .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
         .enableNoHorizontalClassMergingAnnotations()
         .setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java b/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java
index ebd7420..7ec2589 100644
--- a/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java
+++ b/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java
@@ -6,7 +6,6 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-import com.android.tools.r8.ArchiveClassFileProvider;
 import com.android.tools.r8.R8TestCompileResult;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -16,10 +15,8 @@
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import com.google.common.collect.ImmutableSet;
 import java.io.IOException;
 import java.util.Collections;
-import java.util.concurrent.ExecutionException;
 import java.util.function.Function;
 import org.junit.ClassRule;
 import org.junit.Test;
@@ -44,17 +41,11 @@
   @ClassRule public static TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
 
   private static R8TestCompileResult compile(Backend backend)
-      throws com.android.tools.r8.CompilationFailedException, IOException, ExecutionException {
+      throws com.android.tools.r8.CompilationFailedException, IOException {
     R8TestCompileResult compileResult =
         testForR8(staticTemp, backend)
             .addProgramClasses(TestInterface.class, TestClass.class)
             .addKeepMainRule(TestClass.class)
-            .addLibraryProvider(
-                new ArchiveClassFileProvider(
-                    ToolHelper.getJava8RuntimeJar(),
-                    name ->
-                        ImmutableSet.of("java/lang/Object", "java/lang/System")
-                            .contains(name.replace(".class", ""))))
             .setMinApi(AndroidApiLevel.B)
             .compile()
             .assertNoMessages();
diff --git a/src/test/java/com/android/tools/r8/naming/IntersectionLambdaTest.java b/src/test/java/com/android/tools/r8/naming/IntersectionLambdaTest.java
index efb5d35..5b8dc11 100644
--- a/src/test/java/com/android/tools/r8/naming/IntersectionLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/naming/IntersectionLambdaTest.java
@@ -51,7 +51,6 @@
         .assertSuccessWithOutputLines(EXPECTED);
   }
 
-  @FunctionalInterface
   @NoVerticalClassMerging
   public interface I {
     void foo();
diff --git a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
index 70a9cb2..d257b32 100644
--- a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
+++ b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
@@ -88,6 +88,7 @@
             .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
             .addProgramFiles(getJavaJarFile(FOLDER))
             .addKeepMainRule(mainClassName)
+            .addDontWarnJetBrainsAnnotations()
             .allowDiagnosticWarningMessages()
             .minification(minification)
             .compile()
@@ -149,6 +150,7 @@
                     "-" + NoHorizontalClassMergingRule.RULE_NAME + " class **." + targetClassName,
                     "-" + NoStaticClassMergingRule.RULE_NAME + " class **." + targetClassName,
                     "-neverinline class **." + targetClassName + " { <methods>; }"))
+            .addDontWarnJetBrainsAnnotations()
             .allowDiagnosticWarningMessages()
             .minification(minification)
             .compile()
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingDesugarLambdaTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingDesugarLambdaTest.java
index 0d0af87..9db718e 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingDesugarLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingDesugarLambdaTest.java
@@ -104,7 +104,6 @@
     }
   }
 
-  @FunctionalInterface
   public interface I {
 
     void doStuff();
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInnerClassesPreserveTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInnerClassesPreserveTest.java
index 6d61f51..2f7c01c 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInnerClassesPreserveTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInnerClassesPreserveTest.java
@@ -26,7 +26,7 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimes().build();
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
   }
 
   public ApplyMappingInnerClassesPreserveTest(TestParameters parameters) {
@@ -41,7 +41,7 @@
             .addProgramClassesAndInnerClasses(InnerLibraryClass.class)
             .addKeepAllClassesRuleWithAllowObfuscation()
             .addKeepClassAndMembersRulesWithAllowObfuscation(InnerLibraryClass.class)
-            .setMinApi(parameters.getRuntime())
+            .setMinApi(parameters.getApiLevel())
             .compile();
     testForR8(parameters.getBackend())
         .addProgramClassesAndInnerClasses(ProgramClassWithSimpleLibraryReference.class)
@@ -49,7 +49,7 @@
         .addKeepMainRule(ProgramClassWithSimpleLibraryReference.class)
         .addApplyMapping(libraryCompileResult.getProguardMap())
         .addKeepAttributes("EnclosingMethod", "InnerClasses")
-        .setMinApi(parameters.getRuntime())
+        .setMinApi(parameters.getApiLevel())
         .noTreeShaking()
         .compile()
         .addRunClasspathFiles(libraryCompileResult.writeToZip())
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInterfaceClInitTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInterfaceClInitTest.java
index 6887f59..de95714 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInterfaceClInitTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInterfaceClInitTest.java
@@ -86,7 +86,6 @@
     void foo();
   }
 
-  @NeverClassInline
   public static class Main implements TestInterface {
 
     public static void main(String[] args) {
@@ -94,7 +93,6 @@
     }
 
     @Override
-    @NeverInline
     public void foo() {
       System.out.println("Hello World!");
     }
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingMultipleInterfacesTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingMultipleInterfacesTest.java
index b56464e..af6c004 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingMultipleInterfacesTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingMultipleInterfacesTest.java
@@ -5,7 +5,6 @@
 package com.android.tools.r8.naming.applymapping;
 
 import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.R8TestCompileResult;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -46,7 +45,6 @@
 
   public static class ImplementsI2I3 implements I2, I3 {
     @Override
-    @NeverInline
     public String foo(String bar) {
       System.out.print("Hello" + bar);
       return bar;
@@ -55,7 +53,6 @@
 
   public static class ImplementsI3 implements I3 {
     @Override
-    @NeverInline
     public String foo(String bar) {
       System.out.print("Goodbye");
       return bar;
@@ -84,7 +81,7 @@
 
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimes().build();
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
   }
 
   public ApplyMappingMultipleInterfacesTest(TestParameters parameters) {
@@ -98,19 +95,24 @@
         testForR8(parameters.getBackend())
             .addProgramClasses(I2Minified.class, I3Minified.class)
             .addKeepAllClassesRule()
-            .setMinApi(parameters.getRuntime())
+            .setMinApi(parameters.getApiLevel())
             .compile();
     testForR8(parameters.getBackend())
         .addClasspathClasses(I2.class, I3.class)
         .addProgramClasses(MainForImplements.class, ImplementsI2I3.class, ImplementsI3.class)
         .addKeepMainRule(MainForImplements.class)
         .addApplyMapping(
-            I2.class.getTypeName() + " -> " + I2Minified.class.getTypeName() + ":\n" +
-            "  java.lang.String foo(java.lang.String) -> a\n" +
-            I3.class.getTypeName() + " -> " + I3Minified.class.getTypeName() + ":\n" +
-                "  java.lang.String foo(java.lang.String) -> a"
-        )
-        .setMinApi(parameters.getRuntime())
+            I2.class.getTypeName()
+                + " -> "
+                + I2Minified.class.getTypeName()
+                + ":\n"
+                + "  java.lang.String foo(java.lang.String) -> a\n"
+                + I3.class.getTypeName()
+                + " -> "
+                + I3Minified.class.getTypeName()
+                + ":\n"
+                + "  java.lang.String foo(java.lang.String) -> a")
+        .setMinApi(parameters.getApiLevel())
         .compile()
         .addRunClasspathFiles(libraryResult.writeToZip())
         .run(parameters.getRuntime(), MainForImplements.class)
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/shared/InnerLibraryClass.java b/src/test/java/com/android/tools/r8/naming/applymapping/shared/InnerLibraryClass.java
index 1e751d1..8cfa59b 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/shared/InnerLibraryClass.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/shared/InnerLibraryClass.java
@@ -4,12 +4,9 @@
 
 package com.android.tools.r8.naming.applymapping.shared;
 
-import com.android.tools.r8.NeverInline;
-
 public class InnerLibraryClass {
 
   public static class LibraryClass {
-    @NeverInline
     public void foo() {
       System.out.println("LibraryClass.foo()");
     }
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/shared/ProgramClassWithSimpleLibraryReference.java b/src/test/java/com/android/tools/r8/naming/applymapping/shared/ProgramClassWithSimpleLibraryReference.java
index 42b7907..a42654f 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/shared/ProgramClassWithSimpleLibraryReference.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/shared/ProgramClassWithSimpleLibraryReference.java
@@ -12,7 +12,6 @@
   public static class SubLibraryClass extends LibraryClass {
 
     @Override
-    @NeverInline
     public void foo() {
       System.out.println("SubLibraryClass.foo()");
       super.foo();
diff --git a/src/test/java/com/android/tools/r8/naming/b126592786/B126592786.java b/src/test/java/com/android/tools/r8/naming/b126592786/B126592786.java
index de81c15..b2614a3 100644
--- a/src/test/java/com/android/tools/r8/naming/b126592786/B126592786.java
+++ b/src/test/java/com/android/tools/r8/naming/b126592786/B126592786.java
@@ -44,7 +44,7 @@
     Class<?> mainClass = genericTypeLive ? MainGenericTypeLive.class : MainGenericTypeNotLive.class;
     testForR8(backend)
         .minification(minify)
-        .addProgramClasses(GetClassUtil.class, A.class, GenericType.class, mainClass)
+        .addProgramClasses(GetClassUtil.class, A.class, GenericType.class, mainClass, Marker.class)
         .addKeepMainRule(mainClass)
         .addKeepRules(
             "-keep class " + GetClassUtil.class.getTypeName() + " {",
diff --git a/src/test/java/com/android/tools/r8/naming/b139991218/TestRunner.java b/src/test/java/com/android/tools/r8/naming/b139991218/TestRunner.java
index ef791d3..69f0148 100644
--- a/src/test/java/com/android/tools/r8/naming/b139991218/TestRunner.java
+++ b/src/test/java/com/android/tools/r8/naming/b139991218/TestRunner.java
@@ -64,6 +64,7 @@
               options.testing.validInliningReasons = ImmutableSet.of(Reason.FORCE);
               options.enableClassInlining = false;
             })
+        .addDontWarnJetBrainsAnnotations()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutput(StringUtils.lines("11", "12"))
diff --git a/src/test/java/com/android/tools/r8/naming/methodparameters/MethodParametersTest.java b/src/test/java/com/android/tools/r8/naming/methodparameters/MethodParametersTest.java
index 30e72d7..a8e337e 100644
--- a/src/test/java/com/android/tools/r8/naming/methodparameters/MethodParametersTest.java
+++ b/src/test/java/com/android/tools/r8/naming/methodparameters/MethodParametersTest.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.R8TestRunResult;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.BooleanUtils;
@@ -58,7 +59,10 @@
             .addKeepClassAndMembersRulesWithAllowObfuscation(MethodParametersTest.class)
             .addKeepMainRule(MethodParametersTest.class)
             .addKeepRules(keepMethodParameters ? "-keepattributes MethodParameters" : "")
-            .setMinApi(AndroidApiLevel.L)
+            .setMinApi(keepMethodParameters ? AndroidApiLevel.O : AndroidApiLevel.L)
+            // java.lang.reflect.Parameter was introduced in API level 26 (O).
+            .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.O))
+            .compile()
             .run(parameters.getRuntime(), MethodParametersTest.class);
     if (keepMethodParameters) {
       checkOutputContainsAll(runResult.getStdOut());
diff --git a/src/test/java/com/android/tools/r8/naming/retrace/DesugarLambdaRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retrace/DesugarLambdaRetraceTest.java
index 6ae3a6f..2836f61 100644
--- a/src/test/java/com/android/tools/r8/naming/retrace/DesugarLambdaRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retrace/DesugarLambdaRetraceTest.java
@@ -144,7 +144,6 @@
 }
 
 // Custom consumer functional interface, as java.util.function.Consumer is not present on Android.
-@FunctionalInterface
 interface ConsumerDesugarLambdaRetraceTest<T> {
   void accept(T value);
 }
diff --git a/src/test/java/com/android/tools/r8/naming/retrace/InliningRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retrace/InliningRetraceTest.java
index 2ffe206..344a716 100644
--- a/src/test/java/com/android/tools/r8/naming/retrace/InliningRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retrace/InliningRetraceTest.java
@@ -84,7 +84,9 @@
 
   @Override
   public void configure(R8TestBuilder<?> builder) {
-    builder.applyIf(mode == CompilationMode.RELEASE, R8TestBuilder::enableForceInliningAnnotations);
+    builder
+        .addForceInliningAnnotations()
+        .applyIf(mode == CompilationMode.RELEASE, R8TestBuilder::enableForceInliningAnnotations);
   }
 
   @Override
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java
index a527d93..458cb07 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java
@@ -166,7 +166,6 @@
 }
 
 // Custom consumer functional interface, as java.util.function.Consumer is not present on Android.
-@FunctionalInterface
 interface ConsumerDesugarLambdaRetraceTest<T> {
   void accept(T value);
 }
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java
index 2034f5d..47240a5 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java
@@ -9,6 +9,7 @@
 
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.R8TestBuilder;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.google.common.collect.ImmutableList;
@@ -33,6 +34,11 @@
   }
 
   @Override
+  public void configure(R8TestBuilder builder) {
+    builder.enableInliningAnnotations();
+  }
+
+  @Override
   public Collection<Class<?>> getClasses() {
     return ImmutableList.of(
         getMainClass(), InterfaceWithStaticMethod1.class, InterfaceWithStaticMethod2.class);
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java
index e94483f..62c4de9 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java
@@ -48,12 +48,12 @@
 
   public void runTest(List<String> keepRules, BiConsumer<StackTrace, StackTrace> checker)
       throws Exception {
-
     R8TestRunResult result =
         (compat ? testForR8Compat(backend) : testForR8(backend))
             .setMode(mode)
             .enableProguardTestOptions()
             .addProgramClasses(getClasses())
+            .addForceInliningAnnotations()
             .addKeepMainRule(getMainClass())
             .addKeepRules(keepRules)
             .apply(this::configure)
diff --git a/src/test/java/com/android/tools/r8/regress/b63935662/Regress63935662.java b/src/test/java/com/android/tools/r8/regress/b63935662/Regress63935662.java
index 1151d20..ced781f 100644
--- a/src/test/java/com/android/tools/r8/regress/b63935662/Regress63935662.java
+++ b/src/test/java/com/android/tools/r8/regress/b63935662/Regress63935662.java
@@ -8,6 +8,7 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.google.common.collect.ImmutableList;
 import java.util.List;
 import org.junit.Test;
@@ -21,7 +22,10 @@
 
   @Parameterized.Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimesAndApiLevels().build();
+    return getTestParameters()
+        .withAllRuntimes()
+        .withApiLevelsStartingAtIncluding(AndroidApiLevel.N)
+        .build();
   }
 
   public Regress63935662(TestParameters parameters) {
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java
index e548bcf..c8a47ca 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java
@@ -49,6 +49,7 @@
         .addInnerClasses(getClass())
         .addClassObfuscationDictionary("a")
         .addKeepMainRule(TestClass.class)
+        .addMemberValuePropagationAnnotations()
         .apply(this::configureRepackaging)
         .enableMemberValuePropagationAnnotations(enableMemberValuePropagationAnnotations)
         .setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateFieldTypeTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateFieldTypeTest.java
index 9dd90f3..543dbf8 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateFieldTypeTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateFieldTypeTest.java
@@ -63,7 +63,6 @@
 
   public static class IneligibleForRepackaging {
 
-    @NeverPropagateValue
     private static NonPublicKeptClass FIELD =
         System.currentTimeMillis() > 0 ? new PublicSubClass() : null;
 
diff --git a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java
index 2319ca4..7190c3f 100644
--- a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java
+++ b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java
@@ -7,7 +7,6 @@
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoStaticClassMerging;
-import com.android.tools.r8.NoVerticalClassMerging;
 
 @NoHorizontalClassMerging
 @NoStaticClassMerging
@@ -18,7 +17,8 @@
     Helper.test();
   }
 
-  @NoVerticalClassMerging
+  @NoHorizontalClassMerging
+  @NoStaticClassMerging
   public static class Helper {
 
     @NeverInline
diff --git a/src/test/java/com/android/tools/r8/resolution/InvokeDefaultMethodViaStaticTest.java b/src/test/java/com/android/tools/r8/resolution/InvokeDefaultMethodViaStaticTest.java
index 2080b42..37f328e 100644
--- a/src/test/java/com/android/tools/r8/resolution/InvokeDefaultMethodViaStaticTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/InvokeDefaultMethodViaStaticTest.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.TestRunResult;
 import com.android.tools.r8.resolution.invokestaticinterfacedefault.InterfaceDump;
 import com.android.tools.r8.resolution.invokestaticinterfacedefault.MainDump;
 import com.google.common.collect.ImmutableList;
@@ -35,34 +34,20 @@
 
   @Test
   public void testReference() throws Exception {
-    TestRunResult<?> result =
-        testForRuntime(parameters)
-            .addProgramClassFileData(CLASSES)
-            .run(parameters.getRuntime(), "Main");
-    if (parameters.isDexRuntime()
-        && parameters.getApiLevel().isLessThan(apiLevelWithDefaultInterfaceMethodsSupport())) {
-      // TODO(b/167535447): Desugaring should preserve the error.
-      result.assertFailureWithErrorThatThrows(NoSuchMethodError.class);
-    } else {
-      result.assertFailureWithErrorThatThrows(IncompatibleClassChangeError.class);
-    }
+    testForRuntime(parameters)
+        .addProgramClassFileData(CLASSES)
+        .run(parameters.getRuntime(), "Main")
+        .assertFailureWithErrorThatThrows(IncompatibleClassChangeError.class);
   }
 
   @Test
   public void testR8() throws Exception {
-    TestRunResult<?> result =
-        testForR8(parameters.getBackend())
-            .addProgramClassFileData(CLASSES)
-            .addKeepMainRule("Main")
-            .setMinApi(parameters.getApiLevel())
-            .addOptionsModification(o -> o.testing.allowInvokeErrors = true)
-            .run(parameters.getRuntime(), "Main");
-    if (parameters.isDexRuntime()
-        && parameters.getApiLevel().isLessThan(apiLevelWithDefaultInterfaceMethodsSupport())) {
-      // TODO(b/167535447): Desugaring should preserve the error.
-      result.assertFailureWithErrorThatThrows(NoClassDefFoundError.class);
-    } else {
-      result.assertFailureWithErrorThatThrows(IncompatibleClassChangeError.class);
-    }
+    testForR8(parameters.getBackend())
+        .addProgramClassFileData(CLASSES)
+        .addKeepMainRule("Main")
+        .setMinApi(parameters.getApiLevel())
+        .addOptionsModification(o -> o.testing.allowInvokeErrors = true)
+        .run(parameters.getRuntime(), "Main")
+        .assertFailureWithErrorThatThrows(IncompatibleClassChangeError.class);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessWithIntermediateTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessWithIntermediateTest.java
index 364014c..fef2265 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessWithIntermediateTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessWithIntermediateTest.java
@@ -171,6 +171,7 @@
         .addProgramClassFileData(getTransformedClasses())
         .setMinApi(parameters.getApiLevel())
         .addKeepMainRule(Main.class)
+        .addDontWarnCompanionClasses()
         .run(parameters.getRuntime(), Main.class)
         .apply(result -> checkExpectedResult(result, true));
   }
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodAsOverrideWithLambdaTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodAsOverrideWithLambdaTest.java
index 3215f17..8f800f6 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodAsOverrideWithLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodAsOverrideWithLambdaTest.java
@@ -93,7 +93,6 @@
         .assertSuccessWithOutputLines(EXPECTED);
   }
 
-  @FunctionalInterface
   @NoVerticalClassMerging
   public interface I {
     void foo();
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodLambdaTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodLambdaTest.java
index 77fa9d8..169c255 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodLambdaTest.java
@@ -89,7 +89,6 @@
         .assertSuccessWithOutputLines(EXPECTED);
   }
 
-  @FunctionalInterface
   @NoVerticalClassMerging
   public interface I {
     void foo();
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultWithoutTopTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultWithoutTopTest.java
index 70a350f..16c1401 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultWithoutTopTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultWithoutTopTest.java
@@ -86,6 +86,9 @@
         .addProgramClasses(I.class, J.class, Main.class)
         .addProgramClassFileData(setAImplementsIAndJ())
         .addKeepMainRule(Main.class)
+        .enableInliningAnnotations()
+        .enableNeverClassInliningAnnotations()
+        .enableNoVerticalClassMergingAnnotations()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines(EXPECTED);
@@ -131,6 +134,9 @@
         .addProgramClasses(I.class, J.class, K.class, Main.class)
         .addProgramClassFileData(setAimplementsIandK())
         .addKeepMainRule(Main.class)
+        .enableInliningAnnotations()
+        .enableNeverClassInliningAnnotations()
+        .enableNoVerticalClassMergingAnnotations()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/LambdaMultipleInterfacesTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/LambdaMultipleInterfacesTest.java
index 5422f9b..958e785 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/LambdaMultipleInterfacesTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/LambdaMultipleInterfacesTest.java
@@ -90,7 +90,6 @@
         .assertSuccessWithOutputLines(EXPECTED);
   }
 
-  @FunctionalInterface
   @NoVerticalClassMerging
   public interface I {
     void foo();
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultWithoutTopTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultWithoutTopTest.java
index 0daaa44..1e23ae3 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultWithoutTopTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultWithoutTopTest.java
@@ -86,6 +86,9 @@
         .addProgramClasses(I.class, J.class, Main.class)
         .addProgramClassFileData(setAImplementsIAndJ())
         .addKeepMainRule(Main.class)
+        .enableInliningAnnotations()
+        .enableNeverClassInliningAnnotations()
+        .enableNoVerticalClassMergingAnnotations()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideTest.java
index e5904db..00f9b0b 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideTest.java
@@ -11,8 +11,6 @@
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.NeverClassInline;
-import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -101,6 +99,7 @@
     testForR8(parameters.getBackend())
         .addProgramClasses(MyViewModel.class, Main.class, ViewModel.class, ViewModelRunner.class)
         .addKeepMainRule(Main.class)
+        .enableInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines(EXPECTED);
@@ -146,6 +145,7 @@
         .addProgramClasses(MyViewModel.class, ViewModel.class, ViewModelRunner.class)
         .addProgramClassFileData(getModifiedMainWithIllegalInvokeToViewModelClear())
         .addKeepMainRule(Main.class)
+        .enableInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), Main.class)
         .assertFailureWithErrorThatThrows(IllegalAccessError.class);
@@ -198,6 +198,7 @@
         .addProgramClasses(MyViewModel.class, ViewModel.class, Main.class)
         .addProgramClassFileData(getModifiedViewModelRunnerWithDirectMyViewModelTarget())
         .addKeepMainRule(Main.class)
+        .enableInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutputLines(AMBIGUOUS_EXPECTED_OUTPUT);
@@ -238,10 +239,8 @@
         .transform();
   }
 
-  @NeverClassInline
   public static class MyViewModel extends ViewModel {
 
-    @NeverInline
     public void clear() {
       System.out.println("MyViewModel.clear()");
     }
diff --git a/src/test/java/com/android/tools/r8/retrace/InlineWithoutNullCheckTest.java b/src/test/java/com/android/tools/r8/retrace/InlineWithoutNullCheckTest.java
index 3cabc0e..6973f6b 100644
--- a/src/test/java/com/android/tools/r8/retrace/InlineWithoutNullCheckTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/InlineWithoutNullCheckTest.java
@@ -12,7 +12,6 @@
 
 import com.android.tools.r8.AlwaysInline;
 import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.NeverPropagateValue;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -110,6 +109,7 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(InlineWithoutNullCheckTest.class)
         .addKeepMainRule(TestClassForInlineMethod.class)
+        .enableAlwaysInliningAnnotations()
         .enableInliningAnnotations()
         .addKeepAttributes(ProguardKeepAttributes.SOURCE_FILE)
         .setMinApi(parameters.getApiLevel())
@@ -137,6 +137,7 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(InlineWithoutNullCheckTest.class)
         .addKeepMainRule(TestClassForInlineField.class)
+        .enableAlwaysInliningAnnotations()
         .enableInliningAnnotations()
         .addKeepAttributes(ProguardKeepAttributes.SOURCE_FILE)
         .setMinApi(parameters.getApiLevel())
@@ -165,6 +166,7 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(InlineWithoutNullCheckTest.class)
         .addKeepMainRule(TestClassForInlineStaticField.class)
+        .enableAlwaysInliningAnnotations()
         .enableInliningAnnotations()
         .addKeepAttributes(ProguardKeepAttributes.SOURCE_FILE)
         .setMinApi(parameters.getApiLevel())
@@ -232,7 +234,7 @@
   }
 
   static class A {
-    @NeverPropagateValue Result result;
+    Result result;
 
     A(Result result) {
       this.result = result;
@@ -260,8 +262,8 @@
   }
 
   static class Result {
-    @NeverPropagateValue int x = 1;
-    @NeverPropagateValue static int y = 1;
+    int x = 1;
+    static int y = 1;
 
     @AlwaysInline
     int methodWhichAccessInstanceMethod() {
diff --git a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java
index 274b990..a715864 100644
--- a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java
@@ -91,6 +91,7 @@
     testForR8(parameters.getBackend())
         .addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
         .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+        .addDontWarnJetBrainsAnnotations()
         .addKeepAttributes("SourceFile", "LineNumberTable")
         .setMode(CompilationMode.RELEASE)
         .addKeepMainRule(MAIN)
diff --git a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java
index d22a979..e018cdd 100644
--- a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java
@@ -109,6 +109,7 @@
         .allowDiagnosticWarningMessages()
         .setMode(CompilationMode.RELEASE)
         .addKeepMainRule(main)
+        .addDontWarnJetBrainsAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
@@ -139,6 +140,7 @@
         .allowDiagnosticWarningMessages()
         .setMode(CompilationMode.RELEASE)
         .addKeepMainRule(main)
+        .addDontWarnJetBrainsAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
@@ -172,6 +174,7 @@
         .allowDiagnosticWarningMessages()
         .setMode(CompilationMode.RELEASE)
         .addKeepMainRule(main)
+        .addDontWarnJetBrainsAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
@@ -204,6 +207,7 @@
         .allowDiagnosticWarningMessages()
         .setMode(CompilationMode.RELEASE)
         .addKeepMainRule(main)
+        .addDontWarnJetBrainsAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/EnumInvalidValuesLengthTest.java b/src/test/java/com/android/tools/r8/rewrite/enums/EnumInvalidValuesLengthTest.java
index ead99d1..2636944 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/EnumInvalidValuesLengthTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/EnumInvalidValuesLengthTest.java
@@ -36,6 +36,7 @@
         .addKeepMainRule(EnumInvalidValuesLengthTest.Main.class)
         .addProgramClasses(EnumInvalidValuesLengthTest.Main.class)
         .addProgramClassFileData(transformValues(MyEnum.class))
+        .enableNeverClassInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .run(parameters.getRuntime(), EnumInvalidValuesLengthTest.Main.class)
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
index ae4947a..7733b23 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
@@ -57,6 +57,7 @@
     testForR8(parameters.getBackend())
         .addProgramClassesAndInnerClasses(Ordinals.class)
         .addKeepMainRule(Ordinals.class)
+        .enableForceInliningAnnotations()
         .enableInliningAnnotations()
         .enableSideEffectAnnotations()
         .addOptionsModification(this::configure)
@@ -105,6 +106,7 @@
     testForR8(parameters.getBackend())
         .addProgramClassesAndInnerClasses(Names.class)
         .addKeepMainRule(Names.class)
+        .enableForceInliningAnnotations()
         .enableInliningAnnotations()
         .enableSideEffectAnnotations()
         .addOptionsModification(this::configure)
@@ -150,6 +152,7 @@
     testForR8(parameters.getBackend())
         .addProgramClassesAndInnerClasses(ToStrings.class)
         .addKeepMainRule(ToStrings.class)
+        .enableForceInliningAnnotations()
         .enableInliningAnnotations()
         .enableSideEffectAnnotations()
         .addOptionsModification(this::configure)
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/EnumSideEffect.java b/src/test/java/com/android/tools/r8/rewrite/enums/EnumSideEffect.java
index a0e59b3..2d1b018 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/EnumSideEffect.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/EnumSideEffect.java
@@ -39,6 +39,7 @@
         .addKeepMainRule(Main.class)
         .enableInliningAnnotations()
         .addInnerClasses(EnumSideEffect.class)
+        .enableNeverClassInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassTest.java b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassTest.java
index ee99ea1..5bcfdb8 100644
--- a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassTest.java
@@ -5,7 +5,6 @@
 package com.android.tools.r8.rewrite.serviceloaders;
 
 import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static org.hamcrest.CoreMatchers.anyOf;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -55,10 +54,11 @@
                 AppServices.SERVICE_DIRECTORY_NAME + Service.class.getTypeName(),
                 Origin.unknown()))
         .addOptionsModification(o -> o.dataResourceConsumer = dataResourceConsumer)
+        .addDontWarn(ServiceImpl.class)
         .allowDiagnosticWarningMessages()
         .setMinApi(parameters.getApiLevel())
         .compile()
-        .inspectDiagnosticMessages(this::inspectDiagnosticMessages)
+        .inspectDiagnosticMessages(this::inspectDiagnosticMessagesWithDontWarn)
         .addRunClasspathClasses(Service.class, ServiceImpl.class)
         .run(parameters.getRuntime(), TestClass.class)
         .assertSuccessWithEmptyOutput();
@@ -80,26 +80,39 @@
                 AppServices.SERVICE_DIRECTORY_NAME + Service.class.getTypeName(),
                 Origin.unknown()))
         .run()
-        .inspectDiagnosticMessages(this::inspectDiagnosticMessages);
+        .inspectDiagnosticMessages(this::inspectDiagnosticMessagesWithoutDontWarn);
   }
 
-  private void inspectDiagnosticMessages(TestDiagnosticMessages inspector) {
-    inspector.assertWarningsCount(2);
-    inspector.assertAllWarningsMatch(
-        diagnosticMessage(
-            anyOf(
+  private void inspectDiagnosticMessagesWithDontWarn(TestDiagnosticMessages diagnostics) {
+    diagnostics
+        .assertOnlyWarnings()
+        .assertWarningsMatch(
+            diagnosticMessage(
                 containsString(
                     "Unexpected reference to missing service class: "
                         + AppServices.SERVICE_DIRECTORY_NAME
                         + Service.class.getTypeName()
-                        + "."),
+                        + ".")));
+  }
+
+  private void inspectDiagnosticMessagesWithoutDontWarn(TestDiagnosticMessages inspector) {
+    inspector
+        .assertOnlyWarnings()
+        .assertWarningsMatch(
+            diagnosticMessage(
+                containsString(
+                    "Unexpected reference to missing service class: "
+                        + AppServices.SERVICE_DIRECTORY_NAME
+                        + Service.class.getTypeName()
+                        + ".")),
+            diagnosticMessage(
                 containsString(
                     "Unexpected reference to missing service implementation class in "
                         + AppServices.SERVICE_DIRECTORY_NAME
                         + Service.class.getTypeName()
                         + ": "
                         + ServiceImpl.class.getTypeName()
-                        + "."))));
+                        + ".")));
   }
 
   private void inspectResource(List<String> contents) {
diff --git a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassWithFeatureTest.java b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassWithFeatureTest.java
index f36c122..be5dfb6 100644
--- a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassWithFeatureTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassWithFeatureTest.java
@@ -38,7 +38,7 @@
         .addProgramClasses(TestClass.class, ServiceImpl.class)
         .addKeepMainRule(TestClass.class)
         .addKeepClassAndMembersRules(FeatureClass.class)
-        .addKeepRules("-dontwarn " + Service.class.getTypeName())
+        .addDontWarn(Service.class.getTypeName())
         .addDataEntryResources(
             DataEntryResource.fromBytes(
                 StringUtils.lines("java.lang.Object").getBytes(),
diff --git a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassTest.java b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassTest.java
index 9039c50..ca17780 100644
--- a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassTest.java
@@ -4,15 +4,12 @@
 
 package com.android.tools.r8.rewrite.serviceloaders;
 
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
 import com.android.tools.r8.DataEntryResource;
-import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.R8TestCompileResult;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -59,6 +56,7 @@
     R8TestCompileResult compileResult =
         testForR8(parameters.getBackend())
             .addProgramClasses(TestClass.class, Service.class)
+            .addDontWarn(ServiceImpl.class)
             .addKeepMainRule(TestClass.class)
             .addKeepClassAndMembersRulesWithAllowObfuscation(Service.class)
             .addDataEntryResources(
@@ -72,22 +70,8 @@
                       new DataResourceConsumerForTesting(options.dataResourceConsumer));
                   options.dataResourceConsumer = dataResourceConsumer.get();
                 })
-            .allowDiagnosticWarningMessages()
             .setMinApi(parameters.getApiLevel())
-            .compile()
-            .inspectDiagnosticMessages(
-                inspector -> {
-                  inspector.assertWarningsCount(1);
-                  inspector.assertAllWarningsMatch(
-                      diagnosticMessage(
-                          containsString(
-                              "Unexpected reference to missing service implementation class in "
-                                  + AppServices.SERVICE_DIRECTORY_NAME
-                                  + Service.class.getTypeName()
-                                  + ": "
-                                  + ServiceImpl.class.getTypeName()
-                                  + ".")));
-                });
+            .compile();
 
     CodeInspector inspector = compileResult.inspector();
     ClassSubject serviceClassSubject = inspector.clazz(Service.class);
@@ -171,7 +155,6 @@
   public static class ServiceImpl implements Service {
 
     @Override
-    @NeverInline
     public void greet() {
       System.out.println("Hello world!");
     }
diff --git a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassWithFeatureTest.java b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassWithFeatureTest.java
index b3f120c..a3aea84 100644
--- a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassWithFeatureTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassWithFeatureTest.java
@@ -4,8 +4,6 @@
 
 package com.android.tools.r8.rewrite.serviceloaders;
 
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static org.hamcrest.CoreMatchers.containsString;
 
 import com.android.tools.r8.DataEntryResource;
 import com.android.tools.r8.TestBase;
@@ -40,6 +38,7 @@
   public void testR8() throws Exception {
     testForR8(parameters.getBackend())
         .addProgramClasses(TestClass.class, Service.class)
+        .addDontWarn("MissingClass")
         .addKeepMainRule(TestClass.class)
         .addKeepClassAndMembersRules(FeatureClass.class)
         .addDataEntryResources(
@@ -48,20 +47,8 @@
                 AppServices.SERVICE_DIRECTORY_NAME + Service.class.getTypeName(),
                 Origin.unknown()))
         .addFeatureSplit(FeatureClass.class)
-        .allowDiagnosticWarningMessages()
         .setMinApi(parameters.getApiLevel())
-        .compile()
-        .inspectDiagnosticMessages(
-            inspector -> {
-              inspector.assertWarningsCount(1);
-              inspector.assertAllWarningsMatch(
-                  diagnosticMessage(
-                      containsString(
-                          "Unexpected reference to missing service implementation class in "
-                              + AppServices.SERVICE_DIRECTORY_NAME
-                              + Service.class.getTypeName()
-                              + ": MissingClass.")));
-            });
+        .compile();
   }
 
   static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/ServiceWithoutResourceFileAtCompileTimeTest.java b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/ServiceWithoutResourceFileAtCompileTimeTest.java
index 1ea55b8..9f5eada 100644
--- a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/ServiceWithoutResourceFileAtCompileTimeTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/ServiceWithoutResourceFileAtCompileTimeTest.java
@@ -69,6 +69,7 @@
         .addClasspathClasses(Service.class)
         .addKeepAllClassesRule()
         .addApplyMapping(compileResult.getProguardMap())
+        .enableInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .addRunClasspathFiles(
diff --git a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
index b5aba75..4b924d5 100644
--- a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
@@ -73,6 +73,9 @@
     testForR8(Backend.CF)
         .addProgramFiles(R8_JAR)
         .addKeepRules("-keep class * { @" + PRESENT_ANNOTATION + " *; }")
+        .addDontWarnGoogle()
+        .addDontWarnJavax()
+        .addDontWarn("org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement")
         .compileWithExpectedDiagnostics(
             diagnostics ->
                 diagnostics.assertErrorsMatch(diagnosticException(AssertionError.class)));
@@ -85,6 +88,9 @@
         .addProgramFiles(R8_JAR)
         .addKeepRules(
             "-keep class *", "-keepclassmembers class * { @" + PRESENT_ANNOTATION + " *; }")
+        .addDontWarnGoogle()
+        .addDontWarnJavax()
+        .addDontWarn("org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement")
         .compile();
   }
 
@@ -103,6 +109,9 @@
     testForR8(Backend.CF)
         .addProgramFiles(R8_JAR)
         .addKeepRules("-keepclasseswithmembers class * { @" + PRESENT_ANNOTATION + " *** *(...); }")
+        .addDontWarnGoogle()
+        .addDontWarnJavax()
+        .addDontWarn("org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement")
         .compile()
         .inspect(
             inspector -> {
@@ -192,6 +201,8 @@
             // TODO(b/132318609): Remove keep annotation once fixed.
             .addKeepClassRules(PRESENT_ANNOTATION)
             .addKeepRules("-keepclassmembers class * { @" + PRESENT_ANNOTATION + " *** *(...); }")
+            .addDontWarnGoogle()
+            .addDontWarnJavax()
             .compile()
             .graphInspector();
 
@@ -208,6 +219,8 @@
                     + "-keepclassmembers class <1> { @"
                     + PRESENT_ANNOTATION
                     + " *** *(...); }")
+            .addDontWarnGoogle()
+            .addDontWarnJavax()
             .compile()
             .graphInspector();
     assertRetainedClassesEqual(referenceInspector, ifThenKeepClassMembersInspector, false, false);
@@ -225,6 +238,8 @@
                     + "-keepclasseswithmembers class <1> { @"
                     + PRESENT_ANNOTATION
                     + " *** *(...); }")
+            .addDontWarnGoogle()
+            .addDontWarnJavax()
             .compile()
             .graphInspector();
     assertRetainedClassesEqual(
@@ -245,6 +260,8 @@
                     + "-keep class <1> { @"
                     + PRESENT_ANNOTATION
                     + " *** <2>(...); }")
+            .addDontWarnGoogle()
+            .addDontWarnJavax()
             .compile()
             .graphInspector();
     // TODO(b/159418523): Should the reference be equal to the result with the conditional rule?
diff --git a/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java b/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
index 7d68070..331eb12 100644
--- a/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
@@ -87,14 +87,12 @@
     }
   }
 
-  @FunctionalInterface
   @NoVerticalClassMerging
   interface I {
 
     Iterator<Object> iterator();
   }
 
-  @FunctionalInterface
   @NoVerticalClassMerging
   interface J extends Iterable<Object> {
 
diff --git a/src/test/java/com/android/tools/r8/shaking/MissingInterfaceTest.java b/src/test/java/com/android/tools/r8/shaking/MissingInterfaceTest.java
index 7254ee6..617676f 100644
--- a/src/test/java/com/android/tools/r8/shaking/MissingInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/MissingInterfaceTest.java
@@ -35,11 +35,10 @@
   public void test_missingInterface() throws Exception {
     testForR8(parameters.getBackend())
         .addProgramClasses(TestClassForB112849320.class)
+        .addDontWarn(GoingToBeMissed.class)
         .setMinApi(parameters.getApiLevel())
         .addKeepMainRule(TestClassForB112849320.class)
         .addOptionsModification(options -> options.enableInlining = false)
-        .allowDiagnosticWarningMessages(
-            parameters.isCfRuntime() || !parameters.canUseDefaultAndStaticInterfaceMethods())
         .compile()
         .addRunClasspathFiles(
             buildOnDexRuntime(
diff --git a/src/test/java/com/android/tools/r8/shaking/PreserveDesugaredLambdaTest.java b/src/test/java/com/android/tools/r8/shaking/PreserveDesugaredLambdaTest.java
index c2f8041..74b7c8a 100644
--- a/src/test/java/com/android/tools/r8/shaking/PreserveDesugaredLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/PreserveDesugaredLambdaTest.java
@@ -13,7 +13,6 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.utils.AndroidApiLevel;
 import java.io.IOException;
 import java.util.concurrent.ExecutionException;
 import org.junit.Test;
@@ -68,8 +67,7 @@
         .addClasspathClasses(Interface.class)
         .addLibraryFiles(TestBase.runtimeJar(parameters.getBackend()))
         .addKeepAllClassesRule()
-        .allowDiagnosticWarningMessages(
-            parameters.isDexRuntime() && parameters.getApiLevel().isLessThan(AndroidApiLevel.N))
+        .addDontWarn(A.class)
         .setMinApi(parameters.getApiLevel())
         .compile()
         .addRunClasspathFiles(libraryCompileResult.writeToZip())
diff --git a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
index 3a58245..2f1a112 100644
--- a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
@@ -152,6 +152,24 @@
       BiConsumer<CodeInspector, CodeInspector> dexComparator,
       List<String> keepRulesFiles,
       Consumer<InternalOptions> optionsConsumer,
+      ThrowableConsumer<R8FullTestBuilder> testBuilderConsumer)
+      throws Exception {
+    runTest(
+        inspection,
+        outputComparator,
+        dexComparator,
+        keepRulesFiles,
+        optionsConsumer,
+        testBuilderConsumer,
+        null);
+  }
+
+  protected void runTest(
+      ThrowingConsumer<CodeInspector, Exception> inspection,
+      BiConsumer<String, String> outputComparator,
+      BiConsumer<CodeInspector, CodeInspector> dexComparator,
+      List<String> keepRulesFiles,
+      Consumer<InternalOptions> optionsConsumer,
       ThrowableConsumer<R8FullTestBuilder> testBuilderConsumer,
       DiagnosticsConsumer diagnosticsConsumer)
       throws Exception {
diff --git a/src/test/java/com/android/tools/r8/shaking/annotations/AnnotationShakingBehaviorTest.java b/src/test/java/com/android/tools/r8/shaking/annotations/AnnotationShakingBehaviorTest.java
index 484fb10..9c98c6e 100644
--- a/src/test/java/com/android/tools/r8/shaking/annotations/AnnotationShakingBehaviorTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/annotations/AnnotationShakingBehaviorTest.java
@@ -91,6 +91,8 @@
         .addKeepMainRule(MainWithNewB.class)
         .addKeepClassAndMembersRules(Factory.class)
         .addKeepAttributes("*Annotation*")
+        .enableInliningAnnotations()
+        .enableNeverClassInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), MainWithNewB.class)
         .assertSuccessWithOutputLines("Hello World!")
diff --git a/src/test/java/com/android/tools/r8/shaking/annotations/ProgramAnnotationRemovalTest.java b/src/test/java/com/android/tools/r8/shaking/annotations/ProgramAnnotationRemovalTest.java
index 3396686..13fbb3e 100644
--- a/src/test/java/com/android/tools/r8/shaking/annotations/ProgramAnnotationRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/annotations/ProgramAnnotationRemovalTest.java
@@ -49,6 +49,7 @@
             .addInnerClasses(ProgramAnnotationRemovalTest.class)
             .addKeepMainRule(TestClass.class)
             .addKeepAttributes("RuntimeVisibleAnnotations")
+            .enableInliningAnnotations()
             .setMinApi(parameters.getApiLevel())
             .compile()
             .run(parameters.getRuntime(), TestClass.class);
diff --git a/src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java b/src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
index 9c358e8..bc55c55 100644
--- a/src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
@@ -106,6 +106,7 @@
             .addKeepMainRule(MAIN_CLASS_NAME)
             .addKeepRules(KEEP_ANNOTATIONS)
             .addKeepRules("-keep @interface " + ANNOTATION_NAME + " {", "  *;", "}")
+            .addDontWarnJetBrainsAnnotations()
             .allowDiagnosticWarningMessages()
             .minification(minify)
             .setMinApi(parameters.getApiLevel())
@@ -145,6 +146,7 @@
                 "-keep,allowobfuscation @interface " + ANNOTATION_NAME + " {",
                 "  java.lang.String *f2();",
                 "}")
+            .addDontWarnJetBrainsAnnotations()
             .allowDiagnosticWarningMessages()
             .minification(minify)
             .setMinApi(parameters.getApiLevel())
@@ -181,6 +183,7 @@
             .addProgramFiles(getJavaJarFile(FOLDER))
             .addKeepMainRule(MAIN_CLASS_NAME)
             .addKeepRules(KEEP_ANNOTATIONS)
+            .addDontWarnJetBrainsAnnotations()
             .allowDiagnosticWarningMessages()
             .minification(minify)
             .setMinApi(parameters.getApiLevel())
@@ -216,6 +219,7 @@
             .addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
             .addProgramFiles(getJavaJarFile(FOLDER))
             .addKeepMainRule(MAIN_CLASS_NAME)
+            .addDontWarnJetBrainsAnnotations()
             .allowDiagnosticWarningMessages()
             .minification(minify)
             .setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/shaking/annotations/b137392797/B137392797.java b/src/test/java/com/android/tools/r8/shaking/annotations/b137392797/B137392797.java
index 3b9c067..1112ccd 100644
--- a/src/test/java/com/android/tools/r8/shaking/annotations/b137392797/B137392797.java
+++ b/src/test/java/com/android/tools/r8/shaking/annotations/b137392797/B137392797.java
@@ -5,13 +5,11 @@
 package com.android.tools.r8.shaking.annotations.b137392797;
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -64,16 +62,14 @@
             classWireFieldLabel(),
             classTest(defaultEnumValueInAnnotation))
         .addProgramClasses(TestClass.class)
+        .addDontWarnKotlin()
+        .addDontWarnJetBrainsAnnotations()
         .addKeepClassAndMembersRules(
             "com.squareup.wire.WireField", "com.squareup.demo.myapplication.Test")
         .addKeepMainRule(TestClass.class)
         .addKeepAttributes("*Annotation*")
-        .allowDiagnosticWarningMessages(
-            parameters.isDexRuntime() && parameters.getApiLevel().isLessThan(AndroidApiLevel.N))
         .setMinApi(parameters.getApiLevel())
         .compile()
-        .assertAllWarningMessagesMatch(
-            containsString("required for default or static interface methods desugaring"))
         .inspect(this::checkEnumUses)
         .run(parameters.getRuntime(), TestClass.class, "com.squareup.demo.myapplication.Test")
         .assertSuccessWithOutputLines(
diff --git a/src/test/java/com/android/tools/r8/shaking/assumevalues/SynthesizedRulesFromApiLevelTest.java b/src/test/java/com/android/tools/r8/shaking/assumevalues/SynthesizedRulesFromApiLevelTest.java
index 0d9fa5e..b2f0964 100644
--- a/src/test/java/com/android/tools/r8/shaking/assumevalues/SynthesizedRulesFromApiLevelTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/assumevalues/SynthesizedRulesFromApiLevelTest.java
@@ -53,12 +53,12 @@
   }
 
   // Simple mock implementation of class android.os.Build$VERSION with just the SDK_INT field.
-  private Path mockAndroidRuntimeLibrary(int sdkInt) throws Exception {
+  private Path mockAndroidRuntimeLibrary(AndroidApiLevel apiLevel) throws Exception {
     JasminBuilder builder = new JasminBuilder();
     ClassBuilder classBuilder;
 
     classBuilder = builder.addClass("android.os.Build$VERSION");
-    classBuilder.addStaticFinalField("SDK_INT", "I", Integer.toString(sdkInt));
+    classBuilder.addStaticFinalField("SDK_INT", "I", Integer.toString(apiLevel.getLevel()));
 
     classBuilder = builder.addClass("android.os.Native");
     classBuilder.addStaticMethod("method", ImmutableList.of(), "V",
@@ -71,13 +71,12 @@
     return writeToJar(builder);
   }
 
-  private Path buildMockAndroidRuntimeLibrary(AndroidApiLevel apiLevel) throws Exception {
+  private Path buildMockAndroidRuntimeLibrary(Path mockAndroidRuntimeLibrary) throws Exception {
     // Build the mock library containing android.os.Build.VERSION with D8.
     Path library = temp.newFolder().toPath().resolve("library.jar");
     D8.run(
-        D8Command
-            .builder()
-            .addProgramFiles(mockAndroidRuntimeLibrary(apiLevel.getLevel()))
+        D8Command.builder()
+            .addProgramFiles(mockAndroidRuntimeLibrary)
             .setOutput(library, OutputMode.DexIndexed)
             .build());
     return library;
@@ -164,9 +163,11 @@
       throws Exception {
     assertTrue(runtimeApiLevel.getLevel() >= buildApiLevel.getLevel());
     if (backend == Backend.DEX) {
+      Path androidRuntimeLibraryMock = mockAndroidRuntimeLibrary(runtimeApiLevel);
       testForR8(backend)
           .setMinApi(buildApiLevel)
           .addProgramFiles(buildApp(nativeApiLevel))
+          .addClasspathFiles(androidRuntimeLibraryMock)
           .enableProguardTestOptions()
           .addKeepRules("-neverinline class " + compatLibraryClassName + " { *; }")
           .addKeepMainRule(mainClassName)
@@ -177,20 +178,21 @@
               syntheticProguardRules ->
                   checkSynthesizedRuleExpectation(syntheticProguardRules, synthesizedRule))
           .inspect(inspector)
-          .addRunClasspathFiles(ImmutableList.of(buildMockAndroidRuntimeLibrary(runtimeApiLevel)))
+          .addRunClasspathFiles(buildMockAndroidRuntimeLibrary(androidRuntimeLibraryMock))
           .run(mainClassName)
           .assertSuccessWithOutput(expectedOutput);
     } else {
       assert backend == Backend.CF;
+      Path androidRuntimeLibraryMock = mockAndroidRuntimeLibrary(AndroidApiLevel.D);
       testForR8(backend)
           .addProgramFiles(buildApp(nativeApiLevel))
           .addKeepMainRule(mainClassName)
           .addKeepRules(additionalKeepRules)
+          .addDontWarn("android.os.Build$VERSION", "android.os.Native")
           .apply(configuration)
           .compile()
           .inspectSyntheticProguardRules(this::noSynthesizedRules)
-          .addRunClasspathFiles(
-              ImmutableList.of(mockAndroidRuntimeLibrary(AndroidApiLevel.D.getLevel())))
+          .addRunClasspathFiles(androidRuntimeLibraryMock)
           .run(mainClassName)
           .assertSuccessWithOutput(expectedResultForCompat(AndroidApiLevel.D));
     }
diff --git a/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesDotsTest.java b/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesDotsTest.java
index 1caf4f2..a913463 100644
--- a/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesDotsTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesDotsTest.java
@@ -47,10 +47,10 @@
   @Test
   public void testProguard() throws ExecutionException, CompilationFailedException, IOException {
     testForProguard()
-        .addProgramClassesAndInnerClasses(Main.class)
+        .addInnerClasses(getClass())
         .addKeepAllClassesRule()
         .addKeepAttributes(keepAttributes)
-        .addKeepRules("-dontwarn com.android.tools.r8.shaking.attributes.*")
+        .addDontWarn(KeepAttributesDotsTest.class)
         .run(TestRuntime.getCheckedInJdk9(), Main.class)
         .assertSuccessWithOutputLines("Hello World!")
         .inspect(this::inspect);
@@ -59,7 +59,7 @@
   @Test
   public void testR8() throws IOException, CompilationFailedException, ExecutionException {
     testForR8(Backend.CF)
-        .addProgramClassesAndInnerClasses(Main.class)
+        .addInnerClasses(getClass())
         .addKeepAttributes(keepAttributes)
         .addKeepAllClassesRule()
         .run(TestRuntime.getCheckedInJdk9(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesTest.java b/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesTest.java
index f298046..a314e96 100644
--- a/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesTest.java
@@ -27,11 +27,11 @@
 @RunWith(Parameterized.class)
 public class KeepAttributesTest extends TestBase {
 
-  private static final Class CLASS = TestKeepAttributes.class;
+  private static final Class<?> CLASS = TestKeepAttributes.class;
 
   @Parameters(name = "{0}")
   public static TestParametersCollection parameters() {
-    return getTestParameters().withAllRuntimes().build();
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
   }
 
   private final TestParameters parameters;
@@ -111,7 +111,8 @@
         .addProgramClassesAndInnerClasses(CLASS)
         .addKeepAllClassesRule()
         .addKeepRules(keepRules)
-        .setMinApi(parameters.getRuntime())
+        .enableSideEffectAnnotations()
+        .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), CLASS)
         .inspector()
         .clazz(CLASS)
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/EventEntity.java b/src/test/java/com/android/tools/r8/shaking/b134858535/EventEntity.java
new file mode 100644
index 0000000..0f92507
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/EventEntity.java
@@ -0,0 +1,7 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.shaking.b134858535;
+
+public class EventEntity {}
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$bDump.java b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$bDump.java
index df725af..4836ae1 100644
--- a/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$bDump.java
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$bDump.java
@@ -68,29 +68,33 @@
       {
         AnnotationVisitor annotationVisitor1 = annotationVisitor0.visitArray("d2");
         annotationVisitor1.visit(null, "<anonymous>");
-        annotationVisitor1.visit(null, "Lio/reactivex/Flowable;");
+        annotationVisitor1.visit(null, "Lcom/android/tools/r8/shaking/b134858535/Flowable;");
         annotationVisitor1.visit(null, "Lkotlin/Pair;");
-        annotationVisitor1.visit(null, "Lcom/permutive/android/event/db/model/EventEntity;");
+        annotationVisitor1.visit(null, "Lcom/android/tools/r8/shaking/b134858535/EventEntity;");
         annotationVisitor1.visit(null, "kotlin.jvm.PlatformType");
         annotationVisitor1.visit(
-            null, "Lcom/permutive/android/event/api/model/TrackBatchEventResponse;");
+            null, "Lcom/android/tools/r8/shaking/b134858535/TrackBatchEventResponse;");
         annotationVisitor1.visit(null, "<name for destructuring parameter 0>");
         annotationVisitor1.visit(null, "");
-        annotationVisitor1.visit(null, "Lcom/permutive/android/config/api/model/SdkConfiguration;");
+        annotationVisitor1.visit(
+            null, "Lcom/android/tools/r8/shaking/b134858535/SdkConfiguration;");
         annotationVisitor1.visit(null, "apply");
         annotationVisitor1.visitEnd();
       }
       annotationVisitor0.visitEnd();
     }
     classWriter.visitInnerClass(
-        "com/permutive/android/event/EventPublisher$b", null, null, ACC_FINAL | ACC_STATIC);
+        "com/android/tools/r8/shaking/b134858535/EventPublisher$b",
+        null,
+        null,
+        ACC_FINAL | ACC_STATIC);
 
     {
       fieldVisitor =
           classWriter.visitField(
               ACC_FINAL | ACC_SYNTHETIC,
               "a",
-              "Lcom/permutive/android/event/EventPublisher;",
+              "Lcom/android/tools/r8/shaking/b134858535/EventPublisher;",
               null,
               null);
       fieldVisitor.visitEnd();
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisherTest.java b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisherTest.java
index 8bde97b..6f9c298 100644
--- a/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisherTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisherTest.java
@@ -4,32 +4,62 @@
 
 package com.android.tools.r8.shaking.b134858535;
 
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
 
 import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
 import com.android.tools.r8.TestBase;
-import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ToolHelper;
+import java.util.List;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
+@RunWith(Parameterized.class)
 public class EventPublisherTest extends TestBase {
 
+  private final KotlinCompiler kotlinc;
+  private final TestParameters parameters;
+
+  @Parameters(name = "{1}, {0}")
+  public static List<Object[]> data() {
+    return buildParameters(
+        getKotlinCompilers(),
+        TestBase.getTestParameters().withDexRuntimes().withAllApiLevels().build());
+  }
+
+  public EventPublisherTest(KotlinCompiler kotlinc, TestParameters parameters) {
+    this.kotlinc = kotlinc;
+    this.parameters = parameters;
+  }
+
+  @Test
+  public void testPrivateMethodsInLambdaClass() throws CompilationFailedException {
+    // This test only tests if the dump can be compiled without errors.
+    testForR8(parameters.getBackend())
+        .addProgramClasses(
+            Main.class,
+            Interface.class,
+            EventEntity.class,
+            Flowable.class,
+            SdkConfiguration.class,
+            TrackBatchEventResponse.class)
+        .addProgramClassFileData(EventPublisher$bDump.dump())
+        .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+        .addKeepClassRules(Interface.class)
+        .addKeepMainRule(Main.class)
+        .setMinApi(parameters.getApiLevel())
+        .addHorizontallyMergedLambdaClassesInspector(
+            inspector -> inspector.assertClassNotMerged(EventPublisher$b.class))
+        .compile();
+  }
+
   public static class Main {
 
     public static void main(String[] args) {
       new EventPublisher$b().apply("foo");
     }
   }
-
-  @Test
-  public void testPrivateMethodsInLambdaClass() throws CompilationFailedException {
-    // This test only tests if the dump can be compiled without errors.
-    testForR8(Backend.DEX)
-        .addProgramClasses(Main.class, Interface.class)
-        .addProgramClassFileData(EventPublisher$bDump.dump())
-        .addKeepClassRules(Interface.class)
-        .addKeepMainRule(Main.class)
-        .setMinApi(AndroidApiLevel.L)
-        .addHorizontallyMergedLambdaClassesInspector(
-            inspector -> inspector.assertClassNotMerged(EventPublisher$b.class))
-        .compile();
-  }
 }
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/Flowable.java b/src/test/java/com/android/tools/r8/shaking/b134858535/Flowable.java
new file mode 100644
index 0000000..928744f
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/Flowable.java
@@ -0,0 +1,7 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.shaking.b134858535;
+
+public class Flowable {}
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/SdkConfiguration.java b/src/test/java/com/android/tools/r8/shaking/b134858535/SdkConfiguration.java
new file mode 100644
index 0000000..39f22e3
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/SdkConfiguration.java
@@ -0,0 +1,7 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.shaking.b134858535;
+
+public class SdkConfiguration {}
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/TrackBatchEventResponse.java b/src/test/java/com/android/tools/r8/shaking/b134858535/TrackBatchEventResponse.java
new file mode 100644
index 0000000..ae8dfb6
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/TrackBatchEventResponse.java
@@ -0,0 +1,7 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.shaking.b134858535;
+
+public class TrackBatchEventResponse {}
diff --git a/src/test/java/com/android/tools/r8/shaking/defaultmethods/DefaultMethodsTest.java b/src/test/java/com/android/tools/r8/shaking/defaultmethods/DefaultMethodsTest.java
index 32a861a..0a54cf8 100644
--- a/src/test/java/com/android/tools/r8/shaking/defaultmethods/DefaultMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/defaultmethods/DefaultMethodsTest.java
@@ -44,7 +44,10 @@
       throws Exception {
     testForR8(parameters.getBackend())
         .addProgramClasses(
-            InterfaceWithDefaultMethods.class, ClassImplementingInterface.class, TestClass.class)
+            InterfaceWithDefaultMethods.class,
+            ClassImplementingInterface.class,
+            OtherClassImplementingInterface.class,
+            TestClass.class)
         .setMinApi(parameters.getApiLevel())
         .addKeepMainRule(TestClass.class)
         .addKeepRules(additionalKeepRules)
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java
index b30a14d..15e18bd 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java
@@ -9,6 +9,7 @@
 
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.shaking.TreeShakingTest;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.google.common.collect.ImmutableList;
@@ -25,7 +26,13 @@
 
   @Parameters(name = "mode:{0}-{1} minify:{2}")
   public static List<Object[]> data() {
-    return defaultTreeShakingParameters();
+    return buildParameters(
+        Frontend.values(),
+        getTestParameters()
+            .withAllRuntimes()
+            .withApiLevelsStartingAtIncluding(AndroidApiLevel.K)
+            .build(),
+        MinifyMode.values());
   }
 
   public TreeShaking12Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
index dd1b4bc..4e53505 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
@@ -14,9 +14,11 @@
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.R8CompatTestBuilder;
 import com.android.tools.r8.R8TestCompileResult;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ThrowableConsumer;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
 import com.android.tools.r8.shaking.ProguardKeepAttributes;
@@ -68,12 +70,21 @@
   }
 
   private void test(Class<?> mainClass, Class<?> mentionedClass) throws Exception {
+    test(mainClass, mentionedClass, null);
+  }
+
+  private void test(
+      Class<?> mainClass,
+      Class<?> mentionedClass,
+      ThrowableConsumer<R8CompatTestBuilder> configuration)
+      throws Exception {
     CodeInspector inspector =
         testForR8Compat(parameters.getBackend(), forceProguardCompatibility)
             .noMinification()
             .allowAccessModification()
             .addProgramClasses(mainClass, mentionedClass)
             .addKeepMainRule(mainClass)
+            .apply(configuration)
             .setMinApi(parameters.getApiLevel())
             .compile()
             .inspector();
@@ -86,7 +97,12 @@
 
   @Test
   public void testKeepDefaultInitializer() throws Exception {
-    test(TestMain.class, TestMain.MentionedClass.class);
+    test(
+        TestMain.class,
+        TestMain.MentionedClass.class,
+        testBuilder ->
+            testBuilder.addProgramClasses(
+                TestMain.MentionedClassWithAnnotation.class, TestAnnotation.class));
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithFieldValuePropagationTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithFieldValuePropagationTest.java
index 908297c..cc1a987 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithFieldValuePropagationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithFieldValuePropagationTest.java
@@ -23,7 +23,7 @@
 
   @Parameterized.Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimes().build();
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
   }
 
   public IfWithFieldValuePropagationTest(TestParameters parameters) {
@@ -48,8 +48,9 @@
         .addRunClasspathFiles(
             testForR8(parameters.getBackend())
                 .addProgramClasses(Library.class)
+                .addClasspathClasses(Layout.class)
                 .addKeepAllClassesRule()
-                .setMinApi(parameters.getRuntime())
+                .setMinApi(parameters.getApiLevel())
                 .compile()
                 .writeToZip())
         .run(parameters.getRuntime(), TestClass.class)
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithMethodValuePropagationTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithMethodValuePropagationTest.java
index f795067..e377809 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithMethodValuePropagationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithMethodValuePropagationTest.java
@@ -48,6 +48,7 @@
         .addRunClasspathFiles(
             testForR8(parameters.getBackend())
                 .addProgramClasses(Library.class)
+                .addClasspathClasses(Layout.class)
                 .addKeepAllClassesRule()
                 .setMinApi(parameters.getRuntime())
                 .compile()
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
index 7ea419c..6b01b51 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
@@ -11,6 +11,7 @@
 import static org.junit.Assert.assertNotEquals;
 
 import com.android.tools.r8.NeverClassInline;
+import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -78,6 +79,11 @@
     }
 
     @Override
+    public void configure(R8FullTestBuilder builder) {
+      builder.enableNeverClassInliningAnnotations();
+    }
+
+    @Override
     public Class<?> getTestClass() {
       return TestClass.class;
     }
diff --git a/src/test/java/com/android/tools/r8/shaking/interfaces/RedundantImplementsClauseTest.java b/src/test/java/com/android/tools/r8/shaking/interfaces/RedundantImplementsClauseTest.java
index 1d559b7..fae800c 100644
--- a/src/test/java/com/android/tools/r8/shaking/interfaces/RedundantImplementsClauseTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/interfaces/RedundantImplementsClauseTest.java
@@ -43,6 +43,7 @@
         .addKeepMainRule(TestClass.class)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
+        .enableNoVerticalClassMergingAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java b/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java
index 888b231..4740853 100644
--- a/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java
@@ -173,6 +173,9 @@
         .addInnerClasses(KeepParameterNamesTest.class)
         .addKeepMainRule(TestClass.class)
         .addKeepRules("-keep class " + Api.class.getTypeName() + "{ api*(...); }")
+        .enableInliningAnnotations()
+        .enableNeverClassInliningAnnotations()
+        .enableUnusedArgumentAnnotations()
         .minification(enableMinification)
         .apply(this::configureKeepParameterNames)
         .compile()
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedClassTestRunner.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedClassTestRunner.java
index 47659e2..3f3c43e 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedClassTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedClassTestRunner.java
@@ -46,7 +46,9 @@
             .enableGraphInspector()
             .enableInliningAnnotations()
             .addProgramClasses(CLASS)
+            .addKeepAnnotation()
             .addKeepRules("-keep @com.android.tools.r8.Keep class * { public *; }")
+            .addInliningAnnotations()
             .run(CLASS)
             .assertSuccessWithOutput(EXPECTED)
             .graphInspector();
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedMethodTestRunner.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedMethodTestRunner.java
index 2f3fea1..a5fb706 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedMethodTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedMethodTestRunner.java
@@ -62,6 +62,7 @@
             .enableGraphInspector()
             .enableInliningAnnotations()
             .addProgramClasses(CLASSES)
+            .addKeepAnnotation()
             .addKeepMainRule(CLASS)
             .addKeepRules(keepAnnotatedMethodsRule, keepClassesOfAnnotatedMethodsRule)
             .run(CLASS)
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByFieldReflectionTestRunner.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByFieldReflectionTestRunner.java
index a43e42c..02d8481 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByFieldReflectionTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByFieldReflectionTestRunner.java
@@ -30,16 +30,17 @@
 
   private static final Class<?> CLASS = KeptByFieldReflectionTest.class;
   private static final Collection<Class<?>> CLASSES = Arrays.asList(CLASS);
+  private static final String TYPE_NAME = CLASS.getTypeName();
 
   private final String EXPECTED_STDOUT = StringUtils.lines("got foo: 42");
 
   private final String EXPECTED_WHYAREYOUKEEPING =
       StringUtils.lines(
-          "int com.android.tools.r8.shaking.keptgraph.KeptByFieldReflectionTest.foo",
+          "int " + TYPE_NAME + ".foo",
           "|- is reflected from:",
-          "|  void com.android.tools.r8.shaking.keptgraph.KeptByFieldReflectionTest.main(java.lang.String[])",
+          "|  void " + TYPE_NAME + ".main(java.lang.String[])",
           "|- is referenced in keep rule:",
-          "|  -keep class com.android.tools.r8.shaking.keptgraph.KeptByFieldReflectionTest { public static void main(java.lang.String[]); }");
+          "|  -keep class " + TYPE_NAME + " { public static void main(java.lang.String[]); }");
 
   private final Backend backend;
 
@@ -67,6 +68,7 @@
         testForR8(backend)
             .enableGraphInspector(consumer)
             .addProgramClasses(CLASSES)
+            .addKeepAnnotation()
             .addKeepMainRule(CLASS)
             .run(CLASS)
             .assertSuccessWithOutput(EXPECTED_STDOUT)
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByMethodReflectionTestRunner.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByMethodReflectionTestRunner.java
index c8afcdc..be0fcff 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByMethodReflectionTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByMethodReflectionTestRunner.java
@@ -28,16 +28,17 @@
 
   private static final Class<?> CLASS = KeptByMethodReflectionTest.class;
   private static final Collection<Class<?>> CLASSES = Arrays.asList(CLASS);
+  private static final String TYPE_NAME = CLASS.getTypeName();
 
   private final String EXPECTED_STDOUT = StringUtils.lines("called foo");
 
   private final String EXPECTED_WHYAREYOUKEEPING =
       StringUtils.lines(
-          "void com.android.tools.r8.shaking.keptgraph.KeptByMethodReflectionTest.foo()",
+          "void " + TYPE_NAME + ".foo()",
           "|- is reflected from:",
-          "|  void com.android.tools.r8.shaking.keptgraph.KeptByMethodReflectionTest.main(java.lang.String[])",
+          "|  void " + TYPE_NAME + ".main(java.lang.String[])",
           "|- is referenced in keep rule:",
-          "|  -keep class com.android.tools.r8.shaking.keptgraph.KeptByMethodReflectionTest { public static void main(java.lang.String[]); }");
+          "|  -keep class " + TYPE_NAME + " { public static void main(java.lang.String[]); }");
 
   private final Backend backend;
 
@@ -64,6 +65,7 @@
         testForR8(backend)
             .enableGraphInspector(consumer)
             .addProgramClasses(CLASSES)
+            .addKeepAnnotation()
             .addKeepMainRule(CLASS)
             .run(CLASS)
             .assertSuccessWithOutput(EXPECTED_STDOUT)
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByTwoRulesTestRunner.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByTwoRulesTestRunner.java
index 5623924..042679f 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByTwoRulesTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByTwoRulesTestRunner.java
@@ -54,6 +54,7 @@
         testForR8(backend)
             .enableGraphInspector()
             .addProgramClasses(CLASSES)
+            .addKeepAnnotation()
             .addKeepRules(keepPublicRule, keepFooRule)
             .run(CLASS)
             .assertSuccessWithOutput(EXPECTED)
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptViaClassInitializerTestRunner.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptViaClassInitializerTestRunner.java
index 436c030..230c0cf 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptViaClassInitializerTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptViaClassInitializerTestRunner.java
@@ -112,6 +112,7 @@
             .addProgramClassesAndInnerClasses(Main.class, A.class, T.class)
             .addKeepMethodRules(mainMethod)
             .enableMemberValuePropagationAnnotations()
+            .enableNeverClassInliningAnnotations()
             .setMinApi(AndroidApiLevel.N)
             .apply(
                 b -> {
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java
index 94bdbf1..4dbb21e 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java
@@ -47,6 +47,8 @@
         .addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_JAR)
         .addKeepRuleFiles(MAIN_KEEP)
         .addKeepRules(WHY_ARE_YOU_KEEPING_ALL)
+        .addDontWarnGoogle()
+        .addDontWarnJavax()
         .collectStdout()
         .compile()
         .assertStdoutThatMatches(containsString("referenced in keep rule"))
diff --git a/src/test/java/com/android/tools/r8/shaking/proxy/MockitoTest.java b/src/test/java/com/android/tools/r8/shaking/proxy/MockitoTest.java
index cea851e..6f868fc 100644
--- a/src/test/java/com/android/tools/r8/shaking/proxy/MockitoTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/proxy/MockitoTest.java
@@ -5,14 +5,12 @@
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
-import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -53,13 +51,10 @@
         testForR8(parameters.getBackend())
             .addProgramFiles(MOCKITO_INTERFACE_JAR)
             .addKeepRuleFiles(flagToKeepTestRunner)
-            .allowDiagnosticWarningMessages(
-                parameters.isDexRuntime() && parameters.getApiLevel().isLessThan(AndroidApiLevel.N))
+            .addDontWarn("org.junit.**", "org.mockito.**")
             .minification(minify)
             .setMinApi(parameters.getApiLevel())
             .compile()
-            .assertAllWarningMessagesMatch(
-                containsString("required for default or static interface methods desugaring"))
             .inspector();
     ClassSubject itf = inspector.clazz(M_I);
     assertThat(itf, isPresent());
@@ -75,13 +70,10 @@
         testForR8(parameters.getBackend())
             .addProgramFiles(MOCKITO_INTERFACE_JAR)
             .addKeepRuleFiles(flagToKeepInterfaceConditionally)
-            .allowDiagnosticWarningMessages(
-                parameters.isDexRuntime() && parameters.getApiLevel().isLessThan(AndroidApiLevel.N))
+            .addDontWarn("org.junit.**", "org.mockito.**")
             .minification(minify)
             .setMinApi(parameters.getApiLevel())
             .compile()
-            .assertAllWarningMessagesMatch(
-                containsString("required for default or static interface methods desugaring"))
             .inspector();
     ClassSubject itf = inspector.clazz(M_I);
     assertThat(itf, isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/testrules/C.java b/src/test/java/com/android/tools/r8/shaking/testrules/C.java
index f402864..497c218 100644
--- a/src/test/java/com/android/tools/r8/shaking/testrules/C.java
+++ b/src/test/java/com/android/tools/r8/shaking/testrules/C.java
@@ -4,14 +4,12 @@
 
 package com.android.tools.r8.shaking.testrules;
 
-import com.android.tools.r8.AssumeMayHaveSideEffects;
 import com.android.tools.r8.NeverInline;
 
 public class C {
 
   private static int i;
 
-  @AssumeMayHaveSideEffects
   @NeverInline
   public static int x() {
     return i;
diff --git a/src/test/java/com/android/tools/r8/shaking/testrules/ForceInlineTest.java b/src/test/java/com/android/tools/r8/shaking/testrules/ForceInlineTest.java
index d4e5972..b669c95 100644
--- a/src/test/java/com/android/tools/r8/shaking/testrules/ForceInlineTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/testrules/ForceInlineTest.java
@@ -42,6 +42,7 @@
     return testForR8(parameters.getBackend())
         .addProgramClasses(Main.class, A.class, B.class, C.class)
         .addKeepRules(proguardConfiguration)
+        .enableInliningAnnotations()
         .enableNoHorizontalClassMergingAnnotations()
         .enableNoStaticClassMergingAnnotations()
         .enableProguardTestOptions()
diff --git a/src/test/java/com/android/tools/r8/shaking/whyareyoukeeping/WhyAreYouKeepingTest.java b/src/test/java/com/android/tools/r8/shaking/whyareyoukeeping/WhyAreYouKeepingTest.java
index eeb280b..477e1f3 100644
--- a/src/test/java/com/android/tools/r8/shaking/whyareyoukeeping/WhyAreYouKeepingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/whyareyoukeeping/WhyAreYouKeepingTest.java
@@ -79,6 +79,7 @@
         .addKeepRules("-whyareyoukeeping class " + A.class.getTypeName())
         // Redirect the compilers stdout to intercept the '-whyareyoukeeping' output
         .collectStdout()
+        .addInliningAnnotations()
         .compile()
         .assertStdoutThatMatches(equalTo(expected));
   }
@@ -90,6 +91,7 @@
         .addProgramClasses(A.class)
         .addKeepMethodRules(Reference.methodFromMethod(A.class.getMethod("foo")))
         .setKeptGraphConsumer(graphConsumer)
+        .addInliningAnnotations()
         .compile();
 
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -139,13 +141,13 @@
         .allowUnusedProguardConfigurationRules()
         // Redirect the compilers stdout to intercept the '-whyareyoukeeping' output
         .collectStdout()
+        .addInliningAnnotations()
         .compile()
         .assertNoStdout();
   }
 
   @Test
   public void testNonExistentMethodWhyAreYouKeepingViaProguardConfig() throws Exception {
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
     String aName = A.class.getTypeName();
     testForR8(backend)
         .addProgramClasses(A.class)
@@ -153,6 +155,7 @@
         .addKeepRules("-whyareyoukeeping class " + aName + " { nonExistentMethod(); }")
         // Redirect the compilers stdout to intercept the '-whyareyoukeeping' output
         .collectStdout()
+        .addInliningAnnotations()
         .compile()
         .assertStdoutThatMatches(not(equalTo("")));
   }
diff --git a/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java b/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
index fb0785e..e5a8027 100644
--- a/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
+++ b/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
@@ -31,9 +31,8 @@
 
 public class ConstantFoldingTest extends SmaliTestBase {
 
-  @FunctionalInterface
   public interface TriConsumer<T, U, V> {
-    public void accept(T t, U u, V v);
+    void accept(T t, U u, V v);
   }
 
   private class SmaliBuilderWithCheckers {