Loosen desugaring constraints

And enable all desugaring by by default.

Loosening as defined in the discussion document:
- Skip desugaring of anything if the target method is defined in the
  bootclasspath (i.e. API android.jar).
- Just warn about invokestatic, invokesuper and call to method handle
  when the target class or interface is missing.
- Change handling of hierarchy:
  - If all declared interfaces (and their super interfaces hierarchies)
    of a class are known and the class has an implementation for all
    default methods found in the declared interface of the class (even
    those hidden in subinterfaces), skip default method desugaring for
    the class.
  - In any other case of missing element in the hierachy is reported as
    a warning. missing interfaces are ignored, missing class cause the
    subclasses to be ignored during default method desugaring.

Change-Id: I8d7043616bbfff26ac09a17a3e953a4a4e5aa4c8
diff --git a/src/test/examplesAndroidO/desugaringwithmissingclasstest3/Main.java b/src/test/examplesAndroidO/desugaringwithmissingclasstest3/Main.java
new file mode 100644
index 0000000..bde4d09
--- /dev/null
+++ b/src/test/examplesAndroidO/desugaringwithmissingclasstest3/Main.java
@@ -0,0 +1,32 @@
+// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package desugaringwithmissingclasstest3;
+
+public class Main {
+  public static void main(String[] args) throws Exception {
+    ImplementMethodsWithDefault instance = new ImplementMethodsWithDefault();
+    try {
+      String b = instance.getB();
+      if (b.equals("B")) {
+        System.out.println("OK");
+      } else {
+        System.out.println("NOT OK: " + b);
+      }
+    } catch (Throwable t) {
+      System.out.println("NOT OK " + t.getClass() + " " + t.getMessage());
+      t.printStackTrace();
+    }
+    try {
+      String foo = instance.foo();
+      if (foo.equals("ImplementMethodsWithDefault")) {
+        System.out.println("OK");
+      } else {
+        System.out.println("NOT OK: " + foo);
+      }
+    } catch (Throwable t) {
+      System.out.println("NOT OK " + t.getClass() + " " + t.getMessage());
+      t.printStackTrace();
+    }
+  }
+}