Revise renaming of Jvm*Signature in Kotlin function.
Bug: 70169921
Change-Id: I4c666549995fec8ad9fa23563301eb6f84c00181
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataSynthesizer.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataSynthesizer.java
index 6e959b6..6ff14a3 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataSynthesizer.java
@@ -125,7 +125,7 @@
? method.getKotlinMemberInfo().flag
: method.accessFlags.getAsKotlinFlags();
KmFunction kmFunction = new KmFunction(flag, renamedMethod.name.toString());
- JvmExtensionsKt.setSignature(kmFunction, toJvmMethodSignature(method.method));
+ JvmExtensionsKt.setSignature(kmFunction, toJvmMethodSignature(renamedMethod));
KmType kmReturnType = toRenamedKmType(method.method.proto.returnType, appView, lens);
if (kmReturnType == null) {
return null;
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
index f6649b7..eb98862 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
@@ -9,6 +9,7 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isRenamed;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.TestParameters;
@@ -20,6 +21,7 @@
import com.android.tools.r8.utils.codeinspector.KmClassSubject;
import com.android.tools.r8.utils.codeinspector.KmFunctionSubject;
import com.android.tools.r8.utils.codeinspector.KmPackageSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.nio.file.Path;
import java.util.Collection;
import java.util.HashMap;
@@ -100,6 +102,7 @@
ClassSubject impl = inspector.clazz(bClassName);
assertThat(impl, isPresent());
assertThat(impl, not(isRenamed()));
+
// API entry is kept, hence the presence of Metadata.
KmClassSubject kmClass = impl.getKmClass();
assertThat(kmClass, isPresent());
@@ -110,6 +113,7 @@
ClassSubject bKt = inspector.clazz(bKtClassName);
assertThat(bKt, isPresent());
assertThat(bKt, not(isRenamed()));
+
// API entry is kept, hence the presence of Metadata.
KmPackageSubject kmPackage = bKt.getKmPackage();
assertThat(kmPackage, isPresent());
@@ -128,7 +132,7 @@
.addKeepRules("-keep class **.B")
.addKeepRules("-keep class **.I { <methods>; }")
// Keep Super, but allow minification.
- .addKeepRules("-keep,allowobfuscation class **.Super")
+ .addKeepRules("-keep,allowobfuscation class **.Super { <methods>; }")
// Keep the BKt method, which will be called from other kotlin code.
.addKeepRules("-keep class **.BKt { <methods>; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
@@ -158,11 +162,24 @@
ClassSubject sup = inspector.clazz(superClassName);
assertThat(sup, isRenamed());
+ MethodSubject foo = sup.uniqueMethodWithName("foo");
+ assertThat(foo, isRenamed());
+
+ KmClassSubject kmClass = sup.getKmClass();
+ assertThat(kmClass, isPresent());
+
+ // TODO(b/70169921): would be better to look up function with the original name, "foo".
+ KmFunctionSubject kmFunction = kmClass.kmFunctionWithUniqueName(foo.getFinalName());
+ assertThat(kmFunction, isPresent());
+ assertThat(kmFunction, not(isExtensionFunction()));
+ assertEquals(foo.getJvmMethodSignatureAsString(), kmFunction.signature().asString());
+
ClassSubject impl = inspector.clazz(bClassName);
assertThat(impl, isPresent());
assertThat(impl, not(isRenamed()));
+
// API entry is kept, hence the presence of Metadata.
- KmClassSubject kmClass = impl.getKmClass();
+ kmClass = impl.getKmClass();
assertThat(kmClass, isPresent());
List<ClassSubject> superTypes = kmClass.getSuperTypes();
assertTrue(superTypes.stream().noneMatch(
@@ -177,7 +194,7 @@
KmPackageSubject kmPackage = bKt.getKmPackage();
assertThat(kmPackage, isPresent());
- KmFunctionSubject kmFunction = kmPackage.kmFunctionWithUniqueName("fun");
+ kmFunction = kmPackage.kmFunctionWithUniqueName("fun");
assertThat(kmFunction, isPresent());
assertThat(kmFunction, not(isExtensionFunction()));
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/function_lib/B.kt b/src/test/java/com/android/tools/r8/kotlin/metadata/function_lib/B.kt
index d327fda..41d286c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/function_lib/B.kt
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/function_lib/B.kt
@@ -11,6 +11,10 @@
override fun doStuff() {
println("do stuff")
}
+
+ fun foo() {
+ println("Super::foo")
+ }
}
class B : Super()
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java
index b9fa99a..5b3338b 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java
@@ -80,6 +80,7 @@
}
}
+ // TODO(b/70169921): Search both original and renamed names.
default KmFunctionSubject kmFunctionOrExtensionWithUniqueName(String name, boolean isExtension) {
KmFunction foundFunction = null;
for (KmFunction kmFunction : getKmDeclarationContainer().getFunctions()) {