Merge commit '093b16e1dc27d179ebb5a6bf89b6eaab5c8ecbe5' into dev-release
Change-Id: I7129a02c9ee7d64f97b51a68004b06744c2df954
diff --git a/build.gradle b/build.gradle
index 501df47..7f2f61d 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.6.2'
+ kotlinExtMetadataJVMVersion = '0.7.0'
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 21c4b19..c0412fa 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -301,7 +301,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.6.2"
+ const val kotlinMetadataVersion = "0.7.0"
const val mockito = "2.10.0"
const val smaliVersion = "3.0.3"
}
diff --git a/d8_r8/keepanno/build.gradle.kts b/d8_r8/keepanno/build.gradle.kts
index 56d1ea0..376472a 100644
--- a/d8_r8/keepanno/build.gradle.kts
+++ b/d8_r8/keepanno/build.gradle.kts
@@ -22,10 +22,16 @@
}
tasks {
+ val keepAnnoAnnotationsJar by registering(Jar::class) {
+ dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+ from(sourceSets.main.get().output)
+ include("com/android/tools/r8/keepanno/annotations/*")
+ destinationDirectory.set(getRoot().resolveAll("build", "libs"))
+ archiveFileName.set("keepanno-annotations.jar")
+ }
+
val keepAnnoJar by registering(Jar::class) {
dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
from(sourceSets.main.get().output)
- destinationDirectory.set(getRoot().resolveAll("build", "libs"))
- archiveFileName.set("keepanno-annotations.jar")
}
}
diff --git a/d8_r8/main/build.gradle.kts b/d8_r8/main/build.gradle.kts
index f5b75b8..84edbbc 100644
--- a/d8_r8/main/build.gradle.kts
+++ b/d8_r8/main/build.gradle.kts
@@ -123,7 +123,8 @@
from(sourceSets.main.get().output)
from(keepAnnoJarTask.outputs.files.map(::zipTree))
from(resourceShrinkerJarTask.outputs.files.map(::zipTree))
- from(consolidatedLicense)
+ from(getRoot().resolve("LICENSE"))
+ entryCompression = ZipEntryCompression.STORED
manifest {
attributes["Main-Class"] = "com.android.tools.r8.SwissArmyKnife"
}
@@ -133,11 +134,12 @@
archiveFileName.set("r8-full-exclude-deps.jar")
}
- val depsJar by registering(Jar::class) {
+ val depsJar by registering(Zip::class) {
dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
dependsOn(resourceShrinkerDepsTask)
from(mainJarDependencies().map(::zipTree))
from(resourceShrinkerDepsTask.outputs.files.map(::zipTree))
+ from(consolidatedLicense)
exclude("**/module-info.class")
exclude("**/*.kotlin_metadata")
exclude("META-INF/*.kotlin_module")
@@ -154,15 +156,22 @@
exclude("README.md")
exclude("javax/annotation/**")
exclude("wireless/**")
- manifest {}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
archiveFileName.set("deps.jar")
}
- val r8WithRelocatedDeps by registering(Exec::class) {
+
+val swissArmyKnifeWithoutLicense by registering(Zip::class) {
dependsOn(swissArmyKnife)
+ from(swissArmyKnife.get().outputs.files.map(::zipTree))
+ exclude("LICENSE")
+ archiveFileName.set("swiss-army-no-license.jar")
+}
+
+val r8WithRelocatedDeps by registering(Exec::class) {
dependsOn(depsJar)
- val swissArmy = swissArmyKnife.get().outputs.getFiles().getSingleFile()
+ dependsOn(swissArmyKnifeWithoutLicense)
+ val swissArmy = swissArmyKnifeWithoutLicense.get().outputs.getFiles().getSingleFile()
val deps = depsJar.get().outputs.files.getSingleFile()
inputs.files(listOf(swissArmy, deps))
val output = getRoot().resolveAll("build", "libs", "r8.jar")
diff --git a/infra/config/global/generated/cr-buildbucket.cfg b/infra/config/global/generated/cr-buildbucket.cfg
index 4cac940..0e4e8a2 100644
--- a/infra/config/global/generated/cr-buildbucket.cfg
+++ b/infra/config/global/generated/cr-buildbucket.cfg
@@ -22,6 +22,7 @@
name: "archive"
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
+ dimensions: "archive:true"
dimensions: "cpu:x86-64"
dimensions: "os:Ubuntu-20.04"
dimensions: "pool:luci.r8.ci"
@@ -50,6 +51,7 @@
name: "archive_release"
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
+ dimensions: "archive:true"
dimensions: "cpu:x86-64"
dimensions: "os:Ubuntu-20.04"
dimensions: "pool:luci.r8.ci"
@@ -79,6 +81,7 @@
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
dimensions: "cpu:x86-64"
+ dimensions: "normal:true"
dimensions: "os:Ubuntu-20.04"
dimensions: "pool:luci.r8.ci"
exe {
@@ -107,6 +110,7 @@
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
dimensions: "cpu:x86-64"
+ dimensions: "normal:true"
dimensions: "os:Ubuntu-20.04"
dimensions: "pool:luci.r8.ci"
exe {
@@ -143,6 +147,7 @@
name: "lib_desugar-archive-jdk11"
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
+ dimensions: "archive:true"
dimensions: "cpu:x86-64"
dimensions: "os:Ubuntu-20.04"
dimensions: "pool:luci.r8.ci"
@@ -176,6 +181,7 @@
name: "lib_desugar-archive-jdk11-legacy"
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
+ dimensions: "archive:true"
dimensions: "cpu:x86-64"
dimensions: "os:Ubuntu-20.04"
dimensions: "pool:luci.r8.ci"
@@ -207,6 +213,7 @@
name: "lib_desugar-archive-jdk8"
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
+ dimensions: "archive:true"
dimensions: "cpu:x86-64"
dimensions: "os:Ubuntu-20.04"
dimensions: "pool:luci.r8.ci"
@@ -1514,6 +1521,7 @@
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
dimensions: "cpu:x86-64"
+ dimensions: "normal:true"
dimensions: "os:Ubuntu-20.04"
dimensions: "pool:luci.r8.ci"
exe {
@@ -1550,6 +1558,7 @@
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
dimensions: "cpu:x86-64"
+ dimensions: "normal:true"
dimensions: "os:Ubuntu-20.04"
dimensions: "pool:luci.r8.ci"
exe {
@@ -1658,6 +1667,7 @@
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
dimensions: "cpu:x86-64"
+ dimensions: "normal:true"
dimensions: "os:Ubuntu-20.04"
dimensions: "pool:luci.r8.ci"
exe {
@@ -1691,6 +1701,7 @@
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
dimensions: "cpu:x86-64"
+ dimensions: "normal:true"
dimensions: "os:Ubuntu-20.04"
dimensions: "pool:luci.r8.ci"
exe {
@@ -1724,6 +1735,7 @@
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
dimensions: "cpu:x86-64"
+ dimensions: "normal:true"
dimensions: "os:Ubuntu-20.04"
dimensions: "pool:luci.r8.ci"
exe {
@@ -1752,6 +1764,7 @@
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
dimensions: "cpu:x86-64"
+ dimensions: "normal:true"
dimensions: "os:Windows-10"
dimensions: "pool:luci.r8.ci"
exe {
@@ -1786,6 +1799,7 @@
swarming_host: "chrome-swarming.appspot.com"
swarming_tags: "vpython:native-python-wrapper"
dimensions: "cpu:x86-64"
+ dimensions: "normal:true"
dimensions: "os:Windows-10"
dimensions: "pool:luci.r8.ci"
exe {
diff --git a/infra/config/global/main.star b/infra/config/global/main.star
index 9013087..86bbec8 100755
--- a/infra/config/global/main.star
+++ b/infra/config/global/main.star
@@ -168,7 +168,12 @@
"--archive_failures"
]
-def get_dimensions(windows=False, internal=False, normal=False, smali=False):
+def get_dimensions(windows=False, internal=False, archive=False):
+ # We use the following setup:
+ # windows -> always windows machine
+ # internal -> always internal, single small, machine
+ # archie -> archive or normal machines (normal machines set archive)
+ # all_other -> normal linux machines
dimensions = {
"cpu" : "x86-64",
"pool" : "luci.r8.ci"
@@ -179,7 +184,9 @@
dimensions["os"] = "Ubuntu-20.04"
if internal:
dimensions["internal"] = "true"
- if normal:
+ elif archive:
+ dimensions["archive"] = "true"
+ else:
dimensions["normal"] = "true"
return dimensions
@@ -224,7 +231,7 @@
max_concurrent_invocations = 1,
category=None,
release_trigger=None):
- dimensions = dimensions if dimensions else get_dimensions(normal=True)
+ dimensions = dimensions if dimensions else get_dimensions()
for name in [name, name + "_release"]:
r8_builder(
name = name,
@@ -273,7 +280,7 @@
r8_builder(
name,
category = "library_desugar" if desugar else "archive",
- dimensions = get_dimensions(),
+ dimensions = get_dimensions(archive=True),
triggering_policy = scheduler.policy(
kind = scheduler.GREEDY_BATCHING_KIND,
max_batch_size = 1,
@@ -309,7 +316,7 @@
name = "linux-dex_default-new_gradle",
execution_timeout = time.hour * 6,
expiration_timeout = time.hour * 35,
- dimensions = get_dimensions(normal=True),
+ dimensions = get_dimensions(),
max_concurrent_invocations = 1,
properties = {
"test_options" : ["--runtimes=dex-default", "--command_cache_dir=/tmp/ccache", "--new-gradle"] + common_test_options,
@@ -455,7 +462,7 @@
"smali",
category = "aux",
trigger = False,
- dimensions = get_dimensions(smali=True),
+ dimensions = get_dimensions(),
triggering_policy = scheduler.policy(
kind = scheduler.GREEDY_BATCHING_KIND,
max_concurrent_invocations = 1,
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 bc61463..66c4f2e 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
@@ -125,10 +125,7 @@
Consumer<DexEncodedMethod> keepByteCode) {
DexItemFactory factory = appView.dexItemFactory();
Reporter reporter = appView.reporter();
- KmClass kmClass = metadata.toKmClass();
- KotlinJvmSignatureExtensionInformation extensionInformation =
- KotlinJvmSignatureExtensionInformation.readInformationFromMessage(
- metadata, appView.options());
+ KmClass kmClass = metadata.getKmClass();
Map<String, DexEncodedField> fieldMap = new HashMap<>();
for (DexEncodedField field : hostClass.fields()) {
fieldMap.put(toJvmFieldSignature(field.getReference()).asString(), field);
@@ -138,14 +135,11 @@
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, readConstructorSignature);
+ KotlinConstructorInfo.create(kmConstructor, factory, reporter);
JvmMethodSignature signature = JvmExtensionsKt.getSignature(kmConstructor);
if (signature != null) {
DexEncodedMethod method = methodMap.get(signature.asString());
@@ -166,7 +160,6 @@
factory,
reporter,
keepByteCode,
- extensionInformation,
originalMembersWithKotlinInfo);
KotlinTypeReference anonymousObjectOrigin = getAnonymousObjectOrigin(kmClass, factory);
boolean nameCanBeDeducedFromClassOrOrigin =
@@ -454,7 +447,7 @@
localDelegatedProperties.rewrite(
JvmExtensionsKt.getLocalDelegatedProperties(kmClass)::add, appView);
return Pair.create(
- Companion.writeClass(kmClass, getCompatibleKotlinInfo(), 0).getAnnotationData(),
+ Companion.writeClass(kmClass, getCompatibleKotlinInfo(), 0),
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 d63d8e7..849a6fc 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 annotationData = kMetadata.getAnnotationData();
- String packageName = annotationData.pn();
- int[] metadataVersion = annotationData.mv();
+ Metadata metadata = kMetadata.getAnnotationData$kotlinx_metadata_jvm();
+ String packageName = metadata.pn();
+ int[] metadataVersion = metadata.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: " + annotationData.k());
+ throw new MetadataError("unsupported 'k' value: " + metadata.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 c8dac29..a60cf6b 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java
@@ -41,18 +41,12 @@
}
public static KotlinConstructorInfo create(
- KmConstructor kmConstructor,
- DexItemFactory factory,
- Reporter reporter,
- boolean readConstructorSignature) {
+ KmConstructor kmConstructor, DexItemFactory factory, Reporter reporter) {
return new KotlinConstructorInfo(
kmConstructor.getFlags(),
KotlinValueParameterInfo.create(kmConstructor.getValueParameters(), factory, reporter),
KotlinVersionRequirementInfo.create(kmConstructor.getVersionRequirements()),
- readConstructorSignature
- ? KotlinJvmMethodSignatureInfo.create(
- JvmExtensionsKt.getSignature(kmConstructor), factory)
- : null);
+ KotlinJvmMethodSignatureInfo.create(JvmExtensionsKt.getSignature(kmConstructor), factory));
}
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 0c159d2..e670bb5 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
@@ -59,10 +59,8 @@
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) {
@@ -70,11 +68,7 @@
continue;
}
KotlinFunctionInfo kotlinFunctionInfo =
- KotlinFunctionInfo.create(
- kmFunction,
- factory,
- reporter,
- extensionInformation.hasJvmMethodSignatureExtensionForFunction(functionCounter++));
+ KotlinFunctionInfo.create(kmFunction, factory, reporter);
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 59e482f..228aee9 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java
@@ -38,12 +38,9 @@
DexClass clazz,
AppView<?> appView,
Consumer<DexEncodedMethod> keepByteCode) {
- KmPackage kmPackage = kmFileFacade.toKmPackage();
- KotlinJvmSignatureExtensionInformation extensionInformation =
- KotlinJvmSignatureExtensionInformation.readInformationFromMessage(
- kmFileFacade, appView.options());
+ KmPackage kmPackage = kmFileFacade.getKmPackage();
return new KotlinFileFacadeInfo(
- KotlinPackageInfo.create(kmPackage, clazz, appView, keepByteCode, extensionInformation),
+ KotlinPackageInfo.create(kmPackage, clazz, appView, keepByteCode),
packageName,
metadataVersion);
}
@@ -63,8 +60,7 @@
KmPackage kmPackage = new KmPackage();
boolean rewritten = packageInfo.rewrite(kmPackage, clazz, appView);
return Pair.create(
- Companion.writeFileFacade(kmPackage, getCompatibleKotlinInfo(), 0).getAnnotationData(),
- rewritten);
+ Companion.writeFileFacade(kmPackage, getCompatibleKotlinInfo(), 0), 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 351acc9..1e387ff 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFunctionInfo.java
@@ -79,10 +79,7 @@
}
static KotlinFunctionInfo create(
- KmFunction kmFunction,
- DexItemFactory factory,
- Reporter reporter,
- boolean readMethodSignature) {
+ KmFunction kmFunction, DexItemFactory factory, Reporter reporter) {
boolean isCrossInline = false;
List<KotlinValueParameterInfo> valueParameters =
KotlinValueParameterInfo.create(kmFunction.getValueParameters(), factory, reporter);
@@ -99,16 +96,14 @@
KotlinTypeInfo.create(kmFunction.getReceiverParameterType(), factory, reporter),
valueParameters,
KotlinTypeParameterInfo.create(kmFunction.getTypeParameters(), factory, reporter),
- readMethodSignature
- ? KotlinJvmMethodSignatureInfo.create(JvmExtensionsKt.getSignature(kmFunction), factory)
- : null,
+ KotlinJvmMethodSignatureInfo.create(JvmExtensionsKt.getSignature(kmFunction), factory),
getlambdaClassOrigin(kmFunction, factory),
KotlinVersionRequirementInfo.create(kmFunction.getVersionRequirements()),
KotlinContractInfo.create(kmFunction.getContract(), factory, reporter),
isCrossInline,
ListUtils.map(
kmFunction.getContextReceiverTypes(),
- contextRecieverType -> KotlinTypeInfo.create(contextRecieverType, factory, reporter)));
+ contextReceiverType -> KotlinTypeInfo.create(contextReceiverType, 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
deleted file mode 100644
index 98ebaed..0000000
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinJvmSignatureExtensionInformation.java
+++ /dev/null
@@ -1,175 +0,0 @@
-// 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 9900e81..6f04aba 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
@@ -31,21 +31,13 @@
}
static KotlinLambdaInfo create(
- DexClass clazz,
- KmLambda lambda,
- DexItemFactory factory,
- Reporter reporter,
- KotlinJvmSignatureExtensionInformation extensionInformation) {
+ DexClass clazz, KmLambda lambda, DexItemFactory factory, Reporter reporter) {
if (lambda == null) {
assert false;
return null;
}
KotlinFunctionInfo kotlinFunctionInfo =
- KotlinFunctionInfo.create(
- lambda.function,
- factory,
- reporter,
- extensionInformation.hasJvmMethodSignatureExtensionForFunction(0));
+ KotlinFunctionInfo.create(lambda.function, factory, reporter);
JvmMethodSignature signature = JvmExtensionsKt.getSignature(lambda.function);
if (signature != null) {
for (DexEncodedMethod method : clazz.methods()) {
@@ -61,8 +53,7 @@
boolean rewrite(Consumer<KmLambda> consumer, DexClass clazz, AppView<?> appView) {
KmLambda kmLambda = consume(new KmLambda(), consumer);
if (!hasBacking) {
- function.rewrite(kmLambda::setFunction, null, appView);
- return true;
+ return function.rewrite(kmLambda::setFunction, null, appView);
}
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 6c01e1b..d34a84f 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();
+ Metadata annotationData = classMetadata.getAnnotationData$kotlinx_metadata_jvm();
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 9276239..a06a9a2 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.toKmClass());
+ KotlinMetadataWriter.appendKmClass(newIndent, sb, kMetadata.getKmClass());
});
return sb.toString();
}
@@ -102,7 +102,7 @@
"Metadata.FileFacade",
sb,
newIndent -> {
- KotlinMetadataWriter.appendKmPackage(newIndent, sb, kMetadata.toKmPackage());
+ KotlinMetadataWriter.appendKmPackage(newIndent, sb, kMetadata.getKmPackage());
});
return sb.toString();
}
@@ -125,7 +125,7 @@
newIndent -> {
KotlinMetadataWriter.appendKeyValue(
newIndent, "facadeClassName", sb, kMetadata.getFacadeClassName());
- KotlinMetadataWriter.appendKmPackage(newIndent, sb, kMetadata.toKmPackage());
+ KotlinMetadataWriter.appendKmPackage(newIndent, sb, kMetadata.getKmPackage());
});
return sb.toString();
}
@@ -139,7 +139,7 @@
sb,
newIndent -> {
try {
- KmLambda kmLambda = kMetadata.toKmLambda();
+ KmLambda kmLambda = kMetadata.getKmLambda();
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 7f0b67f..9757ef4 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassFacadeInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassFacadeInfo.java
@@ -71,8 +71,7 @@
null);
}
return Pair.create(
- Companion.writeMultiFileClassFacade(partClassNameStrings, getCompatibleKotlinInfo(), 0)
- .getAnnotationData(),
+ Companion.writeMultiFileClassFacade(partClassNameStrings, getCompatibleKotlinInfo(), 0),
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 a51defc..a317760 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java
@@ -43,13 +43,10 @@
DexClass clazz,
AppView<?> appView,
Consumer<DexEncodedMethod> keepByteCode) {
- KmPackage kmPackage = classPart.toKmPackage();
- KotlinJvmSignatureExtensionInformation extensionInformation =
- KotlinJvmSignatureExtensionInformation.readInformationFromMessage(
- classPart, appView.options());
+ KmPackage kmPackage = classPart.getKmPackage();
return new KotlinMultiFileClassPartInfo(
classPart.getFacadeClassName(),
- KotlinPackageInfo.create(kmPackage, clazz, appView, keepByteCode, extensionInformation),
+ KotlinPackageInfo.create(kmPackage, clazz, appView, keepByteCode),
packageName,
metadataVersion);
}
@@ -69,8 +66,7 @@
KmPackage kmPackage = new KmPackage();
boolean rewritten = packageInfo.rewrite(kmPackage, clazz, appView);
return Pair.create(
- Companion.writeMultiFileClassPart(kmPackage, facadeClassName, getCompatibleKotlinInfo(), 0)
- .getAnnotationData(),
+ Companion.writeMultiFileClassPart(kmPackage, facadeClassName, getCompatibleKotlinInfo(), 0),
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 721cd75..8455829 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
@@ -42,8 +42,7 @@
KmPackage kmPackage,
DexClass clazz,
AppView<?> appView,
- Consumer<DexEncodedMethod> keepByteCode,
- KotlinJvmSignatureExtensionInformation extensionInformation) {
+ Consumer<DexEncodedMethod> keepByteCode) {
Map<String, DexEncodedField> fieldMap = new HashMap<>();
for (DexEncodedField field : clazz.fields()) {
fieldMap.put(toJvmFieldSignature(field.getReference()).asString(), field);
@@ -63,7 +62,6 @@
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 23c7d92..4449beb 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
@@ -46,15 +46,11 @@
DexClass clazz,
Kotlin kotlin,
AppView<?> appView) {
- KmLambda lambda = syntheticClass.toKmLambda();
+ KmLambda lambda = syntheticClass.getKmLambda();
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(), extensionInformation)
+ ? KotlinLambdaInfo.create(clazz, lambda, appView.dexItemFactory(), appView.reporter())
: null,
getFlavour(clazz, kotlin),
packageName,
@@ -78,15 +74,13 @@
@Override
public Pair<Metadata, Boolean> rewrite(DexClass clazz, AppView<?> appView) {
if (lambda == null) {
- return Pair.create(
- Companion.writeSyntheticClass(getCompatibleKotlinInfo(), 0).getAnnotationData(), false);
+ return Pair.create(Companion.writeSyntheticClass(getCompatibleKotlinInfo(), 0), 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).getAnnotationData(),
- rewritten);
+ Companion.writeLambda(newLambda.get(), getCompatibleKotlinInfo(), 0), 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 fc52598..9504a38 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()).getBytes(),
+ writer.write(metadataVersion.get()),
"META-INF/" + moduleName + ".kotlin_module",
Origin.unknown()));
}
diff --git a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
index f272a71..41a3ecc 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
@@ -283,7 +283,14 @@
Function<DexMethod, MethodSignature> getOriginalMethodSignature =
m ->
signatures.computeIfAbsent(
- m, key -> MethodSignature.fromDexMethod(m, m.holder != clazz.getType()));
+ m,
+ key -> {
+ DexType holder = key.holder;
+ boolean withQualifiedName =
+ !holder.isIdenticalTo(clazz.getType())
+ && !holder.isIdenticalTo(originalType);
+ return MethodSignature.fromDexMethod(m, withQualifiedName);
+ });
// Check if mapped position is an outline
DexMethod outlineMethod = getOutlineMethod(mappedPositions.get(0).getPosition());
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 b0dd01c..218da15 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,10 +175,8 @@
assertEquals(1, arguments.size());
ArrayValue classes = (ArrayValue) arguments.get("classes");
assertEquals(
- "KClassValue(className=" + foo.getFinalBinaryName() + ", arrayDimensionCount=0)",
- classes.getElements().get(0).toString());
+ "KClassValue(" + foo.getFinalBinaryName() + ")", classes.getElements().get(0).toString());
assertEquals(
- "KClassValue(className=" + bar.getFinalBinaryName() + ", arrayDimensionCount=0)",
- classes.getElements().get(1).toString());
+ "KClassValue(" + bar.getFinalBinaryName() + ")", 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 457e4a2..dc0053b 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.toKmClass());
+ return new FoundKmClassSubject(codeInspector, getDexProgramClass(), kClass.getKmClass());
}
@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.toKmPackage());
+ return new FoundKmPackageSubject(codeInspector, getDexProgramClass(), kFile.getKmPackage());
} else {
KotlinClassMetadata.MultiFileClassPart kPart =
(KotlinClassMetadata.MultiFileClassPart) metadata;
- return new FoundKmPackageSubject(codeInspector, getDexProgramClass(), kPart.toKmPackage());
+ return new FoundKmPackageSubject(codeInspector, getDexProgramClass(), kPart.getKmPackage());
}
}
diff --git a/third_party/dependencies.tar.gz.sha1 b/third_party/dependencies.tar.gz.sha1
index cea55a6..8d3ba4e 100644
--- a/third_party/dependencies.tar.gz.sha1
+++ b/third_party/dependencies.tar.gz.sha1
@@ -1 +1 @@
-3bfa0f5611e2f0e4beed4287cb5f9f9d3458c61b
\ No newline at end of file
+a8ce32b32965771099a4e91fedf13abfda7ffbed
diff --git a/third_party/dependencies_new.tar.gz.sha1 b/third_party/dependencies_new.tar.gz.sha1
index 621dd6c..01f988b 100644
--- a/third_party/dependencies_new.tar.gz.sha1
+++ b/third_party/dependencies_new.tar.gz.sha1
@@ -1 +1 @@
-4fad35bd436967989be01124889a973aee24ffa1
\ No newline at end of file
+d5238791ca8a92b1ea3dcd91b013ef41e1b5ca38
diff --git a/tools/archive.py b/tools/archive.py
index 8b136ec..ce558e9 100755
--- a/tools/archive.py
+++ b/tools/archive.py
@@ -174,7 +174,7 @@
if (not options.skip_gradle_build):
if (new_gradle):
gradle.RunGradle([
- ':keepanno:keepAnnoJar',
+ ':keepanno:keepAnnoAnnotationsJar',
':main:consolidatedLicense',
':main:r8WithRelocatedDeps',
':main:swissArmyKnife',
diff --git a/tools/compiledump.py b/tools/compiledump.py
index aaca981..6474441 100755
--- a/tools/compiledump.py
+++ b/tools/compiledump.py
@@ -29,6 +29,11 @@
help='Dump file or directory to compile',
default=None)
parser.add_argument(
+ '-o',
+ '--output',
+ help='File to output (defaults to out.jar in temp)',
+ default=None)
+ parser.add_argument(
'--temp',
help='Temp directory to extract the dump to, allows you to rerun the command'
' more easily in the terminal with changes',
@@ -325,6 +330,8 @@
return []
def determine_output(args, temp):
+ if (args.output):
+ return args.output
return os.path.join(temp, 'out.jar')
def determine_min_api(args, build_properties):
diff --git a/tools/create_local_maven_with_dependencies.py b/tools/create_local_maven_with_dependencies.py
index f9a0383..76caf6b 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 subprocess
import shutil
+import subprocess
import sys
import utils
@@ -24,7 +24,7 @@
ASM_VERSION = '9.5'
ESPRESSO_VERSION = '3.0.0'
FASTUTIL_VERSION = '7.2.1'
-KOTLIN_METADATA_VERSION = '0.6.2'
+KOTLIN_METADATA_VERSION = '0.7.0'
KOTLIN_VERSION = '1.8.0'
GUAVA_VERSION = '31.1-jre'
GUAVA_VERSION_NEW = '32.1.2-jre'