Fix for issue 197625454

Bug: 197625454
Change-Id: I689e6f7d4136f70564a1e5b7a20cd9cfa5c43ded
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index 3b5a40b..08324c3 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -6,6 +6,7 @@
 
 import static com.android.tools.r8.ir.desugar.lambda.ForcefullyMovedLambdaMethodConsumer.emptyForcefullyMovedLambdaMethodConsumer;
 import static com.android.tools.r8.utils.ConsumerUtils.emptyConsumer;
+import static com.android.tools.r8.utils.DesugarUtils.appendFullyQualifiedHolderToMethodName;
 
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.errors.Unimplemented;
@@ -347,17 +348,14 @@
     } else {
       // Otherwise we need to ensure the method can be reached publicly by virtual dispatch.
       // To avoid potential conflicts on the name of the lambda method once dispatch becomes virtual
-      // we add the method-holder name as suffix to the lambda-method name.
+      // we add the fully qualified method-holder name as suffix to the lambda-method name.
       return new InstanceLambdaImplTarget(
           appView
               .dexItemFactory()
               .createMethod(
                   implMethod.holder,
                   implMethod.proto,
-                  appView
-                      .dexItemFactory()
-                      .createString(
-                          implMethod.name.toString() + "$" + implMethod.holder.getName())));
+                  appendFullyQualifiedHolderToMethodName(implMethod, appView.dexItemFactory())));
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/utils/DesugarUtils.java b/src/main/java/com/android/tools/r8/utils/DesugarUtils.java
new file mode 100644
index 0000000..7b8fba2
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/utils/DesugarUtils.java
@@ -0,0 +1,17 @@
+// Copyright (c) 2021, 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 com.android.tools.r8.utils;
+
+import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.DexString;
+
+public class DesugarUtils {
+  public static DexString appendFullyQualifiedHolderToMethodName(
+      DexMethod method, DexItemFactory factory) {
+    return factory.createString(
+        method.name.toString() + "$" + method.holder.getTypeName().replace('.', '-'));
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/desugar/DesugarLambdaWithAnonymousClass.java b/src/test/java/com/android/tools/r8/desugar/DesugarLambdaWithAnonymousClass.java
index 72549c5..c71f19c 100644
--- a/src/test/java/com/android/tools/r8/desugar/DesugarLambdaWithAnonymousClass.java
+++ b/src/test/java/com/android/tools/r8/desugar/DesugarLambdaWithAnonymousClass.java
@@ -34,7 +34,8 @@
 
   private List<String> EXPECTED_D8_DESUGARED_RESULT =
       ImmutableList.of(
-          "Hello from inside lambda$test$0$DesugarLambdaWithAnonymousClass$TestClass",
+          "Hello from inside"
+              + " lambda$test$0$com-android-tools-r8-desugar-DesugarLambdaWithAnonymousClass$TestClass",
           "Hello from inside lambda$testStatic$1");
 
   @Parameterized.Parameters(name = "{0}")
diff --git a/src/test/java/com/android/tools/r8/desugar/DesugarLambdaWithLocalClass.java b/src/test/java/com/android/tools/r8/desugar/DesugarLambdaWithLocalClass.java
index 62c36fd..60fde2f 100644
--- a/src/test/java/com/android/tools/r8/desugar/DesugarLambdaWithLocalClass.java
+++ b/src/test/java/com/android/tools/r8/desugar/DesugarLambdaWithLocalClass.java
@@ -33,7 +33,8 @@
 
   private List<String> EXPECTED_D8_DESUGARED_RESULT =
       ImmutableList.of(
-          "Hello from inside lambda$test$0$DesugarLambdaWithLocalClass$TestClass",
+          "Hello from inside"
+              + " lambda$test$0$com-android-tools-r8-desugar-DesugarLambdaWithLocalClass$TestClass",
           "Hello from inside lambda$testStatic$1");
 
   @Parameterized.Parameters(name = "{0}")
diff --git a/src/test/java/com/android/tools/r8/desugar/lambdas/OverlappingLambdaMethodInSubclassWithSameNameTest.java b/src/test/java/com/android/tools/r8/desugar/lambdas/OverlappingLambdaMethodInSubclassWithSameNameTest.java
index 3dd750e..9f5fa37 100644
--- a/src/test/java/com/android/tools/r8/desugar/lambdas/OverlappingLambdaMethodInSubclassWithSameNameTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/lambdas/OverlappingLambdaMethodInSubclassWithSameNameTest.java
@@ -23,9 +23,6 @@
   static final String EXPECTED =
       StringUtils.lines("Superclass lambda: Hello!", "Superclass lambda: Hello!");
 
-  static final String UNEXPECTED_D8_B197625454 =
-      StringUtils.lines("Subclass lambda: Hello!", "Superclass lambda: Hello!");
-
   private static final Class<?> MAIN_CLASS =
       com.android.tools.r8.desugar.lambdas.b197625454.subpackage
           .OverlappingLambdaMethodInSubclassWithSameNameTestA.class;
@@ -58,7 +55,7 @@
             OverlappingLambdaMethodInSubclassWithSameNameTestB.class)
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), MAIN_CLASS)
-        .assertSuccessWithOutput(UNEXPECTED_D8_B197625454);
+        .assertSuccessWithOutput(EXPECTED);
   }
 
   @Test