Revert "Only create -IA classes for nest host and use that for members as well"

This reverts commit 4a887e66d44e9fadcb27fc616d64610440a4ecf1.

Reason for revert: this is breaking cts test in platform, with the class now being duplicated between different targets that we assert does not contain overlapping classes, see:
https://android-build.corp.google.com/test_investigate/invocation/I17100010309277229/test/TR24629417746288662/?blocking=blocking&status=none

Bug: b/359546659

Change-Id: Ie305379938afa72bf6b1dacb7a766e6eb4af8c7f
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaringEventConsumer.java b/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaringEventConsumer.java
index fcd5428..fb052fb 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaringEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaringEventConsumer.java
@@ -6,7 +6,6 @@
 
 import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
 import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexClassAndMethod;
 import com.android.tools.r8.graph.DexClasspathClass;
 import com.android.tools.r8.graph.DexMethod;
@@ -289,7 +288,7 @@
     public void acceptNestConstructorBridge(
         ProgramMethod target,
         ProgramMethod bridge,
-        DexClass argumentClass,
+        DexProgramClass argumentClass,
         DexClassAndMethod context) {
       // Intentionally empty.
     }
@@ -723,7 +722,7 @@
     public void acceptNestConstructorBridge(
         ProgramMethod target,
         ProgramMethod bridge,
-        DexClass argumentClass,
+        DexProgramClass argumentClass,
         DexClassAndMethod context) {
       // Intentionally empty.
     }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/nest/D8NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/nest/D8NestBasedAccessDesugaring.java
index 93b2f34..a4465a9 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/nest/D8NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/nest/D8NestBasedAccessDesugaring.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.graph.DexClasspathClass;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.conversion.D8MethodProcessor;
@@ -108,7 +109,7 @@
               public void acceptNestConstructorBridge(
                   ProgramMethod target,
                   ProgramMethod bridge,
-                  DexClass argumentClass,
+                  DexProgramClass argumentClass,
                   DexClassAndMethod context) {
                 methodProcessor.scheduleDesugaredMethodForProcessing(bridge);
               }
@@ -228,7 +229,8 @@
     private void ensureConstructorBridgeFromClasspathAccess(
         ProgramMethod method, NestBasedAccessDesugaringEventConsumer eventConsumer) {
       assert method.getDefinition().isInstanceInitializer();
-      DexClass constructorArgumentClass = ensureConstructorArgumentClass(method);
+      DexProgramClass constructorArgumentClass =
+          ensureConstructorArgumentClass(method).asProgramClass();
       DexMethod bridgeReference = getConstructorBridgeReference(method, constructorArgumentClass);
       synchronized (method.getHolder().getMethodCollection()) {
         if (method.getHolder().lookupMethod(bridgeReference) == null) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
index 55221e7..10f3501 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
@@ -232,7 +232,7 @@
                     : AccessBridgeFactory.createMethodAccessorBridge(
                         bridgeAndTarget.getBridge(), targetMethod, dexItemFactory));
     if (targetMethod.getDefinition().isInstanceInitializer()) {
-      DexClass argumentClass = getConstructorArgumentClass(targetMethod);
+      DexProgramClass argumentClass = getConstructorArgumentClass(targetMethod).asProgramClass();
       eventConsumer.acceptNestConstructorBridge(targetMethod, bridgeMethod, argumentClass, context);
     } else {
       eventConsumer.acceptNestMethodBridge(targetMethod, bridgeMethod, context);
@@ -441,35 +441,29 @@
   }
 
   private DexClass getConstructorArgumentClass(DexClassAndMethod constructor) {
-    return syntheticNestConstructorTypes.get(constructor.getHolder().getNestHost());
+    return syntheticNestConstructorTypes.get(constructor.getHolderType());
   }
 
   DexClass ensureConstructorArgumentClass(DexClassAndMethod constructor) {
     assert constructor.getDefinition().isInstanceInitializer();
-    assert constructor.isProgramMethod() || constructor.isClasspathMethod();
-    DexType hostType =
-        constructor.isProgramMethod()
-            ? constructor.asProgramMethod().getHolder().getNestHost()
-            : constructor.asClasspathMethod().getHolder().getNestHost();
-    DexClass host = appView.definitionFor(hostType);
     return syntheticNestConstructorTypes.computeIfAbsent(
-        hostType,
+        constructor.getHolderType(),
         holder -> {
-          if (host.isProgramClass()) {
+          if (constructor.isProgramMethod()) {
             return appView
                 .getSyntheticItems()
                 .createFixedClass(
                     kinds -> kinds.INIT_TYPE_ARGUMENT,
-                    host.asProgramClass(),
+                    constructor.asProgramMethod().getHolder(),
                     appView,
                     builder -> {});
           } else {
-            assert host.isClasspathClass();
+            assert constructor.isClasspathMethod();
             return appView
                 .getSyntheticItems()
                 .ensureFixedClasspathClass(
                     kinds -> kinds.INIT_TYPE_ARGUMENT,
-                    host.asClasspathClass(),
+                    constructor.asClasspathMethod().getHolder(),
                     appView,
                     ignored -> {},
                     ignored -> {});
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaringEventConsumer.java b/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaringEventConsumer.java
index 8ec49e2..afbeedc 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaringEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaringEventConsumer.java
@@ -4,8 +4,8 @@
 
 package com.android.tools.r8.ir.desugar.nest;
 
-import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexClassAndMethod;
+import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.graph.ProgramMethod;
 
@@ -14,7 +14,7 @@
   void acceptNestConstructorBridge(
       ProgramMethod target,
       ProgramMethod bridge,
-      DexClass argumentClass,
+      DexProgramClass argumentClass,
       DexClassAndMethod context);
 
   void acceptNestFieldGetBridge(
@@ -46,7 +46,7 @@
     public void acceptNestConstructorBridge(
         ProgramMethod target,
         ProgramMethod bridge,
-        DexClass argumentClass,
+        DexProgramClass argumentClass,
         DexClassAndMethod context) {
       // Intentionally empty.
     }
diff --git a/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingCfInstructionDesugaringEventConsumer.java b/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingCfInstructionDesugaringEventConsumer.java
index 3af5dc4..b556923 100644
--- a/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingCfInstructionDesugaringEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingCfInstructionDesugaringEventConsumer.java
@@ -7,7 +7,6 @@
 import static com.android.tools.r8.profile.rewriting.ProfileRewritingVarHandleDesugaringEventConsumerUtils.handleVarHandleDesugaringClassContext;
 
 import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexClassAndMethod;
 import com.android.tools.r8.graph.DexClasspathClass;
 import com.android.tools.r8.graph.DexMethod;
@@ -293,7 +292,7 @@
   public void acceptNestConstructorBridge(
       ProgramMethod target,
       ProgramMethod bridge,
-      DexClass argumentClass,
+      DexProgramClass argumentClass,
       DexClassAndMethod context) {
     nestBasedAccessDesugaringEventConsumer.acceptNestConstructorBridge(
         target, bridge, argumentClass, context);
diff --git a/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingNestBasedAccessDesugaringEventConsumer.java b/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingNestBasedAccessDesugaringEventConsumer.java
index c44706f..7d731fb 100644
--- a/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingNestBasedAccessDesugaringEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingNestBasedAccessDesugaringEventConsumer.java
@@ -4,8 +4,8 @@
 
 package com.android.tools.r8.profile.rewriting;
 
-import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexClassAndMethod;
+import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.ProgramField;
 import com.android.tools.r8.graph.ProgramMethod;
 import com.android.tools.r8.ir.desugar.nest.NestBasedAccessDesugaringEventConsumer;
@@ -38,13 +38,12 @@
   public void acceptNestConstructorBridge(
       ProgramMethod target,
       ProgramMethod bridge,
-      DexClass argumentClass,
+      DexProgramClass argumentClass,
       DexClassAndMethod context) {
     if (context.isProgramMethod()) {
       additionsCollection.applyIfContextIsInProfile(
           context.asProgramMethod(),
-          additionsBuilder ->
-              additionsBuilder.addRule(argumentClass.getReference()).addRule(bridge));
+          additionsBuilder -> additionsBuilder.addRule(argumentClass).addRule(bridge));
     } else {
       additionsCollection.accept(
           additions ->
diff --git a/src/test/examplesJava11/nesthostexample/NestInitArgumentContextTest.java b/src/test/examplesJava11/nesthostexample/NestInitArgumentContextTest.java
index 5e18f9c..0dec846 100644
--- a/src/test/examplesJava11/nesthostexample/NestInitArgumentContextTest.java
+++ b/src/test/examplesJava11/nesthostexample/NestInitArgumentContextTest.java
@@ -45,7 +45,7 @@
         .inspect(
             inspector ->
                 assertEquals(
-                    1,
+                    5,
                     inspector.allClasses().stream()
                         .map(ClassSubject::getFinalName)
                         .filter(name -> name.endsWith("-IA"))
@@ -73,7 +73,7 @@
               .inspect(
                   inspector ->
                       assertEquals(
-                          0,
+                          1,
                           inspector.allClasses().stream()
                               .map(ClassSubject::getFinalName)
                               .filter(name -> name.endsWith("-IA"))
@@ -106,7 +106,7 @@
         .inspect(
             inspector ->
                 assertEquals(
-                    1,
+                    5,
                     inspector.allClasses().stream()
                         .map(ClassSubject::getFinalName)
                         .filter(name -> name.endsWith("-IA"))
diff --git a/src/test/examplesJava11/nesthostexample/NestOnProgramOnClassPathTest.java b/src/test/examplesJava11/nesthostexample/NestOnProgramOnClassPathTest.java
index 974683a..d2e3d0c 100644
--- a/src/test/examplesJava11/nesthostexample/NestOnProgramOnClassPathTest.java
+++ b/src/test/examplesJava11/nesthostexample/NestOnProgramOnClassPathTest.java
@@ -64,13 +64,13 @@
     inner.inspect(
         inspector -> {
           assertThisNumberOfBridges(inspector, 3);
-          assertNoNestConstructor(inspector);
+          assertNestConstructor(inspector);
         });
     D8TestCompileResult host = compileClassesWithD8ProgramClasses(nestHost, nestHost);
     host.inspect(
         inspector -> {
           assertThisNumberOfBridges(inspector, 1);
-          assertInitArgumentClass(inspector);
+          assertNestConstructor(inspector);
         });
   }
 
@@ -100,14 +100,10 @@
         .compile();
   }
 
-  private static void assertInitArgumentClass(CodeInspector inspector) {
+  private static void assertNestConstructor(CodeInspector inspector) {
     assertTrue(inspector.allClasses().stream().anyMatch(FoundClassSubject::isSynthetic));
   }
 
-  private static void assertNoNestConstructor(CodeInspector inspector) {
-    assertTrue(inspector.allClasses().stream().noneMatch(FoundClassSubject::isSynthetic));
-  }
-
   private static void assertThisNumberOfBridges(CodeInspector inspector, int numBridges) {
     for (FoundClassSubject clazz : inspector.allClasses()) {
       if (!clazz.isSynthetic()) {
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MethodParametersTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MethodParametersTest.java
index b2ea090..3c7248a 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MethodParametersTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MethodParametersTest.java
@@ -91,9 +91,9 @@
             parameters.isCfRuntime(),
             result ->
                 result.assertSuccessWithOutputLines(
-                    "Outer-IA, 1",
-                    "int, Outer-IA, 2",
-                    "int, int, Outer-IA, 3",
+                    "Outer$Inner-IA, 1",
+                    "int, Outer$Inner-IA, 2",
+                    "int, int, Outer$Inner-IA, 3",
                     "int, int, 2",
                     "int, 1",
                     "0"),
@@ -102,9 +102,9 @@
                     "0",
                     "int, 1",
                     "int, int, 2",
-                    "int, int, Outer-IA, 3",
-                    "int, Outer-IA, 2",
-                    "Outer-IA, 1"));
+                    "int, int, Outer$Inner-IA, 3",
+                    "int, Outer$Inner-IA, 2",
+                    "Outer$Inner-IA, 1"));
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/profile/art/completeness/NestBasedAccessBridgesProfileRewritingTest.java b/src/test/java/com/android/tools/r8/profile/art/completeness/NestBasedAccessBridgesProfileRewritingTest.java
index 2b2d2f0..5756f2e 100644
--- a/src/test/java/com/android/tools/r8/profile/art/completeness/NestBasedAccessBridgesProfileRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/completeness/NestBasedAccessBridgesProfileRewritingTest.java
@@ -107,6 +107,7 @@
     inspect(
         profileInspector,
         inspector,
+        false,
         parameters.canUseNestBasedAccessesWhenDesugaring(),
         false);
   }
@@ -116,6 +117,7 @@
     inspect(
         profileInspector,
         inspector,
+        parameters.canHaveNonReboundConstructorInvoke(),
         parameters.canUseNestBasedAccesses(),
         true);
   }
@@ -123,6 +125,7 @@
   private void inspect(
       ArtProfileInspector profileInspector,
       CodeInspector inspector,
+      boolean canHaveNonReboundConstructorInvoke,
       boolean canUseNestBasedAccesses,
       boolean isR8)
       throws Exception {
@@ -132,7 +135,7 @@
     ClassSubject syntheticConstructorArgumentClassSubject =
         inspector.clazz(
             SyntheticItemsTestUtils.syntheticNestConstructorArgumentClass(
-                Reference.classFromClass(Main.class)));
+                Reference.classFromClass(NestMember.class)));
     assertThat(
         syntheticConstructorArgumentClassSubject, notIf(isPresent(), canUseNestBasedAccesses));