Enable Nest desugaring in L8 in 2.2

Bug: 182463100
Change-Id: I413622f68e6ac2ac63d6708523147ffe1d8f626c
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index b695024..45b0e16 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -234,6 +234,8 @@
           options.cfToCfDesugar || options.testing.forceLibBackportsInL8CfToCf
               ? new BackportedMethodRewriter(appView)
               : null;
+      this.d8NestBasedAccessDesugaring =
+          options.shouldDesugarNests() ? new D8NestBasedAccessDesugaring(appView) : null;
       this.twrCloseResourceRewriter = null;
       this.lambdaMerger = null;
       this.covariantReturnTypeAnnotationTransformer = null;
@@ -249,7 +251,6 @@
       this.identifierNameStringMarker = null;
       this.devirtualizer = null;
       this.typeChecker = null;
-      this.d8NestBasedAccessDesugaring = null;
       this.stringSwitchRemover = null;
       this.serviceLoaderRewriter = null;
       this.methodOptimizationInfoCollector = null;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java
index 89dc96c..6779740 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java
@@ -128,6 +128,9 @@
   }
 
   private void processNest(DexClass host, List<DexType> nest) {
+    if (hasLibraryMember(host, nest)) {
+      return;
+    }
     boolean reported = false;
     for (DexType type : nest) {
       DexClass clazz = definitionFor(type);
@@ -147,8 +150,6 @@
               ClasspathMethod method = new ClasspathMethod(clazz.asClasspathClass(), definition);
               method.registerCodeReferencesForDesugaring(
                   new NestBasedAccessDesugaringUseRegistry(method));
-            } else {
-              assert false;
             }
           }
         }
@@ -156,6 +157,16 @@
     }
   }
 
+  private boolean hasLibraryMember(DexClass host, List<DexType> nest) {
+    for (DexType memberType : nest) {
+      DexClass memberClass = appView.definitionFor(memberType);
+      if (memberClass != null && memberClass.isLibraryClass()) {
+        return true;
+      }
+    }
+    return host.isLibraryClass();
+  }
+
   private void reportDesugarDependencies(DexClass host, DexClass clazz) {
     if (host == clazz) {
       return;
@@ -171,8 +182,11 @@
   protected abstract boolean shouldProcessClassInNest(DexClass clazz, List<DexType> nest);
 
   private DexProgramClass createNestAccessConstructor() {
+    String prefix = appView.options().isDesugaredLibraryCompilation() ? "j$/" : "";
     return new DexProgramClass(
-        appView.dexItemFactory().nestConstructorType,
+        appView
+            .dexItemFactory()
+            .createType("L" + prefix + NestBasedAccessDesugaring.NEST_CONSTRUCTOR_NAME + ";"),
         null,
         new SynthesizedOrigin("Nest based access desugaring", getClass()),
         // Make the synthesized class public since shared in the whole program.