Enum unboxing: fix library override

- fix red bot

Change-Id: Ibe8d69c04a93d78cb34fca81488698ffeaf510e6
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
index 8fafcb7..12b42aa 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxer.java
@@ -77,6 +77,7 @@
 import com.android.tools.r8.origin.SynthesizedOrigin;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.utils.OptionalBool;
 import com.android.tools.r8.utils.Reporter;
 import com.android.tools.r8.utils.StringDiagnostic;
 import com.android.tools.r8.utils.collections.ProgramMethodSet;
@@ -1276,14 +1277,23 @@
         return encodedMethod;
       }
       assert !encodedMethod.isClassInitializer();
-      DexMethod newMethod =
-          factory.createMethod(encodedMethod.holder(), newProto, encodedMethod.getName());
+      // We add the $enumunboxing$ suffix to make sure we do not create a library override.
+      String newMethodName =
+          encodedMethod.getName().toString()
+              + (encodedMethod.isNonPrivateVirtualMethod() ? "$enumunboxing$" : "");
+      DexMethod newMethod = factory.createMethod(encodedMethod.holder(), newProto, newMethodName);
       newMethod = ensureUniqueMethod(encodedMethod, newMethod);
       int numberOfExtraNullParameters = newMethod.getArity() - encodedMethod.method.getArity();
       boolean isStatic = encodedMethod.isStatic();
       lensBuilder.move(
           encodedMethod.method, isStatic, newMethod, isStatic, numberOfExtraNullParameters);
-      return encodedMethod.toTypeSubstitutedMethod(newMethod);
+      DexEncodedMethod newEncodedMethod = encodedMethod.toTypeSubstitutedMethod(newMethod);
+      assert !encodedMethod.isLibraryMethodOverride().isTrue()
+          : "Enum unboxing is changing the signature of a library override in a non unboxed class.";
+      if (newEncodedMethod.isNonPrivateVirtualMethod()) {
+        newEncodedMethod.setLibraryMethodOverride(OptionalBool.FALSE);
+      }
+      return newEncodedMethod;
     }
 
     private DexMethod ensureUniqueMethod(DexEncodedMethod encodedMethod, DexMethod newMethod) {