Only add covariant library methods if all referenced types exist

Change-Id: I5e908e5c3807322105b1d4149947127758472e56
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 ec4ef3b..761a52e 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -674,6 +674,17 @@
     return definitionFor(type, context, this::recordNonProgramClass, this::reportMissingClass);
   }
 
+  public DexLibraryClass definitionForLibraryClassOrIgnore(DexType type) {
+    assert type.isClassType();
+    ClassResolutionResult classResolutionResult =
+        appInfo().contextIndependentDefinitionForWithResolutionResult(type);
+    return classResolutionResult.hasClassResolutionResult()
+            && !classResolutionResult.isMultipleClassResolutionResult()
+        ? DexLibraryClass.asLibraryClassOrNull(
+            classResolutionResult.toSingleClassWithProgramOverLibrary())
+        : null;
+  }
+
   public boolean hasAlternativeLibraryDefinition(DexProgramClass programClass) {
     ClassResolutionResult classResolutionResult =
         internalDefinitionFor(
@@ -3602,10 +3613,20 @@
           if (libraryClass == null) {
             return;
           }
+          // Check if the covariant method exists on the class.
           DexEncodedMethod covariantMethod = libraryClass.lookupMethod(method);
           if (covariantMethod != null) {
             return;
           }
+          // Check if all type references exists otherwise bail out since the bridge could not exist
+          // in the android jar anyway.
+          for (DexType referencedType : method.getReferencedTypes()) {
+            DexType baseReferencedType = referencedType.toBaseType(appView.dexItemFactory());
+            if (baseReferencedType.isClassType()
+                && definitionForLibraryClassOrIgnore(referencedType) == null) {
+              return;
+            }
+          }
           libraryClass.addVirtualMethod(
               DexEncodedMethod.builder()
                   .setMethod(method)