Add an option to not fail when library extends program

Bug: b/215530220
Change-Id: I009f9602f0fbb860e10b7087ed80d07441717ce0
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 9fa5c88..4d7a6c1 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -2828,7 +2828,8 @@
                   + (clazz.isInterface() ? " implements " : " extends ")
                   + "program class "
                   + type.toSourceString());
-      if (forceProguardCompatibility) {
+      if (forceProguardCompatibility
+          || options.getTestingOptions().allowLibraryExtendsProgramInFullMode) {
         options.reporter.warning(message);
       } else {
         options.reporter.error(message);
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 67485aa..701fd7f 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -2338,11 +2338,13 @@
 
     public boolean allowClassInliningOfSynthetics = true;
     public boolean allowCodeReplacement =
-        SystemPropertyUtils.parseSystemPropertyOrDefault(
-            "com.android.tools.r8.allowCodeReplacement", true);
+        parseSystemPropertyOrDefault("com.android.tools.r8.allowCodeReplacement", true);
     public boolean allowInjectedAnnotationMethods = false;
     public boolean allowInliningOfOutlines = true;
     public boolean allowInliningOfSynthetics = true;
+    public boolean allowLibraryExtendsProgramInFullMode =
+        parseSystemPropertyOrDefault(
+            "com.android.tools.r8.allowLibraryExtendsProgramInFullMode", false);
     public boolean allowNullDynamicTypeInCodeScanner = true;
     public boolean allowTypeErrors =
         !Version.isDevelopmentVersion()