Revert "Upgrade to Kotlin metadata 0.7.0"
This reverts commit ff8a1cbb3d1fc9ec633dc1230afd8f83fa263a19.
Reason for revert: Reland after vacation
Change-Id: I1e84cc8c5ddaf462319f8b41a9dda841ce91a7c1
diff --git a/build.gradle b/build.gradle
index 31651fa..c1d2994 100644
--- a/build.gradle
+++ b/build.gradle
@@ -30,7 +30,7 @@
// The kotlin version is only here to specify the kotlin language level,
// all kotlin compilations are done in tests.
kotlinVersion = '1.8.0'
- kotlinExtMetadataJVMVersion = '0.7.0'
+ kotlinExtMetadataJVMVersion = '0.6.2'
smaliVersion = '3.0.3'
errorproneVersion = '2.18.0'
testngVersion = '6.10'
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
index b11a532..533d70e 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -290,7 +290,7 @@
const val javassist = "3.29.2-GA"
const val junitVersion = "4.13-beta-2"
const val kotlinVersion = "1.8.10"
- const val kotlinMetadataVersion = "0.7.0"
+ const val kotlinMetadataVersion = "0.6.2"
const val mockito = "2.10.0"
const val smaliVersion = "3.0.3"
}
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 66c4f2e..bc61463 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
@@ -125,7 +125,10 @@
Consumer<DexEncodedMethod> keepByteCode) {
DexItemFactory factory = appView.dexItemFactory();
Reporter reporter = appView.reporter();
- KmClass kmClass = metadata.getKmClass();
+ KmClass kmClass = metadata.toKmClass();
+ KotlinJvmSignatureExtensionInformation extensionInformation =
+ KotlinJvmSignatureExtensionInformation.readInformationFromMessage(
+ metadata, appView.options());
Map<String, DexEncodedField> fieldMap = new HashMap<>();
for (DexEncodedField field : hostClass.fields()) {
fieldMap.put(toJvmFieldSignature(field.getReference()).asString(), field);
@@ -135,11 +138,14 @@
methodMap.put(toJvmMethodSignature(method.getReference()).asString(), method);
}
ImmutableList.Builder<KotlinConstructorInfo> notBackedConstructors = ImmutableList.builder();
+ int constructorIndex = 0;
KotlinMetadataMembersTracker originalMembersWithKotlinInfo =
new KotlinMetadataMembersTracker(appView);
for (KmConstructor kmConstructor : kmClass.getConstructors()) {
+ boolean readConstructorSignature =
+ extensionInformation.hasJvmMethodSignatureExtensionForConstructor(constructorIndex++);
KotlinConstructorInfo constructorInfo =
- KotlinConstructorInfo.create(kmConstructor, factory, reporter);
+ KotlinConstructorInfo.create(kmConstructor, factory, reporter, readConstructorSignature);
JvmMethodSignature signature = JvmExtensionsKt.getSignature(kmConstructor);
if (signature != null) {
DexEncodedMethod method = methodMap.get(signature.asString());
@@ -160,6 +166,7 @@
factory,
reporter,
keepByteCode,
+ extensionInformation,
originalMembersWithKotlinInfo);
KotlinTypeReference anonymousObjectOrigin = getAnonymousObjectOrigin(kmClass, factory);
boolean nameCanBeDeducedFromClassOrOrigin =
@@ -447,7 +454,7 @@
localDelegatedProperties.rewrite(
JvmExtensionsKt.getLocalDelegatedProperties(kmClass)::add, appView);
return Pair.create(
- Companion.writeClass(kmClass, getCompatibleKotlinInfo(), 0),
+ Companion.writeClass(kmClass, getCompatibleKotlinInfo(), 0).getAnnotationData(),
rewritten || !originalMembersWithKotlinInfo.isEqual(rewrittenReferences, appView));
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java
index 849a6fc..d63d8e7 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java
@@ -203,9 +203,9 @@
KotlinClassMetadata kMetadata,
AppView<?> appView,
Consumer<DexEncodedMethod> keepByteCode) {
- Metadata metadata = kMetadata.getAnnotationData$kotlinx_metadata_jvm();
- String packageName = metadata.pn();
- int[] metadataVersion = metadata.mv();
+ Metadata annotationData = kMetadata.getAnnotationData();
+ String packageName = annotationData.pn();
+ int[] metadataVersion = annotationData.mv();
if (kMetadata instanceof KotlinClassMetadata.Class) {
return KotlinClassInfo.create(
(KotlinClassMetadata.Class) kMetadata,
@@ -240,7 +240,7 @@
kotlin,
appView);
} else {
- throw new MetadataError("unsupported 'k' value: " + metadata.k());
+ throw new MetadataError("unsupported 'k' value: " + annotationData.k());
}
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java
index a60cf6b..c8dac29 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java
@@ -41,12 +41,18 @@
}
public static KotlinConstructorInfo create(
- KmConstructor kmConstructor, DexItemFactory factory, Reporter reporter) {
+ KmConstructor kmConstructor,
+ DexItemFactory factory,
+ Reporter reporter,
+ boolean readConstructorSignature) {
return new KotlinConstructorInfo(
kmConstructor.getFlags(),
KotlinValueParameterInfo.create(kmConstructor.getValueParameters(), factory, reporter),
KotlinVersionRequirementInfo.create(kmConstructor.getVersionRequirements()),
- KotlinJvmMethodSignatureInfo.create(JvmExtensionsKt.getSignature(kmConstructor), factory));
+ readConstructorSignature
+ ? KotlinJvmMethodSignatureInfo.create(
+ JvmExtensionsKt.getSignature(kmConstructor), factory)
+ : null);
}
boolean rewrite(KmClass kmClass, DexEncodedMethod method, AppView<?> appView) {
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
index e670bb5..0c159d2 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
@@ -59,8 +59,10 @@
DexItemFactory factory,
Reporter reporter,
Consumer<DexEncodedMethod> keepByteCode,
+ KotlinJvmSignatureExtensionInformation extensionInformation,
KotlinMetadataMembersTracker originalAssignmentTracker) {
ImmutableList.Builder<KotlinFunctionInfo> notBackedFunctions = ImmutableList.builder();
+ int functionCounter = 0;
for (KmFunction kmFunction : container.getFunctions()) {
JvmMethodSignature signature = JvmExtensionsKt.getSignature(kmFunction);
if (signature == null) {
@@ -68,7 +70,11 @@
continue;
}
KotlinFunctionInfo kotlinFunctionInfo =
- KotlinFunctionInfo.create(kmFunction, factory, reporter);
+ KotlinFunctionInfo.create(
+ kmFunction,
+ factory,
+ reporter,
+ extensionInformation.hasJvmMethodSignatureExtensionForFunction(functionCounter++));
DexEncodedMethod method = methodSignatureMap.get(signature.asString());
if (method == null) {
notBackedFunctions.add(kotlinFunctionInfo);
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java
index 228aee9..59e482f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java
@@ -38,9 +38,12 @@
DexClass clazz,
AppView<?> appView,
Consumer<DexEncodedMethod> keepByteCode) {
- KmPackage kmPackage = kmFileFacade.getKmPackage();
+ KmPackage kmPackage = kmFileFacade.toKmPackage();
+ KotlinJvmSignatureExtensionInformation extensionInformation =
+ KotlinJvmSignatureExtensionInformation.readInformationFromMessage(
+ kmFileFacade, appView.options());
return new KotlinFileFacadeInfo(
- KotlinPackageInfo.create(kmPackage, clazz, appView, keepByteCode),
+ KotlinPackageInfo.create(kmPackage, clazz, appView, keepByteCode, extensionInformation),
packageName,
metadataVersion);
}
@@ -60,7 +63,8 @@
KmPackage kmPackage = new KmPackage();
boolean rewritten = packageInfo.rewrite(kmPackage, clazz, appView);
return Pair.create(
- Companion.writeFileFacade(kmPackage, getCompatibleKotlinInfo(), 0), rewritten);
+ Companion.writeFileFacade(kmPackage, getCompatibleKotlinInfo(), 0).getAnnotationData(),
+ rewritten);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java
index 1e387ff..351acc9 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java
@@ -79,7 +79,10 @@
}
static KotlinFunctionInfo create(
- KmFunction kmFunction, DexItemFactory factory, Reporter reporter) {
+ KmFunction kmFunction,
+ DexItemFactory factory,
+ Reporter reporter,
+ boolean readMethodSignature) {
boolean isCrossInline = false;
List<KotlinValueParameterInfo> valueParameters =
KotlinValueParameterInfo.create(kmFunction.getValueParameters(), factory, reporter);
@@ -96,14 +99,16 @@
KotlinTypeInfo.create(kmFunction.getReceiverParameterType(), factory, reporter),
valueParameters,
KotlinTypeParameterInfo.create(kmFunction.getTypeParameters(), factory, reporter),
- KotlinJvmMethodSignatureInfo.create(JvmExtensionsKt.getSignature(kmFunction), factory),
+ readMethodSignature
+ ? KotlinJvmMethodSignatureInfo.create(JvmExtensionsKt.getSignature(kmFunction), factory)
+ : null,
getlambdaClassOrigin(kmFunction, factory),
KotlinVersionRequirementInfo.create(kmFunction.getVersionRequirements()),
KotlinContractInfo.create(kmFunction.getContract(), factory, reporter),
isCrossInline,
ListUtils.map(
kmFunction.getContextReceiverTypes(),
- contextReceiverType -> KotlinTypeInfo.create(contextReceiverType, factory, reporter)));
+ contextRecieverType -> KotlinTypeInfo.create(contextRecieverType, factory, reporter)));
}
private static KotlinTypeReference getlambdaClassOrigin(
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinJvmSignatureExtensionInformation.java b/src/main/java/com/android/tools/r8/kotlin/KotlinJvmSignatureExtensionInformation.java
new file mode 100644
index 0000000..98ebaed
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinJvmSignatureExtensionInformation.java
@@ -0,0 +1,175 @@
+// Copyright (c) 2021, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.kotlin;
+
+import com.android.tools.r8.utils.InternalOptions;
+import com.android.tools.r8.utils.ListUtils;
+import com.android.tools.r8.utils.ReflectionHelper;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import kotlin.Pair;
+import kotlinx.metadata.internal.metadata.ProtoBuf;
+import kotlinx.metadata.internal.metadata.jvm.JvmProtoBuf;
+import kotlinx.metadata.jvm.KotlinClassMetadata;
+import kotlinx.metadata.jvm.KotlinClassMetadata.FileFacade;
+import kotlinx.metadata.jvm.KotlinClassMetadata.MultiFileClassPart;
+import kotlinx.metadata.jvm.KotlinClassMetadata.SyntheticClass;
+
+// Due to kotlin-metadata-jvm library synthesizing jvm method signatures from type-information
+// we do an extra check to figure out if we should model the signature. If we model it, we will
+// add name and descriptor information to the string pool for the proto message, so it is
+// better to avoid it.
+// https://github.com/Kotlin/kotlinx.reflect.lite/blob/46d47f118f9846166b6b8f8212bdbc822fe2f634/src/main/java/org/jetbrains/kotlin/serialization/jvm/JvmProtoBufUtil.kt
+
+public class KotlinJvmSignatureExtensionInformation {
+
+ private final Set<Integer> noExtensionIndicesForFunctions;
+ private final Set<Integer> noExtensionIndicesForConstructors;
+
+ private static final KotlinJvmSignatureExtensionInformation EMPTY = builder().build();
+
+ private KotlinJvmSignatureExtensionInformation(
+ Set<Integer> noExtensionIndicesForFunctions, Set<Integer> noExtensionIndicesForConstructors) {
+ this.noExtensionIndicesForFunctions = noExtensionIndicesForFunctions;
+ this.noExtensionIndicesForConstructors = noExtensionIndicesForConstructors;
+ }
+
+ public static KotlinJvmSignatureExtensionInformation readInformationFromMessage(
+ FileFacade fileFacadeMetadata, InternalOptions options) {
+ return readPackageDataFromMessage(fileFacadeMetadata, options);
+ }
+
+ public static KotlinJvmSignatureExtensionInformation readInformationFromMessage(
+ MultiFileClassPart classPart, InternalOptions options) {
+ return readPackageDataFromMessage(classPart, options);
+ }
+
+ private static KotlinJvmSignatureExtensionInformation readPackageDataFromMessage(
+ Object object, InternalOptions options) {
+ try {
+ Pair<?, ProtoBuf.Package> kotlinPairData =
+ ReflectionHelper.performReflection(
+ object,
+ ReflectionHelper.builder()
+ .readField("packageData$delegate")
+ .setSetAccessible(true)
+ .done()
+ .readMethod("getValue")
+ .setSetAccessible(true)
+ .done()
+ .build());
+ return builder().visit(kotlinPairData.getSecond()).build();
+ } catch (Exception e) {
+ options.warningReadingKotlinMetadataReflective();
+ return empty();
+ }
+ }
+
+ public static KotlinJvmSignatureExtensionInformation readInformationFromMessage(
+ SyntheticClass syntheticClass, InternalOptions options) {
+ try {
+ Pair<?, ProtoBuf.Function> kotlinPairData =
+ ReflectionHelper.performReflection(
+ syntheticClass,
+ ReflectionHelper.builder()
+ .readField("functionData$delegate")
+ .setSetAccessible(true)
+ .done()
+ .readMethod("getValue")
+ .setSetAccessible(true)
+ .done()
+ .build());
+ if (kotlinPairData == null) {
+ return empty();
+ }
+ return builder().visit(kotlinPairData.getSecond(), 0).build();
+ } catch (Exception e) {
+ options.warningReadingKotlinMetadataReflective();
+ return empty();
+ }
+ }
+
+ public static KotlinJvmSignatureExtensionInformation readInformationFromMessage(
+ KotlinClassMetadata.Class kMetadata, InternalOptions options) {
+ try {
+ Pair<?, ProtoBuf.Class> kotlinPairData =
+ ReflectionHelper.performReflection(
+ kMetadata,
+ ReflectionHelper.builder()
+ .readField("classData$delegate")
+ .setSetAccessible(true)
+ .done()
+ .readMethod("getValue")
+ .setSetAccessible(true)
+ .done()
+ .build());
+ return builder().visit(kotlinPairData.getSecond()).build();
+ } catch (Exception e) {
+ options.warningReadingKotlinMetadataReflective();
+ return empty();
+ }
+ }
+
+ public boolean hasJvmMethodSignatureExtensionForFunction(int index) {
+ return !noExtensionIndicesForFunctions.contains(index);
+ }
+
+ public boolean hasJvmMethodSignatureExtensionForConstructor(int index) {
+ return !noExtensionIndicesForConstructors.contains(index);
+ }
+
+ public static KotlinJvmSignatureExtensionInformationBuilder builder() {
+ return new KotlinJvmSignatureExtensionInformationBuilder();
+ }
+
+ public static KotlinJvmSignatureExtensionInformation empty() {
+ return EMPTY;
+ }
+
+ private static class KotlinJvmSignatureExtensionInformationBuilder {
+
+ private final Set<Integer> noExtensionIndicesForFunctions = new HashSet<>();
+ private final Set<Integer> noExtensionIndicesForConstructors = new HashSet<>();
+
+ private KotlinJvmSignatureExtensionInformation build() {
+ return new KotlinJvmSignatureExtensionInformation(
+ noExtensionIndicesForFunctions, noExtensionIndicesForConstructors);
+ }
+
+ private KotlinJvmSignatureExtensionInformationBuilder visit(ProtoBuf.Class clazz) {
+ visitFunctions(clazz.getFunctionList());
+ visitConstructors(clazz.getConstructorList());
+ return this;
+ }
+
+ private KotlinJvmSignatureExtensionInformationBuilder visit(ProtoBuf.Package pkg) {
+ visitFunctions(pkg.getFunctionList());
+ return this;
+ }
+
+ private void visitFunctions(List<ProtoBuf.Function> functions) {
+ ListUtils.forEachWithIndex(functions, this::visit);
+ }
+
+ public KotlinJvmSignatureExtensionInformationBuilder visit(
+ ProtoBuf.Function function, int index) {
+ if (!function.hasExtension(JvmProtoBuf.methodSignature)) {
+ noExtensionIndicesForFunctions.add(index);
+ }
+ return this;
+ }
+
+ private void visitConstructors(List<ProtoBuf.Constructor> constructors) {
+ ListUtils.forEachWithIndex(
+ constructors,
+ (constructor, index) -> {
+ if (!constructor.hasExtension(JvmProtoBuf.constructorSignature)) {
+ noExtensionIndicesForConstructors.add(index);
+ }
+ });
+ }
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
index 6f04aba..9900e81 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
@@ -31,13 +31,21 @@
}
static KotlinLambdaInfo create(
- DexClass clazz, KmLambda lambda, DexItemFactory factory, Reporter reporter) {
+ DexClass clazz,
+ KmLambda lambda,
+ DexItemFactory factory,
+ Reporter reporter,
+ KotlinJvmSignatureExtensionInformation extensionInformation) {
if (lambda == null) {
assert false;
return null;
}
KotlinFunctionInfo kotlinFunctionInfo =
- KotlinFunctionInfo.create(lambda.function, factory, reporter);
+ KotlinFunctionInfo.create(
+ lambda.function,
+ factory,
+ reporter,
+ extensionInformation.hasJvmMethodSignatureExtensionForFunction(0));
JvmMethodSignature signature = JvmExtensionsKt.getSignature(lambda.function);
if (signature != null) {
for (DexEncodedMethod method : clazz.methods()) {
@@ -53,7 +61,8 @@
boolean rewrite(Consumer<KmLambda> consumer, DexClass clazz, AppView<?> appView) {
KmLambda kmLambda = consume(new KmLambda(), consumer);
if (!hasBacking) {
- return function.rewrite(kmLambda::setFunction, null, appView);
+ function.rewrite(kmLambda::setFunction, null, appView);
+ return true;
}
DexEncodedMethod backing = null;
for (DexEncodedMethod method : clazz.methods()) {
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataAnnotationWrapper.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataAnnotationWrapper.java
index d34a84f..6c01e1b 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataAnnotationWrapper.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataAnnotationWrapper.java
@@ -56,7 +56,7 @@
}
public static KotlinMetadataAnnotationWrapper wrap(KotlinClassMetadata classMetadata) {
- Metadata annotationData = classMetadata.getAnnotationData$kotlinx_metadata_jvm();
+ Metadata annotationData = classMetadata.getAnnotationData();
return new KotlinMetadataAnnotationWrapper(
annotationData.k(),
annotationData.mv(),
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 a06a9a2..9276239 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java
@@ -89,7 +89,7 @@
"Metadata.Class",
sb,
newIndent -> {
- KotlinMetadataWriter.appendKmClass(newIndent, sb, kMetadata.getKmClass());
+ KotlinMetadataWriter.appendKmClass(newIndent, sb, kMetadata.toKmClass());
});
return sb.toString();
}
@@ -102,7 +102,7 @@
"Metadata.FileFacade",
sb,
newIndent -> {
- KotlinMetadataWriter.appendKmPackage(newIndent, sb, kMetadata.getKmPackage());
+ KotlinMetadataWriter.appendKmPackage(newIndent, sb, kMetadata.toKmPackage());
});
return sb.toString();
}
@@ -125,7 +125,7 @@
newIndent -> {
KotlinMetadataWriter.appendKeyValue(
newIndent, "facadeClassName", sb, kMetadata.getFacadeClassName());
- KotlinMetadataWriter.appendKmPackage(newIndent, sb, kMetadata.getKmPackage());
+ KotlinMetadataWriter.appendKmPackage(newIndent, sb, kMetadata.toKmPackage());
});
return sb.toString();
}
@@ -139,7 +139,7 @@
sb,
newIndent -> {
try {
- KmLambda kmLambda = kMetadata.getKmLambda();
+ KmLambda kmLambda = kMetadata.toKmLambda();
if (kmLambda != null) {
KotlinMetadataWriter.appendKeyValue(
newIndent,
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassFacadeInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassFacadeInfo.java
index 9757ef4..7f0b67f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassFacadeInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassFacadeInfo.java
@@ -71,7 +71,8 @@
null);
}
return Pair.create(
- Companion.writeMultiFileClassFacade(partClassNameStrings, getCompatibleKotlinInfo(), 0),
+ Companion.writeMultiFileClassFacade(partClassNameStrings, getCompatibleKotlinInfo(), 0)
+ .getAnnotationData(),
rewritten);
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java
index a317760..a51defc 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java
@@ -43,10 +43,13 @@
DexClass clazz,
AppView<?> appView,
Consumer<DexEncodedMethod> keepByteCode) {
- KmPackage kmPackage = classPart.getKmPackage();
+ KmPackage kmPackage = classPart.toKmPackage();
+ KotlinJvmSignatureExtensionInformation extensionInformation =
+ KotlinJvmSignatureExtensionInformation.readInformationFromMessage(
+ classPart, appView.options());
return new KotlinMultiFileClassPartInfo(
classPart.getFacadeClassName(),
- KotlinPackageInfo.create(kmPackage, clazz, appView, keepByteCode),
+ KotlinPackageInfo.create(kmPackage, clazz, appView, keepByteCode, extensionInformation),
packageName,
metadataVersion);
}
@@ -66,7 +69,8 @@
KmPackage kmPackage = new KmPackage();
boolean rewritten = packageInfo.rewrite(kmPackage, clazz, appView);
return Pair.create(
- Companion.writeMultiFileClassPart(kmPackage, facadeClassName, getCompatibleKotlinInfo(), 0),
+ Companion.writeMultiFileClassPart(kmPackage, facadeClassName, getCompatibleKotlinInfo(), 0)
+ .getAnnotationData(),
rewritten);
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
index 8455829..721cd75 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
@@ -42,7 +42,8 @@
KmPackage kmPackage,
DexClass clazz,
AppView<?> appView,
- Consumer<DexEncodedMethod> keepByteCode) {
+ Consumer<DexEncodedMethod> keepByteCode,
+ KotlinJvmSignatureExtensionInformation extensionInformation) {
Map<String, DexEncodedField> fieldMap = new HashMap<>();
for (DexEncodedField field : clazz.fields()) {
fieldMap.put(toJvmFieldSignature(field.getReference()).asString(), field);
@@ -62,6 +63,7 @@
appView.dexItemFactory(),
appView.reporter(),
keepByteCode,
+ extensionInformation,
originalMembersWithKotlinInfo),
KotlinLocalDelegatedPropertyInfo.create(
JvmExtensionsKt.getLocalDelegatedProperties(kmPackage),
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
index 4449beb..23c7d92 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
@@ -46,11 +46,15 @@
DexClass clazz,
Kotlin kotlin,
AppView<?> appView) {
- KmLambda lambda = syntheticClass.getKmLambda();
+ KmLambda lambda = syntheticClass.toKmLambda();
assert lambda == null || syntheticClass.isLambda();
+ KotlinJvmSignatureExtensionInformation extensionInformation =
+ KotlinJvmSignatureExtensionInformation.readInformationFromMessage(
+ syntheticClass, appView.options());
return new KotlinSyntheticClassInfo(
lambda != null
- ? KotlinLambdaInfo.create(clazz, lambda, appView.dexItemFactory(), appView.reporter())
+ ? KotlinLambdaInfo.create(
+ clazz, lambda, appView.dexItemFactory(), appView.reporter(), extensionInformation)
: null,
getFlavour(clazz, kotlin),
packageName,
@@ -74,13 +78,15 @@
@Override
public Pair<Metadata, Boolean> rewrite(DexClass clazz, AppView<?> appView) {
if (lambda == null) {
- return Pair.create(Companion.writeSyntheticClass(getCompatibleKotlinInfo(), 0), false);
+ return Pair.create(
+ Companion.writeSyntheticClass(getCompatibleKotlinInfo(), 0).getAnnotationData(), false);
}
Box<KmLambda> newLambda = new Box<>();
boolean rewritten = lambda.rewrite(newLambda::set, clazz, appView);
assert newLambda.isSet();
return Pair.create(
- Companion.writeLambda(newLambda.get(), getCompatibleKotlinInfo(), 0), rewritten);
+ Companion.writeLambda(newLambda.get(), getCompatibleKotlinInfo(), 0).getAnnotationData(),
+ rewritten);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/naming/KotlinModuleSynthesizer.java b/src/main/java/com/android/tools/r8/naming/KotlinModuleSynthesizer.java
index 9504a38..fc52598 100644
--- a/src/main/java/com/android/tools/r8/naming/KotlinModuleSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/naming/KotlinModuleSynthesizer.java
@@ -181,7 +181,7 @@
}
return Optional.of(
DataEntryResource.fromBytes(
- writer.write(metadataVersion.get()),
+ writer.write(metadataVersion.get()).getBytes(),
"META-INF/" + moduleName + ".kotlin_module",
Origin.unknown()));
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java
index 218da15..b0dd01c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java
@@ -175,8 +175,10 @@
assertEquals(1, arguments.size());
ArrayValue classes = (ArrayValue) arguments.get("classes");
assertEquals(
- "KClassValue(" + foo.getFinalBinaryName() + ")", classes.getElements().get(0).toString());
+ "KClassValue(className=" + foo.getFinalBinaryName() + ", arrayDimensionCount=0)",
+ classes.getElements().get(0).toString());
assertEquals(
- "KClassValue(" + bar.getFinalBinaryName() + ")", classes.getElements().get(1).toString());
+ "KClassValue(className=" + bar.getFinalBinaryName() + ", arrayDimensionCount=0)",
+ classes.getElements().get(1).toString());
}
}
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
index dc0053b..457e4a2 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
@@ -573,7 +573,7 @@
}
assertTrue(metadata instanceof KotlinClassMetadata.Class);
KotlinClassMetadata.Class kClass = (KotlinClassMetadata.Class) metadata;
- return new FoundKmClassSubject(codeInspector, getDexProgramClass(), kClass.getKmClass());
+ return new FoundKmClassSubject(codeInspector, getDexProgramClass(), kClass.toKmClass());
}
@Override
@@ -594,11 +594,11 @@
|| metadata instanceof KotlinClassMetadata.MultiFileClassPart);
if (metadata instanceof KotlinClassMetadata.FileFacade) {
KotlinClassMetadata.FileFacade kFile = (KotlinClassMetadata.FileFacade) metadata;
- return new FoundKmPackageSubject(codeInspector, getDexProgramClass(), kFile.getKmPackage());
+ return new FoundKmPackageSubject(codeInspector, getDexProgramClass(), kFile.toKmPackage());
} else {
KotlinClassMetadata.MultiFileClassPart kPart =
(KotlinClassMetadata.MultiFileClassPart) metadata;
- return new FoundKmPackageSubject(codeInspector, getDexProgramClass(), kPart.getKmPackage());
+ return new FoundKmPackageSubject(codeInspector, getDexProgramClass(), kPart.toKmPackage());
}
}
diff --git a/third_party/dependencies.tar.gz.sha1 b/third_party/dependencies.tar.gz.sha1
index 9544967..139251d 100644
--- a/third_party/dependencies.tar.gz.sha1
+++ b/third_party/dependencies.tar.gz.sha1
@@ -1 +1 @@
-a8ce32b32965771099a4e91fedf13abfda7ffbed
\ No newline at end of file
+d004917502f1b50bedada4bc5cca457ceb237c87
\ No newline at end of file
diff --git a/third_party/dependencies_new.tar.gz.sha1 b/third_party/dependencies_new.tar.gz.sha1
index 7bf0259..2d9e556 100644
--- a/third_party/dependencies_new.tar.gz.sha1
+++ b/third_party/dependencies_new.tar.gz.sha1
@@ -1 +1 @@
-d5238791ca8a92b1ea3dcd91b013ef41e1b5ca38
\ No newline at end of file
+e2dff12bf95f94797da37f77b274fe222aeda83a
\ No newline at end of file
diff --git a/tools/create_local_maven_with_dependencies.py b/tools/create_local_maven_with_dependencies.py
index c27bd44..500c480 100755
--- a/tools/create_local_maven_with_dependencies.py
+++ b/tools/create_local_maven_with_dependencies.py
@@ -5,8 +5,8 @@
import argparse
import os.path
-import shutil
import subprocess
+import shutil
import sys
import utils
@@ -21,7 +21,7 @@
ASM_VERSION = '9.5'
ESPRESSO_VERSION = '3.0.0'
FASTUTIL_VERSION = '7.2.1'
-KOTLIN_METADATA_VERSION = '0.7.0'
+KOTLIN_METADATA_VERSION = '0.6.2'
KOTLIN_VERSION = '1.8.0'
GUAVA_VERSION = '31.1-jre'
GUAVA_VERSION_NEW = '32.1.2-jre'