Copy over keep info for virtual methods in vertical class merger
Bug: b/231662249
Change-Id: I27979bda40cfcbad772964f0c463cc3afdc3e163
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index 5aa62c3..b5898c5 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -1157,6 +1157,20 @@
add(virtualMethods, shadowedBy, MethodSignatureEquivalence.get());
}
+ // Copy over any keep info from the original virtual method.
+ ProgramMethod programMethod = new ProgramMethod(target, shadowedBy);
+ appView
+ .getKeepInfo()
+ .mutate(
+ mutableKeepInfoCollection ->
+ mutableKeepInfoCollection.joinMethod(
+ programMethod,
+ info ->
+ info.merge(
+ mutableKeepInfoCollection
+ .getMethodInfo(virtualMethod, source)
+ .joiner())));
+
deferredRenamings.map(virtualMethod.getReference(), shadowedBy.getReference());
deferredRenamings.recordMove(
virtualMethod.getReference(),
diff --git a/src/test/java/com/android/tools/r8/cf/MethodHandleDifferentNameArgumentPropagationTest.java b/src/test/java/com/android/tools/r8/cf/MethodHandleDifferentNameArgumentPropagationTest.java
index ecacd6d..5106ff8 100644
--- a/src/test/java/com/android/tools/r8/cf/MethodHandleDifferentNameArgumentPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/cf/MethodHandleDifferentNameArgumentPropagationTest.java
@@ -44,8 +44,7 @@
.addOptionsModification(
options -> options.apiModelingOptions().disableApiCallerIdentification())
.run(parameters.getRuntime(), Main.class)
- // TODO(b/231662249): Should not throw an error.
- .assertFailureWithErrorThatThrows(BootstrapMethodError.class);
+ .assertSuccessWithOutputLines(EXPECTED);
}
public interface Foreachable {