[Metadata] Use kotlin jvm metadata library 0.4.1
Bug: 207481117
Bug: 208365670
Change-Id: I8ab147b6e21d7493de3c40e838f6afd1621d1530
diff --git a/build.gradle b/build.gradle
index 68b9ecd..48e01cd 100644
--- a/build.gradle
+++ b/build.gradle
@@ -46,7 +46,7 @@
// The kotlin version is only here to specify the kotlin language level,
// all kotlin compilations are done in tests.
kotlinVersion = '1.5.0'
- kotlinExtMetadataJVMVersion = '0.3.0'
+ kotlinExtMetadataJVMVersion = '0.4.1'
smaliVersion = '2.2b4'
errorproneVersion = '2.3.2'
testngVersion = '6.10'
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
index 9e7d703..bd8696b 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
@@ -54,6 +54,7 @@
private final int[] metadataVersion;
private final String inlineClassUnderlyingPropertyName;
private final KotlinTypeInfo inlineClassUnderlyingType;
+ private final int jvmFlags;
// List of tracked assignments of kotlin metadata.
private final KotlinMetadataMembersTracker originalMembersWithKotlinInfo;
@@ -77,7 +78,8 @@
int[] metadataVersion,
String inlineClassUnderlyingPropertyName,
KotlinTypeInfo inlineClassUnderlyingType,
- KotlinMetadataMembersTracker originalMembersWithKotlinInfo) {
+ KotlinMetadataMembersTracker originalMembersWithKotlinInfo,
+ int jvmFlags) {
this.flags = flags;
this.name = name;
this.nameCanBeSynthesizedFromClassOrAnonymousObjectOrigin =
@@ -98,6 +100,7 @@
this.inlineClassUnderlyingPropertyName = inlineClassUnderlyingPropertyName;
this.inlineClassUnderlyingType = inlineClassUnderlyingType;
this.originalMembersWithKotlinInfo = originalMembersWithKotlinInfo;
+ this.jvmFlags = jvmFlags;
}
public static KotlinClassInfo create(
@@ -180,7 +183,8 @@
metadataVersion,
kmClass.getInlineClassUnderlyingPropertyName(),
KotlinTypeInfo.create(kmClass.getInlineClassUnderlyingType(), factory, reporter),
- originalMembersWithKotlinInfo);
+ originalMembersWithKotlinInfo,
+ JvmExtensionsKt.getJvmFlags(kmClass));
}
private static KotlinTypeReference getAnonymousObjectOrigin(
@@ -371,6 +375,7 @@
}
JvmClassExtensionVisitor extensionVisitor =
(JvmClassExtensionVisitor) kmClass.visitExtensions(JvmClassExtensionVisitor.TYPE);
+ extensionVisitor.visitJvmFlags(jvmFlags);
extensionVisitor.visitModuleName(moduleName);
if (anonymousObjectOrigin != null) {
rewritten |=
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java
index ee9ea2c..1e4d633 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java
@@ -303,6 +303,7 @@
public static void appendKmClass(String indent, StringBuilder sb, KmClass kmClass) {
appendKeyValue(indent, "flags", sb, kmClass.getFlags() + "");
+ appendKeyValue(indent, "jvmFlags", sb, JvmExtensionsKt.getJvmFlags(kmClass) + "");
appendKeyValue(indent, "name", sb, kmClass.getName());
appendKeyValue(
indent,
@@ -518,13 +519,22 @@
"setterSignature",
sb,
setterSignature != null ? setterSignature.asString() : "null");
- JvmMethodSignature syntheticMethod =
+ JvmMethodSignature syntheticMethodForAnnotations =
JvmExtensionsKt.getSyntheticMethodForAnnotations(kmProperty);
appendKeyValue(
newIndent,
"syntheticMethodForAnnotations",
sb,
- syntheticMethod != null ? syntheticMethod.asString() : "null");
+ syntheticMethodForAnnotations != null
+ ? syntheticMethodForAnnotations.asString()
+ : "null");
+ JvmMethodSignature syntheticMethodForDelegate =
+ JvmExtensionsKt.getSyntheticMethodForAnnotations(kmProperty);
+ appendKeyValue(
+ newIndent,
+ "syntheticMethodForDelegate",
+ sb,
+ syntheticMethodForDelegate != null ? syntheticMethodForDelegate.asString() : "null");
});
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinPropertyInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinPropertyInfo.java
index 9d0597d..39ab90c 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinPropertyInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinPropertyInfo.java
@@ -58,6 +58,8 @@
private final KotlinJvmMethodSignatureInfo syntheticMethodForAnnotations;
+ private final KotlinJvmMethodSignatureInfo syntheticMethodForDelegate;
+
private KotlinPropertyInfo(
int flags,
int getterFlags,
@@ -72,7 +74,8 @@
KotlinJvmFieldSignatureInfo fieldSignature,
KotlinJvmMethodSignatureInfo getterSignature,
KotlinJvmMethodSignatureInfo setterSignature,
- KotlinJvmMethodSignatureInfo syntheticMethodForAnnotations) {
+ KotlinJvmMethodSignatureInfo syntheticMethodForAnnotations,
+ KotlinJvmMethodSignatureInfo syntheticMethodForDelegate) {
this.flags = flags;
this.getterFlags = getterFlags;
this.setterFlags = setterFlags;
@@ -87,6 +90,7 @@
this.getterSignature = getterSignature;
this.setterSignature = setterSignature;
this.syntheticMethodForAnnotations = syntheticMethodForAnnotations;
+ this.syntheticMethodForDelegate = syntheticMethodForDelegate;
}
public static KotlinPropertyInfo create(
@@ -108,7 +112,9 @@
KotlinJvmMethodSignatureInfo.create(
JvmExtensionsKt.getSetterSignature(kmProperty), factory),
KotlinJvmMethodSignatureInfo.create(
- JvmExtensionsKt.getSyntheticMethodForAnnotations(kmProperty), factory));
+ JvmExtensionsKt.getSyntheticMethodForAnnotations(kmProperty), factory),
+ KotlinJvmMethodSignatureInfo.create(
+ JvmExtensionsKt.getSyntheticMethodForDelegate(kmProperty), factory));
}
@Override
@@ -187,6 +193,11 @@
syntheticMethodForAnnotations.rewrite(
extensionVisitor::visitSyntheticMethodForAnnotations, null, appView, namingLens);
}
+ if (syntheticMethodForDelegate != null) {
+ rewritten |=
+ syntheticMethodForDelegate.rewrite(
+ extensionVisitor::visitSyntheticMethodForDelegate, null, appView, namingLens);
+ }
}
return rewritten;
}
@@ -215,5 +226,8 @@
if (syntheticMethodForAnnotations != null) {
syntheticMethodForAnnotations.trace(definitionSupplier);
}
+ if (syntheticMethodForDelegate != null) {
+ syntheticMethodForDelegate.trace(definitionSupplier);
+ }
}
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
index 5ac1258..8fdbe8f 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
@@ -8,6 +8,7 @@
import static com.android.tools.r8.ToolHelper.getKotlinReflectJar;
import static com.android.tools.r8.ToolHelper.getKotlinStdlibJar;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
import com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion;
@@ -23,7 +24,6 @@
import java.nio.file.Path;
import java.util.Collection;
import kotlinx.metadata.jvm.KotlinClassMetadata;
-import org.hamcrest.CoreMatchers;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -129,7 +129,7 @@
Assert.assertEquals(1, compileResult.exitCode);
assertThat(
compileResult.stderr,
- CoreMatchers.containsString(
+ containsString(
"unsupported [reference to the synthetic extension property for a Java get/set"
+ " method]"));
}
@@ -140,9 +140,6 @@
KotlinClassMetadata kotlinClassMetadata = clazz.getKotlinClassMetadata();
Assert.assertNotNull(kotlinClassMetadata);
String metadataAsString = KotlinMetadataWriter.kotlinMetadataToString("", kotlinClassMetadata);
- // TODO(b/208365670): We should model this when landed.
- assertThat(
- metadataAsString,
- CoreMatchers.not(CoreMatchers.containsString("syntheticMethodForDelegate:")));
+ assertThat(metadataAsString, containsString("syntheticMethodForDelegate:"));
}
}