Work-around debug info in the enum unboxer

Change-Id: Ie3c60dbc4b8cf623b053028a683d170af7cd9962
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index 486aaa7..9532f1e 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -312,6 +312,17 @@
     return new EventBasedDebugInfo(eventBasedInfo.startLine, newParameters, eventBasedInfo.events);
   }
 
+  public DexDebugInfo debugInfoWithExtraParameters(DexItemFactory factory, int extraParameters) {
+    EventBasedDebugInfo eventBasedInfo = DexDebugInfo.convertToEventBased(this, factory);
+    if (eventBasedInfo == null) {
+      return eventBasedInfo;
+    }
+    DexString[] parameters = eventBasedInfo.parameters;
+    DexString[] newParameters = new DexString[parameters.length + extraParameters];
+    System.arraycopy(parameters, 0, newParameters, 0, parameters.length);
+    return new EventBasedDebugInfo(eventBasedInfo.startLine, newParameters, eventBasedInfo.events);
+  }
+
   @Override
   public Code getCodeAsInlining(
       DexMethod caller, DexMethod callee, DexItemFactory factory, boolean isCalleeD8R8Synthesized) {
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index f9a5279..1c502d5 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -1011,6 +1011,20 @@
     }
   }
 
+  public static void setDebugInfoWithExtraParameters(
+      Code code, int arity, int extraParameters, AppView<?> appView) {
+    if (code.isDexCode()) {
+      DexCode dexCode = code.asDexCode();
+      DexDebugInfo newDebugInfo =
+          dexCode.debugInfoWithExtraParameters(appView.dexItemFactory(), extraParameters);
+      assert (newDebugInfo == null) || (arity == newDebugInfo.getParameterCount());
+      dexCode.setDebugInfo(newDebugInfo);
+    } else {
+      assert code.isCfCode();
+      // We don't have anything to do for Cf.
+    }
+  }
+
   private DexCode toDexCodeThatLogsError(DexItemFactory itemFactory) {
     checkIfObsolete();
     Signature signature = MethodSignature.fromDexMethod(getReference());
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
index e0d0b36..de2b9cf 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
@@ -822,15 +822,24 @@
     RewrittenPrototypeDescription prototypeChanges =
         lensBuilder.moveAndMap(
             method.getReference(), newMethod, isStatic, isStatic, extraUnusedNullParameters);
-    return method.toTypeSubstitutedMethod(
-        newMethod,
-        builder ->
-            builder
-                .fixupOptimizationInfo(
-                    appView, prototypeChanges.createMethodOptimizationInfoFixer())
-                .setCompilationState(method.getCompilationState())
-                .setIsLibraryMethodOverrideIf(
-                    method.isNonPrivateVirtualMethod(), OptionalBool.FALSE));
+    DexEncodedMethod newEncodedMethod =
+        method.toTypeSubstitutedMethod(
+            newMethod,
+            builder ->
+                builder
+                    .fixupOptimizationInfo(
+                        appView, prototypeChanges.createMethodOptimizationInfoFixer())
+                    .setCompilationState(method.getCompilationState())
+                    .setIsLibraryMethodOverrideIf(
+                        method.isNonPrivateVirtualMethod(), OptionalBool.FALSE));
+    if (!extraUnusedNullParameters.isEmpty() && method.getCode() != null) {
+      DexEncodedMethod.setDebugInfoWithExtraParameters(
+          newEncodedMethod.getCode(),
+          newMethod.getArity(),
+          extraUnusedNullParameters.size(),
+          appView);
+    }
+    return newEncodedMethod;
   }
 
   private DexEncodedField fixupEncodedField(DexEncodedField encodedField) {