diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignatureCorrectnessHelper.java b/src/main/java/com/android/tools/r8/graph/GenericSignatureCorrectnessHelper.java
index a7979f6..3401560 100644
--- a/src/main/java/com/android/tools/r8/graph/GenericSignatureCorrectnessHelper.java
+++ b/src/main/java/com/android/tools/r8/graph/GenericSignatureCorrectnessHelper.java
@@ -110,6 +110,7 @@
     return result;
   }
 
+  @SuppressWarnings("unchecked")
   private <T extends DexDefinitionSignature<?>> SignatureEvaluationResult evaluate(
       Supplier<T> getter, Function<T, SignatureEvaluationResult> evaluate, Consumer<T> setter) {
     T signature = getter.get();
diff --git a/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java b/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java
index 3de0abd..9d085af 100644
--- a/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java
+++ b/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java
@@ -13,126 +13,131 @@
 import java.util.List;
 import org.hamcrest.Matcher;
 
-public interface TestDiagnosticMessages {
+public abstract class TestDiagnosticMessages {
 
-  List<Diagnostic> getInfos();
+  public abstract List<Diagnostic> getInfos();
 
-  List<Diagnostic> getWarnings();
+  public abstract List<Diagnostic> getWarnings();
 
-  default <D extends Diagnostic> D getWarning(int index) {
+  @SuppressWarnings("unchecked")
+  public final <D extends Diagnostic> D getWarning(int index) {
     return (D) getWarnings().get(index);
   }
 
-  List<Diagnostic> getErrors();
+  public abstract List<Diagnostic> getErrors();
 
-  default <D extends Diagnostic> D getError(int index) {
+  @SuppressWarnings("unchecked")
+  public final <D extends Diagnostic> D getError(int index) {
     return (D) getErrors().get(index);
   }
 
-  TestDiagnosticMessages assertNoMessages();
+  public abstract TestDiagnosticMessages assertNoMessages();
 
-  TestDiagnosticMessages assertHasWarnings();
+  public abstract TestDiagnosticMessages assertHasWarnings();
 
-  TestDiagnosticMessages assertOnlyInfos();
+  public abstract TestDiagnosticMessages assertOnlyInfos();
 
-  TestDiagnosticMessages assertOnlyWarnings();
+  public abstract TestDiagnosticMessages assertOnlyWarnings();
 
-  TestDiagnosticMessages assertOnlyErrors();
+  public abstract TestDiagnosticMessages assertOnlyErrors();
 
-  TestDiagnosticMessages assertInfosCount(int count);
+  public abstract TestDiagnosticMessages assertInfosCount(int count);
 
-  TestDiagnosticMessages assertWarningsCount(int count);
+  public abstract TestDiagnosticMessages assertWarningsCount(int count);
 
-  TestDiagnosticMessages assertErrorsCount(int count);
+  public abstract TestDiagnosticMessages assertErrorsCount(int count);
 
-  default TestDiagnosticMessages assertNoInfos() {
+  public final TestDiagnosticMessages assertNoInfos() {
     return assertInfosCount(0);
   }
 
-  default TestDiagnosticMessages assertNoWarnings() {
+  public final TestDiagnosticMessages assertNoWarnings() {
     return assertWarningsCount(0);
   }
 
-  default TestDiagnosticMessages assertNoErrors() {
+  public final TestDiagnosticMessages assertNoErrors() {
     return assertErrorsCount(0);
   }
 
   // Match exact.
 
-  default TestDiagnosticMessages assertDiagnosticsMatch(Matcher<Diagnostic> matcher) {
+  public final TestDiagnosticMessages assertDiagnosticsMatch(Matcher<Diagnostic> matcher) {
     return assertDiagnosticsMatch(Collections.singletonList(matcher));
   }
 
-  TestDiagnosticMessages assertDiagnosticsMatch(Collection<Matcher<Diagnostic>> matchers);
+  public abstract TestDiagnosticMessages assertDiagnosticsMatch(
+      Collection<Matcher<Diagnostic>> matchers);
 
-  default TestDiagnosticMessages assertInfosMatch(Matcher<Diagnostic> matcher) {
+  public final TestDiagnosticMessages assertInfosMatch(Matcher<Diagnostic> matcher) {
     return assertInfosMatch(Collections.singletonList(matcher));
   }
 
-  TestDiagnosticMessages assertInfosMatch(Collection<Matcher<Diagnostic>> matchers);
+  public abstract TestDiagnosticMessages assertInfosMatch(Collection<Matcher<Diagnostic>> matchers);
 
-  default TestDiagnosticMessages assertWarningsMatch(Matcher<Diagnostic> matcher) {
+  public final TestDiagnosticMessages assertWarningsMatch(Matcher<Diagnostic> matcher) {
     return assertWarningsMatch(Collections.singletonList(matcher));
   }
 
-  @SuppressWarnings("unchecked")
-  default TestDiagnosticMessages assertWarningsMatch(Matcher<Diagnostic>... matchers) {
+  @SafeVarargs
+  public final TestDiagnosticMessages assertWarningsMatch(Matcher<Diagnostic>... matchers) {
     return assertWarningsMatch(Arrays.asList(matchers));
   }
 
-  TestDiagnosticMessages assertWarningsMatch(Collection<Matcher<Diagnostic>> matchers);
+  public abstract TestDiagnosticMessages assertWarningsMatch(
+      Collection<Matcher<Diagnostic>> matchers);
 
-  default TestDiagnosticMessages assertErrorsMatch(Matcher<Diagnostic> matcher) {
+  public final TestDiagnosticMessages assertErrorsMatch(Matcher<Diagnostic> matcher) {
     return assertErrorsMatch(Collections.singletonList(matcher));
   }
 
-  TestDiagnosticMessages assertErrorsMatch(Collection<Matcher<Diagnostic>> matchers);
+  public abstract TestDiagnosticMessages assertErrorsMatch(
+      Collection<Matcher<Diagnostic>> matchers);
 
   // Match one.
 
-  TestDiagnosticMessages assertDiagnosticThatMatches(Matcher<Diagnostic> matcher);
+  public abstract TestDiagnosticMessages assertDiagnosticThatMatches(Matcher<Diagnostic> matcher);
 
-  TestDiagnosticMessages assertInfoThatMatches(Matcher<Diagnostic> matcher);
+  public abstract TestDiagnosticMessages assertInfoThatMatches(Matcher<Diagnostic> matcher);
 
-  TestDiagnosticMessages assertWarningThatMatches(Matcher<Diagnostic> matcher);
+  public abstract TestDiagnosticMessages assertWarningThatMatches(Matcher<Diagnostic> matcher);
 
-  TestDiagnosticMessages assertErrorThatMatches(Matcher<Diagnostic> matcher);
+  public abstract TestDiagnosticMessages assertErrorThatMatches(Matcher<Diagnostic> matcher);
 
   // Consider removing this helper.
-  default TestDiagnosticMessages assertWarningMessageThatMatches(Matcher<String> matcher) {
+  public final TestDiagnosticMessages assertWarningMessageThatMatches(Matcher<String> matcher) {
     return assertWarningThatMatches(diagnosticMessage(matcher));
   }
 
   // Consider removing this helper.
-  default TestDiagnosticMessages assertErrorMessageThatMatches(Matcher<String> matcher) {
+  public final TestDiagnosticMessages assertErrorMessageThatMatches(Matcher<String> matcher) {
     return assertErrorThatMatches(diagnosticMessage(matcher));
   }
 
   // Match all.
 
-  TestDiagnosticMessages assertAllDiagnosticsMatch(Matcher<Diagnostic> matcher);
+  public abstract TestDiagnosticMessages assertAllDiagnosticsMatch(Matcher<Diagnostic> matcher);
 
-  TestDiagnosticMessages assertAllInfosMatch(Matcher<Diagnostic> matcher);
+  public abstract TestDiagnosticMessages assertAllInfosMatch(Matcher<Diagnostic> matcher);
 
-  TestDiagnosticMessages assertAllWarningsMatch(Matcher<Diagnostic> matcher);
+  public abstract TestDiagnosticMessages assertAllWarningsMatch(Matcher<Diagnostic> matcher);
 
-  TestDiagnosticMessages assertAllErrorsMatch(Matcher<Diagnostic> matcher);
+  public abstract TestDiagnosticMessages assertAllErrorsMatch(Matcher<Diagnostic> matcher);
 
   // Match none.
 
-  default TestDiagnosticMessages assertNoDiagnosticsMatch(Matcher<Diagnostic> matcher) {
+  public final TestDiagnosticMessages assertNoDiagnosticsMatch(Matcher<Diagnostic> matcher) {
     return assertAllDiagnosticsMatch(not(matcher));
   }
 
-  default TestDiagnosticMessages assertNoInfosMatch(Matcher<Diagnostic> matcher) {
+  public final TestDiagnosticMessages assertNoInfosMatch(Matcher<Diagnostic> matcher) {
     return assertAllInfosMatch(not(matcher));
   }
 
-  default TestDiagnosticMessages assertNoWarningsMatch(Matcher<Diagnostic> matcher) {
+  public final TestDiagnosticMessages assertNoWarningsMatch(Matcher<Diagnostic> matcher) {
     return assertAllWarningsMatch(not(matcher));
   }
 
-  default TestDiagnosticMessages assertNoErrorsMatch(Matcher<Diagnostic> matcher) {
+  public final TestDiagnosticMessages assertNoErrorsMatch(Matcher<Diagnostic> matcher) {
     return assertAllErrorsMatch(not(matcher));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java b/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
index 9dae093..b52db8d 100644
--- a/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
+++ b/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
@@ -20,7 +20,8 @@
 import java.util.function.BiFunction;
 import org.hamcrest.Matcher;
 
-public class TestDiagnosticMessagesImpl implements DiagnosticsHandler, TestDiagnosticMessages {
+public class TestDiagnosticMessagesImpl extends TestDiagnosticMessages
+    implements DiagnosticsHandler {
   private final List<Diagnostic> infos = new ArrayList<>();
   private final List<Diagnostic> warnings = new ArrayList<>();
   private final List<Diagnostic> errors = new ArrayList<>();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/ConcurrentHashMapFileSerializationTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/ConcurrentHashMapFileSerializationTest.java
index b38eac1..db361d4 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/ConcurrentHashMapFileSerializationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/ConcurrentHashMapFileSerializationTest.java
@@ -94,6 +94,7 @@
       chmTest();
     }
 
+    @SuppressWarnings("unchecked")
     private static void chmTest() throws IOException, ClassNotFoundException {
       ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();
       map.put("k1", "v1");
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/MyMapFileSerializationTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/MyMapFileSerializationTest.java
index 623cfd0..42844c1 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/MyMapFileSerializationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/MyMapFileSerializationTest.java
@@ -88,6 +88,8 @@
 
   @SuppressWarnings("MismatchedQueryAndUpdateOfCollection")
   static class Executor {
+
+    @SuppressWarnings("unchecked")
     public static void main(String[] args) throws Exception {
       MyMap<String, String> map = new MyMap<>();
       map.put("k1", "v1");
