Merge commit 'e9634b6c6cd4815a81523975b2b109960be1a8a0' into dev-release
diff --git a/src/test/java/com/android/tools/r8/debuginfo/OverloadWithNoLineNumberTest.java b/src/test/java/com/android/tools/r8/debuginfo/OverloadWithNoLineNumberTest.java
new file mode 100644
index 0000000..47f6e4b
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/debuginfo/OverloadWithNoLineNumberTest.java
@@ -0,0 +1,102 @@
+// Copyright (c) 2022, 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.debuginfo;
+
+import static com.android.tools.r8.naming.retrace.StackTrace.isSame;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
+import com.android.tools.r8.debuginfo.testclasses.SimpleCallChainClassWithOverloads;
+import com.android.tools.r8.naming.retrace.StackTrace;
+import com.android.tools.r8.naming.retrace.StackTrace.StackTraceLine;
+import com.android.tools.r8.transformers.ClassFileTransformer.MethodPredicate;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class OverloadWithNoLineNumberTest extends TestBase {
+
+ private final String SOURCE_FILE_NAME = "SimpleCallChainClassWithOverloads.java";
+
+ @Parameter() public TestParameters parameters;
+
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
+ }
+
+ @Test
+ public void testR8() throws Exception {
+ testForR8(parameters.getBackend())
+ .addProgramClassFileData(
+ transformer(SimpleCallChainClassWithOverloads.class)
+ .removeLineNumberTable(MethodPredicate.onName("test"))
+ .transform())
+ .setMinApi(parameters.getApiLevel())
+ .addKeepMainRule(SimpleCallChainClassWithOverloads.class)
+ .addKeepClassAndMembersRules(SimpleCallChainClassWithOverloads.class)
+ .addKeepAttributeLineNumberTable()
+ .run(parameters.getRuntime(), SimpleCallChainClassWithOverloads.class)
+ .assertFailureWithErrorThatThrows(RuntimeException.class)
+ .inspectStackTrace(
+ (stackTrace, inspector) -> {
+ StackTraceLine mainLine =
+ StackTraceLine.builder()
+ .setClassName(typeName(SimpleCallChainClassWithOverloads.class))
+ .setMethodName("main")
+ .setFileName(SOURCE_FILE_NAME)
+ .setLineNumber(10)
+ .build();
+ if (parameters.isCfRuntime()
+ || parameters.getDexRuntimeVersion().isOlderThan(Version.V8_1_0)) {
+ StackTraceLine testStackTraceLine =
+ StackTraceLine.builder()
+ .setClassName(typeName(SimpleCallChainClassWithOverloads.class))
+ .setMethodName("test")
+ .setFileName(SOURCE_FILE_NAME)
+ .build();
+ assertThat(
+ stackTrace,
+ isSame(
+ StackTrace.builder()
+ // TODO(b/251677184): Stack trace lines should still be distinguishable
+ // even if there are no original line numbers to map back two.
+ .add(testStackTraceLine)
+ .add(testStackTraceLine)
+ .add(mainLine)
+ .build()));
+ } else {
+ assertThat(
+ stackTrace,
+ isSame(
+ StackTrace.builder()
+ // TODO(b/251677184): Strange that we are able to distinguish when using
+ // pc mapping.
+ .add(
+ StackTraceLine.builder()
+ .setClassName(typeName(SimpleCallChainClassWithOverloads.class))
+ .setMethodName("test")
+ .setFileName(SOURCE_FILE_NAME)
+ .setLineNumber(11)
+ .build())
+ .add(
+ StackTraceLine.builder()
+ .setClassName(typeName(SimpleCallChainClassWithOverloads.class))
+ .setMethodName("test")
+ .setFileName(SOURCE_FILE_NAME)
+ .setLineNumber(4)
+ .build())
+ .add(mainLine)
+ .build()));
+ }
+ });
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/debuginfo/testclasses/SimpleCallChainClassWithOverloads.java b/src/test/java/com/android/tools/r8/debuginfo/testclasses/SimpleCallChainClassWithOverloads.java
new file mode 100644
index 0000000..e70ba73
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/debuginfo/testclasses/SimpleCallChainClassWithOverloads.java
@@ -0,0 +1,22 @@
+// Copyright (c) 2022, 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.debuginfo.testclasses;
+
+public class SimpleCallChainClassWithOverloads {
+
+ public static void main(String[] args) {
+ test();
+ }
+
+ public static void test() {
+ test(System.currentTimeMillis());
+ }
+
+ public static void test(long value) {
+ if (value > 0) {
+ throw new RuntimeException("Hello World!");
+ }
+ }
+}
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 d3e2677..9fd2a2e 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
@@ -5,6 +5,7 @@
package com.android.tools.r8.kotlin.metadata;
import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_4_20;
+import static com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion.KOTLINC_1_7_0;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -129,11 +130,19 @@
.setOutputPath(temp.newFolder().toPath())
.compileRaw();
Assert.assertEquals(1, compileResult.exitCode);
- assertThat(
- compileResult.stderr,
- containsString(
- "unsupported [reference to the synthetic extension property for a Java get/set"
- + " method]"));
+ if (kotlinParameters.isNewerThan(KOTLINC_1_7_0)) {
+ assertThat(
+ compileResult.stderr,
+ containsString(
+ "the feature \"references to synthetic java properties\" is only available since"
+ + " language version 1.9"));
+ } else {
+ assertThat(
+ compileResult.stderr,
+ containsString(
+ "unsupported [reference to the synthetic extension property for a Java get/set"
+ + " method]"));
+ }
}
private void inspectMetadata(CodeInspector inspector) {
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java b/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
index db76685..9d9d7a4 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceStackTraceFunctionalCompositionTest.java
@@ -180,10 +180,9 @@
comparePartitionedStackTraces(originalPartitions, firstRoundPartitions);
Pair<Path, Path> d8OfR8ofR8 = compileWithD8(r8OfR8.getFirst(), r8OfR8.getSecond());
- List<String> retracedSecondLevelStackTraces =
- retrace(d8OfR8ofR8.getSecond(), generateStackTraces(d8OfR8ofR8.getFirst()));
- Map<String, List<String>> secondRoundPartitions =
- partitionStacktraces(retracedSecondLevelStackTraces);
+ List<String> d8StackTraces = generateStackTraces(d8OfR8ofR8.getFirst());
+ List<String> secondRoundStackTraces = retrace(d8OfR8ofR8.getSecond(), d8StackTraces);
+ Map<String, List<String>> secondRoundPartitions = partitionStacktraces(secondRoundStackTraces);
comparePartitionedStackTraces(originalPartitions, secondRoundPartitions);
}
diff --git a/tools/download_kotlin_dev.py b/tools/download_kotlin_dev.py
index 5d2696a..3bcf9b7 100755
--- a/tools/download_kotlin_dev.py
+++ b/tools/download_kotlin_dev.py
@@ -72,6 +72,9 @@
download_and_save(
JETBRAINS_KOTLIN_MAVEN_URL + "kotlin-reflect/{0}/kotlin-reflect-{0}.jar"
.format(top_most_version_and_build), kotlinc_lib, "kotlin-reflect.jar")
+ download_and_save(
+ JETBRAINS_KOTLIN_MAVEN_URL + "kotlin-script-runtime/{0}/kotlin-script-runtime-{0}.jar"
+ .format(top_most_version_and_build), kotlinc_lib, "kotlin-script-runtime.jar")
def download_and_save(url, path, name):