Fix wrong LambdaMethodAnnotations
Use the original implementation method as the method for the annotation.
Bug: b/417709154
Change-Id: I50810dedd739092be3a08fa9a00fff68bae83de0
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 ab3652f..5734a3e 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
@@ -640,13 +640,15 @@
new DexAnnotationElement[] {
new DexAnnotationElement(
factory.createString("holder"),
- new DexValueString(callTarget.getHolderType().descriptor)),
+ new DexValueString(getImplementationMethod().getHolderType().descriptor)),
new DexAnnotationElement(
- factory.createString("method"), new DexValueString(callTarget.getName())),
+ factory.createString("method"),
+ new DexValueString(getImplementationMethod().getName())),
new DexAnnotationElement(
factory.createString("proto"),
new DexValueString(
- factory.createString(callTarget.getProto().toDescriptorString())))
+ factory.createString(
+ getImplementationMethod().getProto().toDescriptorString())))
}));
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaCallTargetAnnotationTest.java b/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaCallTargetAnnotationTest.java
index 6c6aa65..a4b9d3c 100644
--- a/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaCallTargetAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaCallTargetAnnotationTest.java
@@ -48,21 +48,7 @@
assertEquals(name, encodedAnnotation.getElement(index).getName().toString());
DexValue elementValue = encodedAnnotation.getElement(index).getValue();
assertTrue(elementValue.isDexValueString());
- if (!forceLambdaAccessor) {
- assertEquals(value, elementValue.asDexValueString().getValue().toString());
- } else {
- // Only check method names for reproduction of wrong annotation values.
- if (!name.equals("method")) {
- return;
- }
- if (value.equals("methodReturningJ")
- || value.equals("methodReturningI")
- || value.equals("<init>")) {
- assertTrue(elementValue.asDexValueString().getValue().toString().startsWith("$r8$lambda"));
- } else {
- assertEquals(value, elementValue.asDexValueString().getValue().toString());
- }
- }
+ assertEquals(value, elementValue.asDexValueString().getValue().toString());
}
private void checkAnnotation(