Merge commit '022dc79967baae9cabee9900da2740526af1f153' into dev-release
Change-Id: I7c949c25e45cb6359ca40cec5a05c63f38dabfb9
diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index 2f81edc..2bd2638 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -25,8 +25,9 @@
val r8WithRelocatedDepsTask = projectTask("main", "r8WithRelocatedDeps")
val mainSourcesTask = projectTask("main", "sourcesJar")
val resourceShrinkerSourcesTask = projectTask("resourceshrinker", "sourcesJar")
+val javaTestBaseJarTask = projectTask("testbase", "testJar")
+val javaTestBaseDepsJar = projectTask("testbase", "depsJar")
val java8TestJarTask = projectTask("tests_java_8", "testJar")
-val java8TestsDepsJarTask = projectTask("tests_java_8", "depsJar")
val bootstrapTestsDepsJarTask = projectTask("tests_bootstrap", "depsJar")
val testsJava8SourceSetDependenciesTask = projectTask("tests_java_8", "sourceSetDependencyTask")
@@ -62,27 +63,39 @@
}
val packageTestDeps by registering(Jar::class) {
- dependsOn(bootstrapTestsDepsJarTask, java8TestsDepsJarTask)
+ dependsOn(bootstrapTestsDepsJarTask, javaTestBaseDepsJar)
from(bootstrapTestsDepsJarTask.outputs.getFiles().map(::zipTree))
- from(java8TestsDepsJarTask.outputs.getFiles().map(::zipTree))
+ from(javaTestBaseDepsJar.outputs.getFiles().map(::zipTree))
exclude("META-INF/*.kotlin_module", "**/*.kotlin_metadata")
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
destinationDirectory.set(getRoot().resolveAll("build", "libs"))
archiveFileName.set("test_deps_all.jar")
}
- // When testing R8 lib with relocated deps we must relocate kotlinx.metadata in the tests, since
- // types from kotlinx.metadata are used on the R8 main/R8 test boundary.
- //
- // This is not needed when testing R8 lib excluding deps since we simply include the deps on the
- // classpath at runtime.
- val relocateTestsForR8LibWithRelocatedDeps by registering(Exec::class) {
- dependsOn(packageTests, r8WithRelocatedDepsTask)
- val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
- val testJar = packageTests.getSingleOutputFile()
- inputs.files(r8WithRelocatedDepsJar, testJar)
- val outputJar = file(Paths.get("build", "libs", "r8tests-relocated.jar"))
+ val packageTestBase by registering(Jar::class) {
+ dependsOn(javaTestBaseJarTask)
+ from(javaTestBaseJarTask.outputs.files.map(::zipTree))
+ exclude("META-INF/*.kotlin_module", "**/*.kotlin_metadata")
+ destinationDirectory.set(getRoot().resolveAll("build", "libs"))
+ archiveFileName.set("r8test_base.jar")
+ }
+
+ val packageTestBaseExcludeKeep by registering(Jar::class) {
+ dependsOn(packageTestBase)
+ from(zipTree(packageTestBase.getSingleOutputFile()))
+ // TODO(b/328353718): we have com.android.tools.r8.Keep in both test_base and main
+ exclude("com/android/tools/r8/Keep.class")
+ archiveFileName.set("r8test_base_no_keep.jar")
+ }
+
+
+ fun Exec.executeRelocator(jarProvider: TaskProvider<*>, artifactName: String) {
+ dependsOn(r8WithRelocatedDepsTask, jarProvider)
+ val outputJar = file(Paths.get("build", "libs", artifactName))
outputs.file(outputJar)
+ val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
+ val testJar = jarProvider.getSingleOutputFile()
+ inputs.files(r8WithRelocatedDepsJar, testJar)
commandLine = baseCompilerCommandLine(
r8WithRelocatedDepsJar,
"relocator",
@@ -94,28 +107,37 @@
"kotlinx.metadata.**->com.android.tools.r8.jetbrains.kotlinx.metadata"))
}
+ // When testing R8 lib with relocated deps we must relocate kotlinx.metadata in the tests, since
+ // types from kotlinx.metadata are used on the R8 main/R8 test boundary.
+ //
+ // This is not needed when testing R8 lib excluding deps since we simply include the deps on the
+ // classpath at runtime.
+ val relocateTestsForR8LibWithRelocatedDeps by registering(Exec::class) {
+ executeRelocator(packageTests, "r8tests-relocated.jar")
+ }
+
+ val relocateTestBaseForR8LibWithRelocatedDeps by registering(Exec::class) {
+ executeRelocator(packageTestBase, "r8testbase-relocated.jar")
+ }
+
fun Exec.generateKeepRulesForR8Lib(
- targetJarProvider: Task, testJarProvider: TaskProvider<*>, artifactName: String) {
+ targetJarProvider: Task, testJarProviders: List<TaskProvider<*>>, artifactName: String) {
dependsOn(
mainDepsJarTask,
packageTestDeps,
r8WithRelocatedDepsTask,
- targetJarProvider,
- testJarProvider)
+ targetJarProvider)
+ testJarProviders.forEach(::dependsOn)
val mainDepsJar = mainDepsJarTask.getSingleOutputFile()
val rtJar = resolve(ThirdPartyDeps.java8Runtime, "rt.jar").getSingleFile()
val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
val targetJar = targetJarProvider.getSingleOutputFile()
val testDepsJar = packageTestDeps.getSingleOutputFile()
- val testJar = testJarProvider.getSingleOutputFile()
- inputs.files(mainDepsJar, rtJar, r8WithRelocatedDepsJar, targetJar, testDepsJar, testJar)
+ inputs.files(mainDepsJar, rtJar, r8WithRelocatedDepsJar, targetJar, testDepsJar)
+ inputs.files(testJarProviders.map{it.getSingleOutputFile()})
val output = file(Paths.get("build", "libs", artifactName))
outputs.file(output)
- commandLine = baseCompilerCommandLine(
- r8WithRelocatedDepsJar,
- "tracereferences",
- listOf(
- "--keep-rules",
+ val argList = mutableListOf("--keep-rules",
"--allowobfuscation",
"--lib",
"$rtJar",
@@ -125,23 +147,30 @@
"$testDepsJar",
"--target",
"$targetJar",
- "--source",
- "$testJar",
"--output",
- "$output"))
+ "$output")
+ testJarProviders.forEach{
+ argList.add("--source")
+ argList.add("${it.getSingleOutputFile()}")
+ }
+ commandLine = baseCompilerCommandLine(
+ r8WithRelocatedDepsJar,
+ "tracereferences",
+ argList
+ )
}
val generateKeepRulesForR8LibWithRelocatedDeps by registering(Exec::class) {
generateKeepRulesForR8Lib(
r8WithRelocatedDepsTask,
- relocateTestsForR8LibWithRelocatedDeps,
+ listOf(relocateTestsForR8LibWithRelocatedDeps, relocateTestBaseForR8LibWithRelocatedDeps),
"generated-keep-rules-r8lib.txt")
}
val generateKeepRulesForR8LibNoDeps by registering(Exec::class) {
generateKeepRulesForR8Lib(
swissArmyKnifeTask,
- packageTests,
+ listOf(packageTests, packageTestBase),
"generated-keep-rules-r8lib-exclude-deps.txt")
}
@@ -237,40 +266,48 @@
keepRulesFileProvider: TaskProvider<Task>,
r8JarProvider: Task,
testJarProvider: TaskProvider<*>,
- artifactName: String) {
+ artifactName: String,
+ addTestBaseClasspath: Boolean) {
dependsOn(
keepRulesFileProvider,
packageTestDeps,
relocateTestsForR8LibWithRelocatedDeps,
r8JarProvider,
r8WithRelocatedDepsTask,
- testJarProvider)
+ testJarProvider,
+ packageTestBaseExcludeKeep)
val keepRulesFile = keepRulesFileProvider.getSingleOutputFile()
val rtJar = resolve(ThirdPartyDeps.java8Runtime, "rt.jar").getSingleFile()
val r8Jar = r8JarProvider.getSingleOutputFile()
val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
+ val testBaseJar = packageTestBaseExcludeKeep.getSingleOutputFile()
val testDepsJar = packageTestDeps.getSingleOutputFile()
val testJar = testJarProvider.getSingleOutputFile()
inputs.files(keepRulesFile, rtJar, r8Jar, r8WithRelocatedDepsJar, testDepsJar, testJar)
val outputJar = getRoot().resolveAll("build", "libs", artifactName)
outputs.file(outputJar)
+ val args = mutableListOf(
+ "--classfile",
+ "--debug",
+ "--lib",
+ "$rtJar",
+ "--classpath",
+ "$r8Jar",
+ "--classpath",
+ "$testDepsJar",
+ "--output",
+ "$outputJar",
+ "--pg-conf",
+ "$keepRulesFile",
+ "$testJar")
+ if (addTestBaseClasspath) {
+ args.add("--classpath")
+ args.add("$testBaseJar")
+ }
commandLine = baseCompilerCommandLine(
r8WithRelocatedDepsJar,
"r8",
- listOf(
- "--classfile",
- "--debug",
- "--lib",
- "$rtJar",
- "--classpath",
- "$r8Jar",
- "--classpath",
- "$testDepsJar",
- "--output",
- "$outputJar",
- "--pg-conf",
- "$keepRulesFile",
- "$testJar"))
+ args)
}
val rewriteTestsForR8LibWithRelocatedDeps by registering(Exec::class) {
@@ -278,7 +315,17 @@
generateTestKeepRulesR8LibWithRelocatedDeps,
r8WithRelocatedDepsTask,
relocateTestsForR8LibWithRelocatedDeps,
- "r8libtestdeps-cf.jar")
+ "r8libtestdeps-cf.jar",
+ true)
+ }
+
+ val rewriteTestBaseForR8LibWithRelocatedDeps by registering(Exec::class) {
+ rewriteTestsForR8Lib(
+ generateTestKeepRulesR8LibWithRelocatedDeps,
+ r8WithRelocatedDepsTask,
+ relocateTestBaseForR8LibWithRelocatedDeps,
+ "r8libtestbase-cf.jar",
+ false)
}
val rewriteTestsForR8LibNoDeps by registering(Exec::class) {
@@ -286,7 +333,8 @@
generateTestKeepRulesR8LibNoDeps,
swissArmyKnifeTask,
packageTests,
- "r8lib-exclude-deps-testdeps-cf.jar")
+ "r8lib-exclude-deps-testdeps-cf.jar",
+ true)
}
val cleanUnzipTests by registering(Delete::class) {
@@ -302,6 +350,13 @@
into(outputDir)
}
+ val unzipTestBase by registering(Copy::class) {
+ dependsOn(cleanUnzipTests, packageTestBase)
+ val outputDir = file("${buildDir}/unpacked/testbase")
+ from(zipTree(packageTestBase.getSingleOutputFile()))
+ into(outputDir)
+ }
+
fun Copy.unzipRewrittenTestsForR8Lib(
rewrittenTestJarProvider: TaskProvider<Exec>, outDirName: String) {
dependsOn(rewrittenTestJarProvider)
@@ -340,8 +395,10 @@
r8Lib,
r8WithRelocatedDepsTask,
testsJava8SourceSetDependenciesTask,
+ rewriteTestBaseForR8LibWithRelocatedDeps,
unzipRewrittenTests,
unzipTests,
+ unzipTestBase,
gradle.includedBuild("shared").task(":downloadDeps"))
if (!project.hasProperty("no_internal")) {
dependsOn(gradle.includedBuild("shared").task(":downloadDepsInternal"))
@@ -356,9 +413,12 @@
classpath = files(
packageTestDeps.get().getOutputs().getFiles(),
r8LibJar,
- unzipRewrittenTests.get().getOutputs().getFiles())
+ unzipRewrittenTests.get().getOutputs().getFiles(),
+ rewriteTestBaseForR8LibWithRelocatedDeps.getSingleOutputFile())
testClassesDirs = unzipRewrittenTests.get().getOutputs().getFiles()
systemProperty("TEST_DATA_LOCATION", unzipTests.getSingleOutputFile())
+ systemProperty("TESTBASE_DATA_LOCATION", unzipTestBase.getSingleOutputFile())
+
systemProperty(
"BUILD_PROP_KEEPANNO_RUNTIME_PATH",
keepAnnoCompileTask.getOutputs().getFiles().getAsPath().split(File.pathSeparator)[0])
@@ -408,4 +468,4 @@
fun TaskOutputs.getSingleOutputFile(): File = getFiles().getSingleFile()
-fun TaskProvider<*>.getSingleOutputFile(): File = get().getSingleOutputFile()
\ No newline at end of file
+fun TaskProvider<*>.getSingleOutputFile(): File = get().getSingleOutputFile()
diff --git a/d8_r8/test/settings.gradle.kts b/d8_r8/test/settings.gradle.kts
index 5c2726d..d114948 100644
--- a/d8_r8/test/settings.gradle.kts
+++ b/d8_r8/test/settings.gradle.kts
@@ -28,6 +28,7 @@
includeBuild(root.resolve("keepanno"))
includeBuild(root.resolve("main"))
includeBuild(root.resolve("resourceshrinker"))
+includeBuild(root.resolve("test_modules").resolve("testbase"))
includeBuild(root.resolve("test_modules").resolve("tests_bootstrap"))
includeBuild(root.resolve("test_modules").resolve("tests_java_8"))
includeBuild(root.resolve("test_modules").resolve("tests_java_9"))
diff --git a/d8_r8/test_modules/testbase/build.gradle.kts b/d8_r8/test_modules/testbase/build.gradle.kts
new file mode 100644
index 0000000..2d66a1c
--- /dev/null
+++ b/d8_r8/test_modules/testbase/build.gradle.kts
@@ -0,0 +1,117 @@
+// Copyright (c) 2024, 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.
+
+import org.gradle.api.JavaVersion
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+ `kotlin-dsl`
+ `java-library`
+ id("dependencies-plugin")
+}
+
+val root = getRoot()
+
+java {
+ sourceSets.main.configure {
+ java {
+ srcDir(root.resolveAll("src", "test", "testbase", "java"))
+ }
+ }
+
+ // We are using a new JDK to compile to an older language version, which is not directly
+ // compatible with java toolchains.
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+// If we depend on keepanno by referencing the project source outputs we get an error regarding
+// incompatible java class file version. By depending on the jar we circumvent that.
+val keepAnnoJarTask = projectTask("keepanno", "jar")
+val keepAnnoCompileTask = projectTask("keepanno", "compileJava")
+val mainCompileTask = projectTask("main", "compileJava")
+val mainDepsJarTask = projectTask("main", "depsJar")
+val resourceShrinkerJavaCompileTask = projectTask("resourceshrinker", "compileJava")
+val resourceShrinkerKotlinCompileTask = projectTask("resourceshrinker", "compileKotlin")
+val resourceShrinkerDepsJarTask = projectTask("resourceshrinker", "depsJar")
+
+dependencies {
+ implementation(keepAnnoJarTask.outputs.files)
+ implementation(mainCompileTask.outputs.files)
+ implementation(projectTask("main", "processResources").outputs.files)
+ implementation(resourceShrinkerJavaCompileTask.outputs.files)
+ implementation(resourceShrinkerKotlinCompileTask.outputs.files)
+ implementation(resourceShrinkerDepsJarTask.outputs.files)
+ implementation(Deps.asm)
+ implementation(Deps.asmCommons)
+ implementation(Deps.asmUtil)
+ implementation(Deps.gson)
+ implementation(Deps.guava)
+ implementation(Deps.javassist)
+ implementation(Deps.junit)
+ implementation(Deps.kotlinStdLib)
+ implementation(Deps.kotlinReflect)
+ implementation(Deps.kotlinMetadata)
+ implementation(resolve(ThirdPartyDeps.ddmLib,"ddmlib.jar"))
+ implementation(resolve(ThirdPartyDeps.jasmin,"jasmin-2.4.jar"))
+ implementation(resolve(ThirdPartyDeps.jdwpTests,"apache-harmony-jdwp-tests-host.jar"))
+ implementation(Deps.fastUtil)
+ implementation(Deps.smali)
+ implementation(Deps.smaliUtil)
+}
+
+
+fun testDependencies() : FileCollection {
+ return sourceSets
+ .test
+ .get()
+ .compileClasspath
+ .filter {
+ "$it".contains("third_party")
+ && !"$it".contains("errorprone")
+ && !"$it".contains("third_party/gradle")
+ }
+}
+
+tasks {
+ withType<JavaCompile> {
+ dependsOn(gradle.includedBuild("keepanno").task(":jar"))
+ dependsOn(gradle.includedBuild("resourceshrinker").task(":jar"))
+ dependsOn(gradle.includedBuild("main").task(":compileJava"))
+ dependsOn(gradle.includedBuild("main").task(":processResources"))
+ dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+ }
+
+ withType<JavaExec> {
+ if (name.endsWith("main()")) {
+ // IntelliJ pass the main execution through a stream which is
+ // not compatible with gradle configuration cache.
+ notCompatibleWithConfigurationCache("JavaExec created by IntelliJ")
+ }
+ }
+
+ withType<KotlinCompile> {
+ enabled = false
+ }
+
+ val testJar by registering(Jar::class) {
+ from(sourceSets.main.get().output)
+ // TODO(b/296486206): Seems like IntelliJ has a problem depending on test source sets. Renaming
+ // this from the default name (testbase.jar) will allow IntelliJ to find the resources in
+ // the jar and not show red underlines. However, navigation to base classes will not work.
+ archiveFileName.set("not_named_testbase.jar")
+ }
+
+ val depsJar by registering(Jar::class) {
+ dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+ dependsOn(gradle.includedBuild("keepanno").task(":jar"))
+ dependsOn(gradle.includedBuild("resourceshrinker").task(":jar"))
+ from(testDependencies().map(::zipTree))
+ from(resourceShrinkerDepsJarTask.outputs.getFiles().map(::zipTree))
+ from(keepAnnoJarTask.outputs.getFiles().map(::zipTree))
+ exclude("com/android/tools/r8/keepanno/annotations/**")
+ duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+ archiveFileName.set("deps.jar")
+ }
+}
diff --git a/d8_r8/test_modules/testbase/settings.gradle.kts b/d8_r8/test_modules/testbase/settings.gradle.kts
new file mode 100644
index 0000000..97fe72b
--- /dev/null
+++ b/d8_r8/test_modules/testbase/settings.gradle.kts
@@ -0,0 +1,33 @@
+// Copyright (c) 2024, 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.
+
+pluginManagement {
+ repositories {
+ maven {
+ url = uri("file:../../../third_party/dependencies_plugin")
+ }
+ maven {
+ url = uri("file:../../../third_party/dependencies")
+ }
+ }
+}
+
+dependencyResolutionManagement {
+ repositories {
+ maven {
+ url = uri("file:../../../third_party/dependencies")
+ }
+ }
+}
+
+rootProject.name = "testbase"
+
+val root = rootProject.projectDir.parentFile.parentFile
+includeBuild(root.resolve("shared"))
+includeBuild(root.resolve("keepanno"))
+includeBuild(root.resolve("resourceshrinker"))
+
+// We need to include src/main as a composite-build otherwise our test-modules
+// will compete with the test to compile the source files.
+includeBuild(root.resolve("main"))
diff --git a/d8_r8/test_modules/tests_bootstrap/build.gradle.kts b/d8_r8/test_modules/tests_bootstrap/build.gradle.kts
index 2b3af66..0be47ab 100644
--- a/d8_r8/test_modules/tests_bootstrap/build.gradle.kts
+++ b/d8_r8/test_modules/tests_bootstrap/build.gradle.kts
@@ -25,6 +25,9 @@
targetCompatibility = JavaVersion.VERSION_1_8
}
+val testbaseJavaCompileTask = projectTask("testbase", "compileJava")
+val testbaseDepsJarTask = projectTask("testbase", "depsJar")
+
val testsJava8Jar = projectTask("tests_java_8", "testJar")
val keepAnnoJarTask = projectTask("keepanno", "jar")
val keepAnnoCompileTask = projectTask("keepanno", "compileJava")
@@ -40,14 +43,8 @@
implementation(resourceShrinkerJavaCompileTask.outputs.files)
implementation(resourceShrinkerKotlinCompileTask.outputs.files)
implementation(resourceShrinkerDepsJarTask.outputs.files)
- implementation(Deps.asm)
- implementation(Deps.asmCommons)
- implementation(Deps.asmUtil)
- implementation(Deps.gson)
- implementation(Deps.guava)
- implementation(Deps.junit)
- implementation(Deps.kotlinMetadata)
- implementation(Deps.fastUtil)
+ implementation(testbaseDepsJarTask.outputs.files)
+ implementation(testbaseJavaCompileTask.outputs.files)
}
fun testDependencies() : FileCollection {
diff --git a/d8_r8/test_modules/tests_bootstrap/settings.gradle.kts b/d8_r8/test_modules/tests_bootstrap/settings.gradle.kts
index b79b3eb..5f5d322 100644
--- a/d8_r8/test_modules/tests_bootstrap/settings.gradle.kts
+++ b/d8_r8/test_modules/tests_bootstrap/settings.gradle.kts
@@ -32,3 +32,4 @@
includeBuild(root.resolve("test_modules").resolve("tests_java_8"))
includeBuild(root.resolve("keepanno"))
includeBuild(root.resolve("resourceshrinker"))
+includeBuild(root.resolve("test_modules").resolve("testbase"))
diff --git a/d8_r8/test_modules/tests_java_8/build.gradle.kts b/d8_r8/test_modules/tests_java_8/build.gradle.kts
index 98ab1c9..779cd6c 100644
--- a/d8_r8/test_modules/tests_java_8/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/build.gradle.kts
@@ -28,6 +28,10 @@
targetCompatibility = JavaVersion.VERSION_1_8
}
+
+val testbaseJavaCompileTask = projectTask("testbase", "compileJava")
+val testbaseDepsJarTask = projectTask("testbase", "depsJar")
+
// If we depend on keepanno by referencing the project source outputs we get an error regarding
// incompatible java class file version. By depending on the jar we circumvent that.
val keepAnnoJarTask = projectTask("keepanno", "jar")
@@ -45,22 +49,8 @@
implementation(resourceShrinkerJavaCompileTask.outputs.files)
implementation(resourceShrinkerKotlinCompileTask.outputs.files)
implementation(resourceShrinkerDepsJarTask.outputs.files)
- implementation(Deps.asm)
- implementation(Deps.asmCommons)
- implementation(Deps.asmUtil)
- implementation(Deps.gson)
- implementation(Deps.guava)
- implementation(Deps.javassist)
- implementation(Deps.junit)
- implementation(Deps.kotlinStdLib)
- implementation(Deps.kotlinReflect)
- implementation(Deps.kotlinMetadata)
- implementation(resolve(ThirdPartyDeps.ddmLib,"ddmlib.jar"))
- implementation(resolve(ThirdPartyDeps.jasmin,"jasmin-2.4.jar"))
- implementation(resolve(ThirdPartyDeps.jdwpTests,"apache-harmony-jdwp-tests-host.jar"))
- implementation(Deps.fastUtil)
- implementation(Deps.smali)
- implementation(Deps.smaliUtil)
+ implementation(testbaseDepsJarTask.outputs.files)
+ implementation(testbaseJavaCompileTask.outputs.files)
}
val sourceSetDependenciesTasks = arrayOf(
@@ -102,9 +92,11 @@
commandLine("python3", createArtTestsScript)
}
"compileTestJava" {
+ dependsOn(testbaseJavaCompileTask)
dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
}
withType<JavaCompile> {
+ dependsOn(testbaseJavaCompileTask)
dependsOn(createArtTests)
dependsOn(gradle.includedBuild("keepanno").task(":jar"))
dependsOn(gradle.includedBuild("resourceshrinker").task(":jar"))
@@ -139,6 +131,9 @@
dependsOn(sourceSetDependencyTask)
systemProperty("TEST_DATA_LOCATION",
layout.buildDirectory.dir("classes/java/test").get().toString())
+ systemProperty("TESTBASE_DATA_LOCATION",
+ testbaseJavaCompileTask.outputs.files.getAsPath().split(File.pathSeparator)[0])
+
systemProperty(
"BUILD_PROP_KEEPANNO_RUNTIME_PATH",
keepAnnoCompileTask.outputs.files.getAsPath().split(File.pathSeparator)[0])
@@ -164,16 +159,4 @@
// the jar and not show red underlines. However, navigation to base classes will not work.
archiveFileName.set("not_named_tests_java_8.jar")
}
-
- val depsJar by registering(Jar::class) {
- dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
- dependsOn(gradle.includedBuild("keepanno").task(":jar"))
- dependsOn(gradle.includedBuild("resourceshrinker").task(":jar"))
- from(testDependencies().map(::zipTree))
- from(resourceShrinkerDepsJarTask.outputs.getFiles().map(::zipTree))
- from(keepAnnoJarTask.outputs.getFiles().map(::zipTree))
- exclude("com/android/tools/r8/keepanno/annotations/**")
- duplicatesStrategy = DuplicatesStrategy.EXCLUDE
- archiveFileName.set("deps.jar")
- }
}
diff --git a/d8_r8/test_modules/tests_java_8/settings.gradle.kts b/d8_r8/test_modules/tests_java_8/settings.gradle.kts
index d54c456..a28a94f 100644
--- a/d8_r8/test_modules/tests_java_8/settings.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/settings.gradle.kts
@@ -31,6 +31,7 @@
// We need to include src/main as a composite-build otherwise our test-modules
// will compete with the test to compile the source files.
includeBuild(root.resolve("main"))
+includeBuild(root.resolve("test_modules").resolve("testbase"))
includeBuild(root.resolve("test_modules").resolve("tests_java_9"))
includeBuild(root.resolve("test_modules").resolve("tests_java_10"))
includeBuild(root.resolve("test_modules").resolve("tests_java_11"))
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/ConstructorEntryPoint.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/ConstructorEntryPoint.java
index 49532c6..24efc9a 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/ConstructorEntryPoint.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/ConstructorEntryPoint.java
@@ -6,6 +6,7 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.DexMethod;
+import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.ConstNumber;
import com.android.tools.r8.ir.code.InvokeType;
import com.android.tools.r8.ir.code.Position;
@@ -36,21 +37,23 @@
* </code>
*/
public class ConstructorEntryPoint extends SyntheticSourceCode {
+
private final DexField classIdField;
private final int extraNulls;
+ private final ProgramMethod method;
private final Int2ReferenceSortedMap<DexMethod> typeConstructors;
public ConstructorEntryPoint(
Int2ReferenceSortedMap<DexMethod> typeConstructors,
- DexMethod newConstructor,
+ ProgramMethod method,
DexField classIdField,
int extraNulls,
Position position) {
- super(newConstructor.holder, newConstructor, position);
-
- this.typeConstructors = typeConstructors;
+ super(method, position);
this.classIdField = classIdField;
this.extraNulls = extraNulls;
+ this.method = method;
+ this.typeConstructors = typeConstructors;
}
private boolean hasClassIdField() {
@@ -95,25 +98,17 @@
}
/** Assign the given register to the class id field. */
- void addRegisterClassIdAssignment(int idRegister) {
+ void addRegisterClassIdAssignment(int classIdRegister) {
assert hasClassIdField();
- add(builder -> builder.addInstancePut(idRegister, getReceiverRegister(), classIdField));
- }
-
- /** Assign the given constant integer value to the class id field. */
- void addConstantRegisterClassIdAssignment(int classId) {
- assert hasClassIdField();
- int idRegister = nextRegister(ValueType.INT);
- add(builder -> builder.addIntConst(idRegister, classId));
- addRegisterClassIdAssignment(idRegister);
+ add(builder -> builder.addInstancePut(classIdRegister, getReceiverRegister(), classIdField));
}
protected void prepareMultiConstructorInstructions() {
int typeConstructorCount = typeConstructors.size();
// The class id register is always the first synthetic argument.
- int idRegister = getParamRegister(method.getArity() - 1 - extraNulls);
+ int classIdRegister = getParamRegister(method.getArity() - 1 - extraNulls);
if (hasClassIdField()) {
- addRegisterClassIdAssignment(idRegister);
+ addRegisterClassIdAssignment(classIdRegister);
}
int[] keys = new int[typeConstructorCount - 1];
@@ -121,7 +116,7 @@
IntBox fallthrough = new IntBox();
int switchIndex = lastInstructionIndex();
add(
- builder -> builder.addSwitch(idRegister, keys, fallthrough.get(), offsets),
+ builder -> builder.addSwitch(classIdRegister, keys, fallthrough.get(), offsets),
builder -> endsSwitch(builder, switchIndex, fallthrough.get(), offsets));
int index = 0;
@@ -148,7 +143,10 @@
protected void prepareSingleConstructorInstructions() {
Entry<DexMethod> entry = typeConstructors.int2ReferenceEntrySet().first();
if (hasClassIdField()) {
- addConstantRegisterClassIdAssignment(entry.getIntKey());
+ int classIdRegister = nextRegister(ValueType.INT);
+ int classIdValue = entry.getIntKey();
+ add(builder -> builder.addIntConst(classIdRegister, classIdValue));
+ addRegisterClassIdAssignment(classIdRegister);
}
addConstructorInvoke(entry.getValue());
add(IRBuilder::addReturn, endsBlock);
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/IncompleteHorizontalClassMergerCode.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/IncompleteHorizontalClassMergerCode.java
index 031fa97..9aada42 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/IncompleteHorizontalClassMergerCode.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/IncompleteHorizontalClassMergerCode.java
@@ -24,7 +24,7 @@
public abstract void addExtraUnusedArguments(int numberOfUnusedArguments);
@Override
- public boolean isHorizontalClassMergerCode() {
+ public final boolean isHorizontalClassMergerCode() {
return true;
}
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
index 5f1815b..559f14f 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
@@ -252,7 +252,6 @@
}
private Code getNewCode(
- DexMethod newMethodReference,
boolean needsClassId,
int extraNulls) {
if (hasInstanceInitializerDescription()) {
@@ -261,7 +260,6 @@
assert useSyntheticMethod();
return new ConstructorEntryPointSynthesizedCode(
createClassIdToInstanceInitializerMap(),
- newMethodReference,
group.hasClassIdField() ? group.getClassIdField() : null,
extraNulls);
}
@@ -349,7 +347,7 @@
DexEncodedMethod.syntheticBuilder()
.setMethod(newMethodReference)
.setAccessFlags(getNewAccessFlags())
- .setCode(getNewCode(newMethodReference, needsClassId, extraUnusedParameters.size()))
+ .setCode(getNewCode(needsClassId, extraUnusedParameters.size()))
.setClassFileVersion(getNewClassFileVersion())
.setApiLevelForDefinition(representativeMethod.getApiLevelForDefinition())
.setApiLevelForCode(representativeMethod.getApiLevelForCode())
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/code/ConstructorEntryPointSynthesizedCode.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/code/ConstructorEntryPointSynthesizedCode.java
index 706a4fe..b0cfa19 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/code/ConstructorEntryPointSynthesizedCode.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/code/ConstructorEntryPointSynthesizedCode.java
@@ -36,18 +36,15 @@
public class ConstructorEntryPointSynthesizedCode extends IncompleteHorizontalClassMergerCode {
- private final DexMethod newConstructor;
private final DexField classIdField;
private int extraNulls;
private final Int2ReferenceSortedMap<DexMethod> typeConstructors;
public ConstructorEntryPointSynthesizedCode(
Int2ReferenceSortedMap<DexMethod> typeConstructors,
- DexMethod newConstructor,
DexField classIdField,
int extraNulls) {
this.typeConstructors = typeConstructors;
- this.newConstructor = newConstructor;
this.classIdField = classIdField;
this.extraNulls = extraNulls;
}
@@ -81,11 +78,6 @@
}
@Override
- public boolean isHorizontalClassMergerCode() {
- return true;
- }
-
- @Override
public LirCode<Integer> toLirCode(
AppView<? extends AppInfoWithClassHierarchy> appView,
ProgramMethod method,
@@ -128,8 +120,7 @@
.setIsD8R8Synthesized(true)
.build();
SourceCode sourceCode =
- new ConstructorEntryPoint(
- typeConstructors, newConstructor, classIdField, extraNulls, position);
+ new ConstructorEntryPoint(typeConstructors, method, classIdField, extraNulls, position);
return IRBuilder.create(method, appView, sourceCode).build(method, conversionOptions);
}
@@ -144,7 +135,7 @@
RewrittenPrototypeDescription protoChanges) {
SourceCode sourceCode =
new ConstructorEntryPoint(
- typeConstructors, newConstructor, classIdField, extraNulls, callerPosition);
+ typeConstructors, method, classIdField, extraNulls, callerPosition);
return IRBuilder.createForInlining(
method, appView, codeLens, sourceCode, valueNumberGenerator, protoChanges)
.build(context, MethodConversionOptions.nonConverting());
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
index 791577a..9eeb1f9 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.ir.analysis.type;
+import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexMethod;
@@ -30,6 +31,7 @@
WIDENING, // initial analysis, including fixed-point iteration for phis and updating with less
// specific info, e.g., removing assume nodes.
NARROWING, // updating with more specific info, e.g., passing the return value of the inlinee.
+ PROPAGATE, // effectively NARROWING_OR_WIDENING
NO_CHANGE // utility to ensure types are up to date
}
@@ -100,6 +102,20 @@
removeRedundantAssumeInstructions(redundantAssumeConsumer);
}
+ public void propagate(Iterable<? extends Value> values) {
+ analyzeValues(values, Mode.PROPAGATE);
+ }
+
+ public void propagateWithAssumeRemoval(Iterable<? extends Value> values) {
+ propagateWithAssumeRemoval(values, ConsumerUtils.emptyConsumer());
+ }
+
+ public void propagateWithAssumeRemoval(
+ Iterable<? extends Value> values, Consumer<Assume> redundantAssumeConsumer) {
+ propagate(values);
+ removeRedundantAssumeInstructions(redundantAssumeConsumer);
+ }
+
private void removeRedundantAssumeInstructions(Consumer<Assume> redundantAssumeConsumer) {
Set<Value> affectedValuesFromAssumeRemoval = Sets.newIdentityHashSet();
while (assumeRemover.removeRedundantAssumeInstructions(
@@ -204,11 +220,18 @@
return;
}
- if (mode == Mode.WIDENING) {
- value.widening(appView, type);
- } else {
- assert mode == Mode.NARROWING;
- value.narrowing(appView, code.context(), type);
+ switch (mode) {
+ case NARROWING:
+ value.narrowing(appView, code.context(), type);
+ break;
+ case PROPAGATE:
+ value.setType(type);
+ break;
+ case WIDENING:
+ value.widening(appView, type);
+ break;
+ default:
+ throw new Unreachable();
}
// propagate the type change to (instruction) users if any.
diff --git a/src/main/java/com/android/tools/r8/ir/code/Return.java b/src/main/java/com/android/tools/r8/ir/code/Return.java
index 1efb557..4e89ab8 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Return.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Return.java
@@ -122,7 +122,10 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints, ProgramMethod context) {
- return inliningConstraints.forReturn();
+ if (hasReturnValue()) {
+ return inliningConstraints.forReturn(returnValue().getType(), context);
+ }
+ return inliningConstraints.forReturnVoid();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialCheckCastAndInstanceOfRemover.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialCheckCastAndInstanceOfRemover.java
index 4f42153..9e18843 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialCheckCastAndInstanceOfRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialCheckCastAndInstanceOfRemover.java
@@ -97,15 +97,23 @@
methodProcessor,
methodProcessingContext);
if (removeResult != RemoveCheckCastInstructionIfTrivialResult.NO_REMOVALS) {
- assert removeResult == RemoveCheckCastInstructionIfTrivialResult.REMOVED_CAST_DO_NARROW;
hasChanged = true;
needToRemoveTrivialPhis |= hasPhiUsers;
int blockSizeBeforeAssumeRemoval = block.size();
Instruction previous = it.peekPrevious();
- affectedValues.narrowingWithAssumeRemoval(
- appView,
- code,
- typeAnalysis -> typeAnalysis.setKeepRedundantBlocksAfterAssumeRemoval(true));
+ if (removeResult == RemoveCheckCastInstructionIfTrivialResult.REMOVED_CAST_DO_NARROW) {
+ affectedValues.narrowingWithAssumeRemoval(
+ appView,
+ code,
+ typeAnalysis -> typeAnalysis.setKeepRedundantBlocksAfterAssumeRemoval(true));
+ } else {
+ assert removeResult
+ == RemoveCheckCastInstructionIfTrivialResult.REMOVED_CAST_DO_PROPAGATE;
+ affectedValues.propagateWithAssumeRemoval(
+ appView,
+ code,
+ typeAnalysis -> typeAnalysis.setKeepRedundantBlocksAfterAssumeRemoval(true));
+ }
if (block.size() != blockSizeBeforeAssumeRemoval) {
it = previous != null ? block.listIterator(code, previous) : block.listIterator(code);
}
@@ -142,7 +150,8 @@
enum RemoveCheckCastInstructionIfTrivialResult {
NO_REMOVALS,
- REMOVED_CAST_DO_NARROW
+ REMOVED_CAST_DO_NARROW,
+ REMOVED_CAST_DO_PROPAGATE
}
private enum InstanceOfResult {
@@ -264,7 +273,10 @@
.build();
it.replaceCurrentInstruction(replacement);
assert replacement.lookupSingleTarget(appView, context) != null;
- return RemoveCheckCastInstructionIfTrivialResult.REMOVED_CAST_DO_NARROW;
+ if (checkCast.object().getType().isNullable()) {
+ return RemoveCheckCastInstructionIfTrivialResult.REMOVED_CAST_DO_NARROW;
+ }
+ return RemoveCheckCastInstructionIfTrivialResult.REMOVED_CAST_DO_PROPAGATE;
}
// If the cast is guaranteed to succeed and only there to ensure the program type checks, then
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/AffectedValues.java b/src/main/java/com/android/tools/r8/ir/optimize/AffectedValues.java
index 681eb9e..2258b27 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/AffectedValues.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/AffectedValues.java
@@ -51,6 +51,16 @@
}
}
+ public void propagateWithAssumeRemoval(
+ AppView<?> appView, IRCode code, Consumer<TypeAnalysis> typeAnalysisConsumer) {
+ if (hasNext()) {
+ TypeAnalysis typeAnalysis = new TypeAnalysis(appView, code);
+ typeAnalysisConsumer.accept(typeAnalysis);
+ typeAnalysis.propagateWithAssumeRemoval(this);
+ clear();
+ }
+ }
+
public void widening(AppView<?> appView, IRCode code) {
if (hasNext()) {
new TypeAnalysis(appView, code).widening(this);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
index 8f61ce7..a9a29a2 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
@@ -17,6 +17,7 @@
import com.android.tools.r8.graph.FieldResolutionResult.SingleFieldResolutionResult;
import com.android.tools.r8.graph.MethodResolutionResult.SingleResolutionResult;
import com.android.tools.r8.graph.ProgramMethod;
+import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.InvokeType;
import com.android.tools.r8.ir.optimize.Inliner.Constraint;
import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
@@ -244,7 +245,15 @@
return ConstraintWithTarget.ALWAYS;
}
- public ConstraintWithTarget forReturn() {
+ public ConstraintWithTarget forReturn(TypeElement returnType, ProgramMethod context) {
+ // If the return value is not an instance of the static return type, then do not inline.
+ if (returnType.lessThanOrEqual(context.getReturnType().toTypeElement(appView), appView)) {
+ return ConstraintWithTarget.ALWAYS;
+ }
+ return ConstraintWithTarget.NEVER;
+ }
+
+ public ConstraintWithTarget forReturnVoid() {
return ConstraintWithTarget.ALWAYS;
}
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java
index 4e3bf9c..de4b6c8 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java
@@ -6,29 +6,25 @@
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.DebugLocalInfo;
-import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.graph.DexProto;
-import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.CatchHandlers;
import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.DexSourceCode;
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.conversion.SourceCode;
+import com.android.tools.r8.utils.ArrayUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
+@Deprecated
public abstract class SyntheticSourceCode implements SourceCode {
+
protected final static Predicate<IRBuilder> doesNotEndBlock = x -> false;
protected final static Predicate<IRBuilder> endsBlock = x -> true;
- // TODO(b/146124603): Remove these fields as optimizations (e.g., merging) could invalidate them.
- protected final DexType receiver;
- protected final DexMethod method;
- protected final DexProto proto;
-
// The next free register, note that we always
// assign each value a new (next available) register.
private int nextRegister = 0;
@@ -43,22 +39,15 @@
private final Position position;
- protected SyntheticSourceCode(DexType receiver, DexMethod method, Position position) {
- assert method != null;
- this.receiver = receiver;
- this.method = method;
- this.proto = method.proto;
+ protected SyntheticSourceCode(ProgramMethod method, Position position) {
this.position = position;
// Initialize register values for receiver and arguments
- this.receiverRegister = receiver != null ? nextRegister(ValueType.OBJECT) : -1;
-
- DexType[] params = proto.parameters.values;
- int paramCount = params.length;
- this.paramRegisters = new int[paramCount];
- for (int i = 0; i < paramCount; i++) {
- this.paramRegisters[i] = nextRegister(ValueType.fromDexType(params[i]));
- }
+ this.receiverRegister = nextRegister(ValueType.OBJECT);
+ this.paramRegisters =
+ ArrayUtils.initialize(
+ new int[method.getParameters().size()],
+ i -> nextRegister(ValueType.fromDexType(method.getParameter(i))));
}
protected final void add(Consumer<IRBuilder> constructor) {
@@ -77,7 +66,6 @@
}
protected final int getReceiverRegister() {
- assert receiver != null;
assert receiverRegister >= 0;
return receiverRegister;
}
diff --git a/src/main/java/com/android/tools/r8/utils/ArrayUtils.java b/src/main/java/com/android/tools/r8/utils/ArrayUtils.java
index 0e57243..8dbaecf 100644
--- a/src/main/java/com/android/tools/r8/utils/ArrayUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ArrayUtils.java
@@ -14,6 +14,7 @@
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.IntPredicate;
+import java.util.function.IntUnaryOperator;
import java.util.function.Predicate;
public class ArrayUtils {
@@ -70,6 +71,13 @@
return array;
}
+ public static int[] initialize(int[] array, IntUnaryOperator fn) {
+ for (int i = 0; i < array.length; i++) {
+ array[i] = fn.applyAsInt(i);
+ }
+ return array;
+ }
+
public static <T> T[] initialize(T[] array, IntFunction<T> fn) {
for (int i = 0; i < array.length; i++) {
array[i] = fn.apply(i);
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java
index 7fcb455..35f157d 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java
@@ -16,7 +16,6 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.dex.Marker.Backend;
import com.android.tools.r8.retrace.ProguardMapProducer;
import com.android.tools.r8.retrace.ProguardMappingSupplier;
import com.android.tools.r8.retrace.Retrace;
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsCollection.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsCollection.java
index a960739..14b10f4 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsCollection.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsCollection.java
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.benchmarks;
-import com.android.tools.r8.benchmarks.BenchmarkRunner.ResultMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsSingle.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsSingle.java
index fc6540e..e0bb9f193 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsSingle.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsSingle.java
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.benchmarks;
-import com.android.tools.r8.benchmarks.BenchmarkRunner.ResultMode;
import it.unimi.dsi.fastutil.longs.LongArrayList;
import it.unimi.dsi.fastutil.longs.LongList;
import java.util.Set;
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsWarmup.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsWarmup.java
index 86b1dc4..2ac97a6 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsWarmup.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResultsWarmup.java
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.benchmarks;
-import com.android.tools.r8.benchmarks.BenchmarkRunner.ResultMode;
import it.unimi.dsi.fastutil.longs.LongArrayList;
import it.unimi.dsi.fastutil.longs.LongList;
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkRunner.java b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkRunner.java
index f210e18..2fed6dc 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkRunner.java
+++ b/src/test/java/com/android/tools/r8/benchmarks/BenchmarkRunner.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.benchmarks;
-import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.benchmarks.BenchmarkResults.ResultMode;
public class BenchmarkRunner {
@@ -11,20 +11,10 @@
void run(BenchmarkResults results) throws Exception;
}
- public enum ResultMode {
- AVERAGE,
- SUM;
-
- @Override
- public String toString() {
- return StringUtils.toLowerCase(name());
- }
- }
-
private final BenchmarkConfig config;
private int warmups = 0;
private int iterations = 1;
- private ResultMode resultMode = ResultMode.AVERAGE;
+ private ResultMode resultMode = BenchmarkResults.ResultMode.AVERAGE;
private BenchmarkRunner(BenchmarkConfig config) {
this.config = config;
@@ -45,12 +35,12 @@
}
public BenchmarkRunner reportResultAverage() {
- resultMode = ResultMode.AVERAGE;
+ resultMode = BenchmarkResults.ResultMode.AVERAGE;
return this;
}
public BenchmarkRunner reportResultSum() {
- resultMode = ResultMode.SUM;
+ resultMode = BenchmarkResults.ResultMode.SUM;
return this;
}
diff --git a/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java b/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java
index 0939bd2..19d0631 100644
--- a/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java
+++ b/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java
@@ -58,11 +58,12 @@
if (kotlinTestParameters.isNewerThanOrEqualTo(KotlinCompilerVersion.KOTLINC_1_8_0)
&& parameters.isDexRuntime()
&& parameters.getApiLevel().isLessThan(AndroidApiLevel.N)) {
- // Kotlin stdlib has references to classes introduced at API level 24.
+ // Kotlin stdlib has references to classes introduced in API level 24 and
+ // java.lang.AutoCloseable introduced in API level 19.
diagnostics.assertWarningsCount(
kotlinTestParameters.isOlderThanOrEqualTo(KotlinCompilerVersion.KOTLINC_1_9_21)
? 2
- : 3);
+ : (parameters.getApiLevel().isLessThan(AndroidApiLevel.K)) ? 4 : 3);
diagnostics.assertAllWarningsMatch(
DiagnosticsMatcher.diagnosticType(InterfaceDesugarMissingTypeDiagnostic.class));
} else {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedByteReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedByteReturnPropagationTest.java
index 3043c57..a9f0afe 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedByteReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedByteReturnPropagationTest.java
@@ -11,7 +11,6 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedBooleanReturnPropagationTest.Main;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedCharacterReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedCharacterReturnPropagationTest.java
index 6542212..cca4303 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedCharacterReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedCharacterReturnPropagationTest.java
@@ -11,7 +11,6 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedByteReturnPropagationTest.Main;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedDoubleReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedDoubleReturnPropagationTest.java
index a383a2d..c3944d5 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedDoubleReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedDoubleReturnPropagationTest.java
@@ -11,7 +11,6 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedCharacterReturnPropagationTest.Main;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedFloatReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedFloatReturnPropagationTest.java
index ca68794..2b7ba63 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedFloatReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedFloatReturnPropagationTest.java
@@ -11,7 +11,6 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedCharacterReturnPropagationTest.Main;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedIntegerReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedIntegerReturnPropagationTest.java
index 0f205ea..bc39ab8 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedIntegerReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedIntegerReturnPropagationTest.java
@@ -11,7 +11,6 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedCharacterReturnPropagationTest.Main;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedLongReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedLongReturnPropagationTest.java
index e588489..53aebf8 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedLongReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedLongReturnPropagationTest.java
@@ -11,7 +11,6 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedCharacterReturnPropagationTest.Main;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedShortReturnPropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedShortReturnPropagationTest.java
index 3c8b0b8..fecac90 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedShortReturnPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/boxedprimitives/BoxedShortReturnPropagationTest.java
@@ -11,7 +11,6 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.ir.optimize.boxedprimitives.BoxedCharacterReturnPropagationTest.Main;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingSingletonTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingSingletonTest.java
index 74aed3a..c4c57c0 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingSingletonTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingSingletonTest.java
@@ -9,6 +9,7 @@
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion;
import com.android.tools.r8.KotlinTestBase;
import com.android.tools.r8.KotlinTestParameters;
import com.android.tools.r8.TestParameters;
@@ -66,9 +67,16 @@
// Get the Kotlin lambdas in the input.
KotlinLambdasInInput lambdasInInput =
KotlinLambdasInInput.create(getProgramFiles(), getTestName());
- assertEquals(2, lambdasInInput.getNumberOfJStyleLambdas());
assertEquals(
- kotlinParameters.getLambdaGeneration().isInvokeDynamic() ? 6 : 7,
+ kotlinParameters.getLambdaGeneration().isInvokeDynamic()
+ && kotlinParameters.getCompilerVersion() == KotlinCompilerVersion.KOTLIN_DEV
+ ? 8
+ : 2,
+ lambdasInInput.getNumberOfJStyleLambdas());
+ assertEquals(
+ kotlinParameters.getLambdaGeneration().isInvokeDynamic()
+ ? (kotlinParameters.getCompilerVersion() == KotlinCompilerVersion.KOTLIN_DEV ? 0 : 6)
+ : 7,
lambdasInInput.getNumberOfKStyleLambdas());
testForR8(parameters.getBackend())
@@ -90,7 +98,13 @@
private void inspect(
HorizontallyMergedClassesInspector inspector, KotlinLambdasInInput lambdasInInput) {
// All J-style Kotlin lambdas should be merged into one class.
- inspector.assertIsCompleteMergeGroup(lambdasInInput.getJStyleLambdas());
+ if (kotlinParameters
+ .getCompilerVersion()
+ .isLessThanOrEqualTo(KotlinCompilerVersion.KOTLINC_1_9_21)) {
+ inspector.assertIsCompleteMergeGroup(lambdasInInput.getJStyleLambdas());
+ } else {
+ assertEquals(4, inspector.getMergeGroups().size());
+ }
// The remaining lambdas are not merged.
inspector.assertClassReferencesNotMerged(lambdasInInput.getKStyleLambdas());
diff --git a/src/test/java/com/android/tools/r8/repackage/MappingFileAfterRepackagingTest.java b/src/test/java/com/android/tools/r8/repackage/MappingFileAfterRepackagingTest.java
new file mode 100644
index 0000000..9290be4
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/repackage/MappingFileAfterRepackagingTest.java
@@ -0,0 +1,90 @@
+// Copyright (c) 2024, 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.repackage;
+
+import static org.junit.Assert.assertEquals;
+
+import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.utils.StringUtils;
+import java.util.List;
+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;
+
+/** Reproduction of b/328837166. */
+@RunWith(Parameterized.class)
+public class MappingFileAfterRepackagingTest extends TestBase {
+
+ @Parameter(0)
+ public TestParameters parameters;
+
+ @Parameter(1)
+ public boolean repackage;
+
+ @Parameters(name = "{0}, repackage: {1}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withAllRuntimesAndApiLevels().build(), BooleanUtils.values());
+ }
+
+ @Test
+ public void test() throws Exception {
+ testForR8(parameters.getBackend())
+ .addInnerClasses(getClass())
+ .addKeepMainRule(Main.class)
+ .addHorizontallyMergedClassesInspector(
+ inspector -> inspector.assertIsCompleteMergeGroup(A.class, B.class))
+ .applyIf(repackage, testBuilder -> testBuilder.addKeepRules("-repackageclasses"))
+ .enableInliningAnnotations()
+ .setMinApi(parameters)
+ .compile()
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccessWithOutputLines("A")
+ .apply(
+ runResult -> {
+ long syntheticMatches =
+ StringUtils.splitLines(runResult.proguardMap()).stream()
+ .filter(
+ line ->
+ line.contains(
+ "java.lang.String MappingFileAfterRepackagingTest$A.toString()"))
+ .count();
+ assertEquals(repackage ? 2 : 0, syntheticMatches);
+
+ long unqualifiedMatches =
+ StringUtils.splitLines(runResult.proguardMap()).stream()
+ .filter(line -> line.contains("java.lang.String toString()"))
+ .count();
+ assertEquals(repackage ? 1 : 3, unqualifiedMatches);
+ });
+ }
+
+ static class Main {
+
+ public static void main(String[] args) {
+ System.out.println((System.currentTimeMillis() > 0 ? new A() : new B()));
+ }
+ }
+
+ public static class A {
+
+ @NeverInline
+ public String toString() {
+ System.out.print("");
+ return "A";
+ }
+ }
+
+ static class B {
+
+ public String toString() {
+ return "B";
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfConstClassArraysTest.java b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfConstClassArraysTest.java
index b37c8a2..d2afb69 100644
--- a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfConstClassArraysTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfConstClassArraysTest.java
@@ -10,7 +10,6 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.rewrite.arrays.ConstClassArrayWithUniqueValuesTest.TestClass;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
diff --git a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfStringArraysTest.java b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfStringArraysTest.java
index d238b1a..5aaed9c 100644
--- a/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfStringArraysTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/arrays/ArrayOfStringArraysTest.java
@@ -10,7 +10,6 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.rewrite.arrays.ArrayOfConstClassArraysTest.TestClass;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.InstructionSubject;
diff --git a/src/test/java/com/android/tools/r8/AlwaysClassInline.java b/src/test/testbase/java/com/android/tools/r8/AlwaysClassInline.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AlwaysClassInline.java
rename to src/test/testbase/java/com/android/tools/r8/AlwaysClassInline.java
diff --git a/src/test/java/com/android/tools/r8/AlwaysInline.java b/src/test/testbase/java/com/android/tools/r8/AlwaysInline.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AlwaysInline.java
rename to src/test/testbase/java/com/android/tools/r8/AlwaysInline.java
diff --git a/src/test/java/com/android/tools/r8/AsmTestBase.java b/src/test/testbase/java/com/android/tools/r8/AsmTestBase.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AsmTestBase.java
rename to src/test/testbase/java/com/android/tools/r8/AsmTestBase.java
diff --git a/src/test/java/com/android/tools/r8/AssumeMayHaveSideEffects.java b/src/test/testbase/java/com/android/tools/r8/AssumeMayHaveSideEffects.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AssumeMayHaveSideEffects.java
rename to src/test/testbase/java/com/android/tools/r8/AssumeMayHaveSideEffects.java
diff --git a/src/test/java/com/android/tools/r8/AssumeNoClassInitializationSideEffects.java b/src/test/testbase/java/com/android/tools/r8/AssumeNoClassInitializationSideEffects.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AssumeNoClassInitializationSideEffects.java
rename to src/test/testbase/java/com/android/tools/r8/AssumeNoClassInitializationSideEffects.java
diff --git a/src/test/java/com/android/tools/r8/AssumeNoSideEffects.java b/src/test/testbase/java/com/android/tools/r8/AssumeNoSideEffects.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AssumeNoSideEffects.java
rename to src/test/testbase/java/com/android/tools/r8/AssumeNoSideEffects.java
diff --git a/src/test/java/com/android/tools/r8/AssumeNotNull.java b/src/test/testbase/java/com/android/tools/r8/AssumeNotNull.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/AssumeNotNull.java
rename to src/test/testbase/java/com/android/tools/r8/AssumeNotNull.java
diff --git a/src/test/java/com/android/tools/r8/CheckEnumUnboxed.java b/src/test/testbase/java/com/android/tools/r8/CheckEnumUnboxed.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/CheckEnumUnboxed.java
rename to src/test/testbase/java/com/android/tools/r8/CheckEnumUnboxed.java
diff --git a/src/test/java/com/android/tools/r8/CollectorsUtils.java b/src/test/testbase/java/com/android/tools/r8/CollectorsUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/CollectorsUtils.java
rename to src/test/testbase/java/com/android/tools/r8/CollectorsUtils.java
diff --git a/src/test/java/com/android/tools/r8/D8TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/D8TestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/D8TestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/D8TestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/D8TestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/D8TestCompileResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/D8TestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/D8TestCompileResult.java
diff --git a/src/test/java/com/android/tools/r8/D8TestRunResult.java b/src/test/testbase/java/com/android/tools/r8/D8TestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/D8TestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/D8TestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/DXTestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/DXTestCompileResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DXTestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/DXTestCompileResult.java
diff --git a/src/test/java/com/android/tools/r8/DXTestRunResult.java b/src/test/testbase/java/com/android/tools/r8/DXTestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DXTestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/DXTestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/DesugarTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/DesugarTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DesugarTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/DesugarTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/DesugarTestConfiguration.java b/src/test/testbase/java/com/android/tools/r8/DesugarTestConfiguration.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DesugarTestConfiguration.java
rename to src/test/testbase/java/com/android/tools/r8/DesugarTestConfiguration.java
diff --git a/src/test/java/com/android/tools/r8/DesugarTestRunResult.java b/src/test/testbase/java/com/android/tools/r8/DesugarTestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DesugarTestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/DesugarTestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/DeviceRunner.java b/src/test/testbase/java/com/android/tools/r8/DeviceRunner.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DeviceRunner.java
rename to src/test/testbase/java/com/android/tools/r8/DeviceRunner.java
diff --git a/src/test/java/com/android/tools/r8/Dex2OatTestRunResult.java b/src/test/testbase/java/com/android/tools/r8/Dex2OatTestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/Dex2OatTestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/Dex2OatTestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/DiagnosticsChecker.java b/src/test/testbase/java/com/android/tools/r8/DiagnosticsChecker.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DiagnosticsChecker.java
rename to src/test/testbase/java/com/android/tools/r8/DiagnosticsChecker.java
diff --git a/src/test/java/com/android/tools/r8/DiagnosticsMatcher.java b/src/test/testbase/java/com/android/tools/r8/DiagnosticsMatcher.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/DiagnosticsMatcher.java
rename to src/test/testbase/java/com/android/tools/r8/DiagnosticsMatcher.java
diff --git a/src/test/java/com/android/tools/r8/ExternalR8TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/ExternalR8TestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ExternalR8TestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/ExternalR8TestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/ExternalR8TestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/ExternalR8TestCompileResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ExternalR8TestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/ExternalR8TestCompileResult.java
diff --git a/src/test/java/com/android/tools/r8/ExternalR8TestRunResult.java b/src/test/testbase/java/com/android/tools/r8/ExternalR8TestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ExternalR8TestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/ExternalR8TestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/GenerateMainDexListResult.java b/src/test/testbase/java/com/android/tools/r8/GenerateMainDexListResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/GenerateMainDexListResult.java
rename to src/test/testbase/java/com/android/tools/r8/GenerateMainDexListResult.java
diff --git a/src/test/java/com/android/tools/r8/GenerateMainDexListRunResult.java b/src/test/testbase/java/com/android/tools/r8/GenerateMainDexListRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/GenerateMainDexListRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/GenerateMainDexListRunResult.java
diff --git a/src/test/java/com/android/tools/r8/GenerateMainDexListTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/GenerateMainDexListTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/GenerateMainDexListTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/GenerateMainDexListTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/IntermediateCfD8TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/IntermediateCfD8TestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/IntermediateCfD8TestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/IntermediateCfD8TestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/JavaCompilerTool.java b/src/test/testbase/java/com/android/tools/r8/JavaCompilerTool.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/JavaCompilerTool.java
rename to src/test/testbase/java/com/android/tools/r8/JavaCompilerTool.java
diff --git a/src/test/java/com/android/tools/r8/Jdk9TestUtils.java b/src/test/testbase/java/com/android/tools/r8/Jdk9TestUtils.java
similarity index 76%
rename from src/test/java/com/android/tools/r8/Jdk9TestUtils.java
rename to src/test/testbase/java/com/android/tools/r8/Jdk9TestUtils.java
index 8b6bfbb..302927b 100644
--- a/src/test/java/com/android/tools/r8/Jdk9TestUtils.java
+++ b/src/test/testbase/java/com/android/tools/r8/Jdk9TestUtils.java
@@ -6,13 +6,14 @@
import static com.android.tools.r8.desugar.LibraryFilesHelper.getJdk9LibraryFiles;
+import com.android.tools.r8.desugar.LibraryFilesHelper;
import org.junit.rules.TemporaryFolder;
public class Jdk9TestUtils {
public static ThrowableConsumer<R8FullTestBuilder> addJdk9LibraryFiles(
TemporaryFolder temporaryFolder) {
- return builder -> builder.addLibraryFiles(getJdk9LibraryFiles(temporaryFolder));
+ return builder -> builder.addLibraryFiles(LibraryFilesHelper.getJdk9LibraryFiles(temporaryFolder));
}
}
diff --git a/src/test/java/com/android/tools/r8/JvmTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/JvmTestBuilder.java
similarity index 97%
rename from src/test/java/com/android/tools/r8/JvmTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/JvmTestBuilder.java
index f919181..0423904 100644
--- a/src/test/java/com/android/tools/r8/JvmTestBuilder.java
+++ b/src/test/testbase/java/com/android/tools/r8/JvmTestBuilder.java
@@ -5,6 +5,7 @@
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.debug.CfDebugTestConfig;
+import com.android.tools.r8.dex.Marker.Tool;
import com.android.tools.r8.errors.Unimplemented;
import com.android.tools.r8.testing.AndroidBuildVersion;
import com.android.tools.r8.utils.AndroidApiLevel;
@@ -152,7 +153,8 @@
}
public JvmTestBuilder addTestClasspath() {
- return addClasspath(ToolHelper.getClassPathForTests());
+ return addClasspath(ToolHelper.getClassPathForTests())
+ .addClasspath(ToolHelper.getTestBaseclassPath());
}
public JvmTestBuilder enablePreview() {
diff --git a/src/test/java/com/android/tools/r8/JvmTestRunResult.java b/src/test/testbase/java/com/android/tools/r8/JvmTestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/JvmTestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/JvmTestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/Keep.java b/src/test/testbase/java/com/android/tools/r8/Keep.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/Keep.java
rename to src/test/testbase/java/com/android/tools/r8/Keep.java
diff --git a/src/test/java/com/android/tools/r8/KeepConstantArguments.java b/src/test/testbase/java/com/android/tools/r8/KeepConstantArguments.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KeepConstantArguments.java
rename to src/test/testbase/java/com/android/tools/r8/KeepConstantArguments.java
diff --git a/src/test/java/com/android/tools/r8/KeepUnusedArguments.java b/src/test/testbase/java/com/android/tools/r8/KeepUnusedArguments.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KeepUnusedArguments.java
rename to src/test/testbase/java/com/android/tools/r8/KeepUnusedArguments.java
diff --git a/src/test/java/com/android/tools/r8/KeepUnusedReturnValue.java b/src/test/testbase/java/com/android/tools/r8/KeepUnusedReturnValue.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KeepUnusedReturnValue.java
rename to src/test/testbase/java/com/android/tools/r8/KeepUnusedReturnValue.java
diff --git a/src/test/java/com/android/tools/r8/KotlinCompilerTool.java b/src/test/testbase/java/com/android/tools/r8/KotlinCompilerTool.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KotlinCompilerTool.java
rename to src/test/testbase/java/com/android/tools/r8/KotlinCompilerTool.java
diff --git a/src/test/java/com/android/tools/r8/KotlinTestBase.java b/src/test/testbase/java/com/android/tools/r8/KotlinTestBase.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KotlinTestBase.java
rename to src/test/testbase/java/com/android/tools/r8/KotlinTestBase.java
diff --git a/src/test/java/com/android/tools/r8/KotlinTestParameters.java b/src/test/testbase/java/com/android/tools/r8/KotlinTestParameters.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KotlinTestParameters.java
rename to src/test/testbase/java/com/android/tools/r8/KotlinTestParameters.java
diff --git a/src/test/java/com/android/tools/r8/KotlinTestParametersCollection.java b/src/test/testbase/java/com/android/tools/r8/KotlinTestParametersCollection.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/KotlinTestParametersCollection.java
rename to src/test/testbase/java/com/android/tools/r8/KotlinTestParametersCollection.java
diff --git a/src/test/java/com/android/tools/r8/L8TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/L8TestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/L8TestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/L8TestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/L8TestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/L8TestCompileResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/L8TestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/L8TestCompileResult.java
diff --git a/src/test/java/com/android/tools/r8/L8TestRunResult.java b/src/test/testbase/java/com/android/tools/r8/L8TestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/L8TestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/L8TestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/LibraryDesugaringTestConfiguration.java b/src/test/testbase/java/com/android/tools/r8/LibraryDesugaringTestConfiguration.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/LibraryDesugaringTestConfiguration.java
rename to src/test/testbase/java/com/android/tools/r8/LibraryDesugaringTestConfiguration.java
diff --git a/src/test/java/com/android/tools/r8/MarkerMatcher.java b/src/test/testbase/java/com/android/tools/r8/MarkerMatcher.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/MarkerMatcher.java
rename to src/test/testbase/java/com/android/tools/r8/MarkerMatcher.java
diff --git a/src/test/java/com/android/tools/r8/NeverClassInline.java b/src/test/testbase/java/com/android/tools/r8/NeverClassInline.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NeverClassInline.java
rename to src/test/testbase/java/com/android/tools/r8/NeverClassInline.java
diff --git a/src/test/java/com/android/tools/r8/NeverInline.java b/src/test/testbase/java/com/android/tools/r8/NeverInline.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NeverInline.java
rename to src/test/testbase/java/com/android/tools/r8/NeverInline.java
diff --git a/src/test/java/com/android/tools/r8/NeverPropagateValue.java b/src/test/testbase/java/com/android/tools/r8/NeverPropagateValue.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NeverPropagateValue.java
rename to src/test/testbase/java/com/android/tools/r8/NeverPropagateValue.java
diff --git a/src/test/java/com/android/tools/r8/NeverReprocessClassInitializer.java b/src/test/testbase/java/com/android/tools/r8/NeverReprocessClassInitializer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NeverReprocessClassInitializer.java
rename to src/test/testbase/java/com/android/tools/r8/NeverReprocessClassInitializer.java
diff --git a/src/test/java/com/android/tools/r8/NeverReprocessMethod.java b/src/test/testbase/java/com/android/tools/r8/NeverReprocessMethod.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NeverReprocessMethod.java
rename to src/test/testbase/java/com/android/tools/r8/NeverReprocessMethod.java
diff --git a/src/test/java/com/android/tools/r8/NeverSingleCallerInline.java b/src/test/testbase/java/com/android/tools/r8/NeverSingleCallerInline.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NeverSingleCallerInline.java
rename to src/test/testbase/java/com/android/tools/r8/NeverSingleCallerInline.java
diff --git a/src/test/java/com/android/tools/r8/NoAccessModification.java b/src/test/testbase/java/com/android/tools/r8/NoAccessModification.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoAccessModification.java
rename to src/test/testbase/java/com/android/tools/r8/NoAccessModification.java
diff --git a/src/test/java/com/android/tools/r8/NoFieldTypeStrengthening.java b/src/test/testbase/java/com/android/tools/r8/NoFieldTypeStrengthening.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoFieldTypeStrengthening.java
rename to src/test/testbase/java/com/android/tools/r8/NoFieldTypeStrengthening.java
diff --git a/src/test/java/com/android/tools/r8/NoHorizontalClassMerging.java b/src/test/testbase/java/com/android/tools/r8/NoHorizontalClassMerging.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoHorizontalClassMerging.java
rename to src/test/testbase/java/com/android/tools/r8/NoHorizontalClassMerging.java
diff --git a/src/test/java/com/android/tools/r8/NoInliningOfDefaultInitializer.java b/src/test/testbase/java/com/android/tools/r8/NoInliningOfDefaultInitializer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoInliningOfDefaultInitializer.java
rename to src/test/testbase/java/com/android/tools/r8/NoInliningOfDefaultInitializer.java
diff --git a/src/test/java/com/android/tools/r8/NoMethodStaticizing.java b/src/test/testbase/java/com/android/tools/r8/NoMethodStaticizing.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoMethodStaticizing.java
rename to src/test/testbase/java/com/android/tools/r8/NoMethodStaticizing.java
diff --git a/src/test/java/com/android/tools/r8/NoParameterReordering.java b/src/test/testbase/java/com/android/tools/r8/NoParameterReordering.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoParameterReordering.java
rename to src/test/testbase/java/com/android/tools/r8/NoParameterReordering.java
diff --git a/src/test/java/com/android/tools/r8/NoParameterTypeStrengthening.java b/src/test/testbase/java/com/android/tools/r8/NoParameterTypeStrengthening.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoParameterTypeStrengthening.java
rename to src/test/testbase/java/com/android/tools/r8/NoParameterTypeStrengthening.java
diff --git a/src/test/java/com/android/tools/r8/NoRedundantFieldLoadElimination.java b/src/test/testbase/java/com/android/tools/r8/NoRedundantFieldLoadElimination.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoRedundantFieldLoadElimination.java
rename to src/test/testbase/java/com/android/tools/r8/NoRedundantFieldLoadElimination.java
diff --git a/src/test/java/com/android/tools/r8/NoReturnTypeStrengthening.java b/src/test/testbase/java/com/android/tools/r8/NoReturnTypeStrengthening.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoReturnTypeStrengthening.java
rename to src/test/testbase/java/com/android/tools/r8/NoReturnTypeStrengthening.java
diff --git a/src/test/java/com/android/tools/r8/NoUnusedInterfaceRemoval.java b/src/test/testbase/java/com/android/tools/r8/NoUnusedInterfaceRemoval.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoUnusedInterfaceRemoval.java
rename to src/test/testbase/java/com/android/tools/r8/NoUnusedInterfaceRemoval.java
diff --git a/src/test/java/com/android/tools/r8/NoVerticalClassMerging.java b/src/test/testbase/java/com/android/tools/r8/NoVerticalClassMerging.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/NoVerticalClassMerging.java
rename to src/test/testbase/java/com/android/tools/r8/NoVerticalClassMerging.java
diff --git a/src/test/java/com/android/tools/r8/OriginMatcher.java b/src/test/testbase/java/com/android/tools/r8/OriginMatcher.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/OriginMatcher.java
rename to src/test/testbase/java/com/android/tools/r8/OriginMatcher.java
diff --git a/src/test/java/com/android/tools/r8/PositionMatcher.java b/src/test/testbase/java/com/android/tools/r8/PositionMatcher.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/PositionMatcher.java
rename to src/test/testbase/java/com/android/tools/r8/PositionMatcher.java
diff --git a/src/test/java/com/android/tools/r8/ProguardTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/ProguardTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ProguardTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/ProguardTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/ProguardTestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/ProguardTestCompileResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ProguardTestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/ProguardTestCompileResult.java
diff --git a/src/test/java/com/android/tools/r8/ProguardTestRunResult.java b/src/test/testbase/java/com/android/tools/r8/ProguardTestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ProguardTestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/ProguardTestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/ProguardVersion.java b/src/test/testbase/java/com/android/tools/r8/ProguardVersion.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ProguardVersion.java
rename to src/test/testbase/java/com/android/tools/r8/ProguardVersion.java
diff --git a/src/test/java/com/android/tools/r8/R8CompatTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/R8CompatTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/R8CompatTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/R8CompatTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/R8FullTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/R8FullTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/R8FullTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/R8FullTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/testbase/java/com/android/tools/r8/R8RunArtTestsTest.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
rename to src/test/testbase/java/com/android/tools/r8/R8RunArtTestsTest.java
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/R8TestBuilder.java
similarity index 97%
rename from src/test/java/com/android/tools/r8/R8TestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/R8TestBuilder.java
index 5184c82..a9c431a 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/testbase/java/com/android/tools/r8/R8TestBuilder.java
@@ -11,6 +11,7 @@
import com.android.tools.r8.TestBase.Backend;
import com.android.tools.r8.androidresources.AndroidResourceTestingUtils.AndroidTestResource;
import com.android.tools.r8.benchmarks.BenchmarkResults;
+import com.android.tools.r8.dexsplitter.SplitterTestBase;
import com.android.tools.r8.dexsplitter.SplitterTestBase.RunInterface;
import com.android.tools.r8.dexsplitter.SplitterTestBase.SplitRunner;
import com.android.tools.r8.errors.Unreachable;
@@ -44,6 +45,7 @@
import com.android.tools.r8.utils.Pair;
import com.android.tools.r8.utils.SemanticVersion;
import com.android.tools.r8.utils.SourceFileTemplateProvider;
+import com.android.tools.r8.utils.codeinspector.Matchers;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.nio.file.Path;
@@ -172,7 +174,7 @@
case NONE:
if (allowUnusedProguardConfigurationRules) {
compileResult
- .assertAllInfosMatch(proguardConfigurationRuleDoesNotMatch())
+ .assertAllInfosMatch(Matchers.proguardConfigurationRuleDoesNotMatch())
.assertNoErrorMessages()
.assertNoWarningMessages();
} else {
@@ -186,9 +188,9 @@
throw new Unreachable();
}
if (allowUnusedProguardConfigurationRules) {
- compileResult.assertInfoThatMatches(proguardConfigurationRuleDoesNotMatch());
+ compileResult.assertInfoThatMatches(Matchers.proguardConfigurationRuleDoesNotMatch());
} else {
- compileResult.assertNoInfoThatMatches(proguardConfigurationRuleDoesNotMatch());
+ compileResult.assertNoInfoThatMatches(Matchers.proguardConfigurationRuleDoesNotMatch());
}
return compileResult;
}
@@ -855,7 +857,7 @@
public T addFeatureSplit(Class<?>... classes) throws IOException {
Path path = getState().getNewTempFile("feature.zip");
builder.addFeatureSplit(
- builder -> simpleSplitProvider(builder, path, getState().getTempFolder(), classes));
+ builder -> SplitterTestBase.simpleSplitProvider(builder, path, getState().getTempFolder(), classes));
features.add(path);
return self();
}
@@ -865,7 +867,7 @@
Path path = getState().getNewTempFolder().resolve("feature.zip");
builder.addFeatureSplit(
builder ->
- splitWithNonJavaFile(builder, path, getState().getTempFolder(), nonJavaFiles, classes));
+ SplitterTestBase.splitWithNonJavaFile(builder, path, getState().getTempFolder(), nonJavaFiles, classes));
features.add(path);
return self();
}
diff --git a/src/test/java/com/android/tools/r8/R8TestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/R8TestCompileResult.java
similarity index 97%
rename from src/test/java/com/android/tools/r8/R8TestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/R8TestCompileResult.java
index 336eb75..9b51098 100644
--- a/src/test/java/com/android/tools/r8/R8TestCompileResult.java
+++ b/src/test/testbase/java/com/android/tools/r8/R8TestCompileResult.java
@@ -25,6 +25,7 @@
import com.android.tools.r8.utils.ZipUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.Matchers;
import com.android.tools.r8.utils.graphinspector.GraphInspector;
import java.io.IOException;
import java.io.UncheckedIOException;
@@ -238,18 +239,18 @@
throws IOException {
assert getBackend() == runtime.getBackend();
ClassSubject mainClassSubject = inspector().clazz(SplitRunner.class);
- assertThat("Did you forget a keep rule for the main method?", mainClassSubject, isPresent());
+ assertThat("Did you forget a keep rule for the main method?", mainClassSubject, Matchers.isPresent());
assertThat(
"Did you forget a keep rule for the main method?",
mainClassSubject.mainMethod(),
- isPresent());
+ Matchers.isPresent());
ClassSubject mainFeatureClassSubject = featureInspector(feature).clazz(mainFeatureClass);
assertThat(
- "Did you forget a keep rule for the run method?", mainFeatureClassSubject, isPresent());
+ "Did you forget a keep rule for the run method?", mainFeatureClassSubject, Matchers.isPresent());
assertThat(
"Did you forget a keep rule for the run method?",
mainFeatureClassSubject.uniqueMethodWithOriginalName("run"),
- isPresent());
+ Matchers.isPresent());
String[] args = new String[2 + featureDependencies.length];
args[0] = mainFeatureClassSubject.getFinalName();
args[1] = feature.toString();
diff --git a/src/test/java/com/android/tools/r8/R8TestRunResult.java b/src/test/testbase/java/com/android/tools/r8/R8TestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/R8TestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/R8TestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/RelocatorTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/RelocatorTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/RelocatorTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/RelocatorTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/RelocatorTestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/RelocatorTestCompileResult.java
similarity index 89%
rename from src/test/java/com/android/tools/r8/RelocatorTestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/RelocatorTestCompileResult.java
index 1f58f84..f3c624c 100644
--- a/src/test/java/com/android/tools/r8/RelocatorTestCompileResult.java
+++ b/src/test/testbase/java/com/android/tools/r8/RelocatorTestCompileResult.java
@@ -16,10 +16,12 @@
import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
import com.android.tools.r8.utils.codeinspector.FoundFieldSubject;
import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
+import com.android.tools.r8.utils.codeinspector.Matchers;
import java.io.IOException;
import java.nio.file.Path;
import java.util.concurrent.ExecutionException;
import org.hamcrest.Matcher;
+import org.hamcrest.MatcherAssert;
public class RelocatorTestCompileResult extends TestRunResult<RelocatorTestCompileResult> {
@@ -86,7 +88,7 @@
String relocatedName =
newPrefix + clazz.getFinalName().substring(originalPrefix.length());
ClassSubject relocatedClass = relocatedInspector.clazz(relocatedName);
- assertThat(relocatedClass, isPresent());
+ MatcherAssert.assertThat(relocatedClass, Matchers.isPresent());
}
}
});
@@ -97,13 +99,13 @@
inspect(
inspector -> {
for (FoundClassSubject clazz : inspector.allClasses()) {
- assertThat(clazz.getFinalSignatureAttribute(), not(containsString(originalPrefix)));
+ MatcherAssert.assertThat(clazz.getFinalSignatureAttribute(), not(containsString(originalPrefix)));
for (FoundMethodSubject method : clazz.allMethods()) {
- assertThat(
+ MatcherAssert.assertThat(
method.getJvmMethodSignatureAsString(), not(containsString(originalPrefix)));
}
for (FoundFieldSubject field : clazz.allFields()) {
- assertThat(field.getJvmFieldSignatureAsString(), not(containsString(originalPrefix)));
+ MatcherAssert.assertThat(field.getJvmFieldSignatureAsString(), not(containsString(originalPrefix)));
}
}
});
diff --git a/src/test/java/com/android/tools/r8/ReprocessClassInitializer.java b/src/test/testbase/java/com/android/tools/r8/ReprocessClassInitializer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ReprocessClassInitializer.java
rename to src/test/testbase/java/com/android/tools/r8/ReprocessClassInitializer.java
diff --git a/src/test/java/com/android/tools/r8/ReprocessMethod.java b/src/test/testbase/java/com/android/tools/r8/ReprocessMethod.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ReprocessMethod.java
rename to src/test/testbase/java/com/android/tools/r8/ReprocessMethod.java
diff --git a/src/test/java/com/android/tools/r8/SingleTestRunResult.java b/src/test/testbase/java/com/android/tools/r8/SingleTestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/SingleTestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/SingleTestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/SoftVerificationErrorJarGenerator.java b/src/test/testbase/java/com/android/tools/r8/SoftVerificationErrorJarGenerator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/SoftVerificationErrorJarGenerator.java
rename to src/test/testbase/java/com/android/tools/r8/SoftVerificationErrorJarGenerator.java
diff --git a/src/test/java/com/android/tools/r8/SoftVerificationErrorJarRunner.java b/src/test/testbase/java/com/android/tools/r8/SoftVerificationErrorJarRunner.java
similarity index 95%
rename from src/test/java/com/android/tools/r8/SoftVerificationErrorJarRunner.java
rename to src/test/testbase/java/com/android/tools/r8/SoftVerificationErrorJarRunner.java
index b345c16..df94fbc 100644
--- a/src/test/java/com/android/tools/r8/SoftVerificationErrorJarRunner.java
+++ b/src/test/testbase/java/com/android/tools/r8/SoftVerificationErrorJarRunner.java
@@ -20,9 +20,11 @@
import com.android.tools.r8.utils.ZipUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.Matchers;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
+import org.hamcrest.MatcherAssert;
public class SoftVerificationErrorJarRunner extends TestBase {
@@ -108,11 +110,11 @@
+ (isOutlined ? "ApiCallerOutlined" : "ApiCallerInlined")
+ (numberOfClasses - 1);
ClassSubject clazz = inspector.clazz(name);
- assertThat(clazz, isPresent());
+ MatcherAssert.assertThat(clazz, Matchers.isPresent());
if (isOutlined) {
ClassSubject apiCallerInlined =
inspector.clazz("com.example.softverificationsample.ApiCallerInlined");
- assertThat(apiCallerInlined, isPresent());
+ MatcherAssert.assertThat(apiCallerInlined, Matchers.isPresent());
}
}
}
diff --git a/src/test/java/com/android/tools/r8/TestAppViewBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestAppViewBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestAppViewBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/TestAppViewBuilder.java
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/testbase/java/com/android/tools/r8/TestBase.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestBase.java
rename to src/test/testbase/java/com/android/tools/r8/TestBase.java
diff --git a/src/test/java/com/android/tools/r8/TestBaseBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestBaseBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestBaseBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/TestBaseBuilder.java
diff --git a/src/test/java/com/android/tools/r8/TestBaseResult.java b/src/test/testbase/java/com/android/tools/r8/TestBaseResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestBaseResult.java
rename to src/test/testbase/java/com/android/tools/r8/TestBaseResult.java
diff --git a/src/test/java/com/android/tools/r8/TestBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/TestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/TestBuilderCollection.java b/src/test/testbase/java/com/android/tools/r8/TestBuilderCollection.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestBuilderCollection.java
rename to src/test/testbase/java/com/android/tools/r8/TestBuilderCollection.java
diff --git a/src/test/java/com/android/tools/r8/TestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/TestCompileResult.java
similarity index 98%
rename from src/test/java/com/android/tools/r8/TestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/TestCompileResult.java
index 9c29aa2..545a36e 100644
--- a/src/test/java/com/android/tools/r8/TestCompileResult.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestCompileResult.java
@@ -31,6 +31,7 @@
import com.android.tools.r8.utils.TriFunction;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.Matchers;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ObjectArrays;
@@ -51,6 +52,7 @@
import java.util.function.Function;
import java.util.stream.Collectors;
import org.hamcrest.Matcher;
+import org.hamcrest.MatcherAssert;
public abstract class TestCompileResult<
CR extends TestCompileResult<CR, RR>, RR extends TestRunResult<RR>>
@@ -177,7 +179,7 @@
public RR run(String mainClass) throws IOException {
assert !libraryDesugaringTestConfiguration.isEnabled();
ClassSubject mainClassSubject = inspector().clazz(mainClass);
- assertThat(mainClassSubject, isPresent());
+ MatcherAssert.assertThat(mainClassSubject, Matchers.isPresent());
switch (getBackend()) {
case DEX:
return runArt(
@@ -216,7 +218,7 @@
}
}
}
- assertThat("Did you forget a keep rule for the main method?", mainClassSubject, isPresent());
+ assertThat("Did you forget a keep rule for the main method?", mainClassSubject, Matchers.isPresent());
if (runtime.isDex()) {
return runArt(runtime, mainClassSubject.getFinalName(), args);
}
diff --git a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestCompilerBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestCompilerBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/TestCompilerBuilder.java
diff --git a/src/test/java/com/android/tools/r8/TestCondition.java b/src/test/testbase/java/com/android/tools/r8/TestCondition.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestCondition.java
rename to src/test/testbase/java/com/android/tools/r8/TestCondition.java
diff --git a/src/test/java/com/android/tools/r8/TestDiagnostic.java b/src/test/testbase/java/com/android/tools/r8/TestDiagnostic.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestDiagnostic.java
rename to src/test/testbase/java/com/android/tools/r8/TestDiagnostic.java
diff --git a/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java b/src/test/testbase/java/com/android/tools/r8/TestDiagnosticMessages.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestDiagnosticMessages.java
rename to src/test/testbase/java/com/android/tools/r8/TestDiagnosticMessages.java
diff --git a/src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java b/src/test/testbase/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
rename to src/test/testbase/java/com/android/tools/r8/TestDiagnosticMessagesImpl.java
diff --git a/src/test/java/com/android/tools/r8/TestParameters.java b/src/test/testbase/java/com/android/tools/r8/TestParameters.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestParameters.java
rename to src/test/testbase/java/com/android/tools/r8/TestParameters.java
diff --git a/src/test/java/com/android/tools/r8/TestParametersBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestParametersBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestParametersBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/TestParametersBuilder.java
diff --git a/src/test/java/com/android/tools/r8/TestParametersCollection.java b/src/test/testbase/java/com/android/tools/r8/TestParametersCollection.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestParametersCollection.java
rename to src/test/testbase/java/com/android/tools/r8/TestParametersCollection.java
diff --git a/src/test/java/com/android/tools/r8/TestRunResult.java b/src/test/testbase/java/com/android/tools/r8/TestRunResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestRunResult.java
rename to src/test/testbase/java/com/android/tools/r8/TestRunResult.java
diff --git a/src/test/java/com/android/tools/r8/TestRunResultCollection.java b/src/test/testbase/java/com/android/tools/r8/TestRunResultCollection.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestRunResultCollection.java
rename to src/test/testbase/java/com/android/tools/r8/TestRunResultCollection.java
diff --git a/src/test/java/com/android/tools/r8/TestRuntime.java b/src/test/testbase/java/com/android/tools/r8/TestRuntime.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestRuntime.java
rename to src/test/testbase/java/com/android/tools/r8/TestRuntime.java
diff --git a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java b/src/test/testbase/java/com/android/tools/r8/TestShrinkerBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/TestShrinkerBuilder.java
diff --git a/src/test/java/com/android/tools/r8/TestState.java b/src/test/testbase/java/com/android/tools/r8/TestState.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/TestState.java
rename to src/test/testbase/java/com/android/tools/r8/TestState.java
diff --git a/src/test/java/com/android/tools/r8/ThrowableConsumer.java b/src/test/testbase/java/com/android/tools/r8/ThrowableConsumer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ThrowableConsumer.java
rename to src/test/testbase/java/com/android/tools/r8/ThrowableConsumer.java
diff --git a/src/test/java/com/android/tools/r8/ThrowingBiFunction.java b/src/test/testbase/java/com/android/tools/r8/ThrowingBiFunction.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ThrowingBiFunction.java
rename to src/test/testbase/java/com/android/tools/r8/ThrowingBiFunction.java
diff --git a/src/test/java/com/android/tools/r8/ThrowingFunction.java b/src/test/testbase/java/com/android/tools/r8/ThrowingFunction.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/ThrowingFunction.java
rename to src/test/testbase/java/com/android/tools/r8/ThrowingFunction.java
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/testbase/java/com/android/tools/r8/ToolHelper.java
similarity index 98%
rename from src/test/java/com/android/tools/r8/ToolHelper.java
rename to src/test/testbase/java/com/android/tools/r8/ToolHelper.java
index b92a8dc..d3481a6 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/testbase/java/com/android/tools/r8/ToolHelper.java
@@ -165,6 +165,14 @@
}
}
+ public Path getTestBaseClassLocation() {
+ String testbaseDataLocation = System.getProperty("TESTBASE_DATA_LOCATION");
+ if (testbaseDataLocation != null) {
+ return Paths.get(testbaseDataLocation);
+ }
+ throw new Unreachable("TESTBASE_DATA_LOCATION not set from gradle");
+ }
+
public static TestDataSourceSet computeLegacyOrGradleSpecifiedLocation() {
return TestDataSourceSet.SPECIFIED_BY_GRADLE_PROPERTY;
}
@@ -1512,6 +1520,10 @@
return getClassPathForTestDataSourceSet(computeLegacyOrGradleSpecifiedLocation());
}
+ public static Path getTestBaseclassPath() {
+ return computeLegacyOrGradleSpecifiedLocation().getTestBaseClassLocation();
+ }
+
public static Path getClassPathForTestDataSourceSet(TestDataSourceSet sourceSet) {
return sourceSet.getBuildDir();
}
@@ -1563,11 +1575,15 @@
public static Path getClassFileForTestClass(Class<?> clazz, TestDataSourceSet sourceSet) {
List<String> parts = getNamePartsForTestClass(clazz);
+ Path filePath = Paths.get("", parts.toArray(StringUtils.EMPTY_ARRAY));
Path resolve =
getClassPathForTestDataSourceSet(sourceSet)
- .resolve(Paths.get("", parts.toArray(StringUtils.EMPTY_ARRAY)));
+ .resolve(filePath);
if (!Files.exists(resolve)) {
- throw new RuntimeException("Could not find: " + resolve.toString());
+ resolve = sourceSet.getTestBaseClassLocation().resolve(filePath);
+ if (!Files.exists(resolve)) {
+ throw new RuntimeException("Could not find: " + resolve.toString());
+ }
}
return resolve;
}
diff --git a/src/test/java/com/android/tools/r8/VmTestRunner.java b/src/test/testbase/java/com/android/tools/r8/VmTestRunner.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/VmTestRunner.java
rename to src/test/testbase/java/com/android/tools/r8/VmTestRunner.java
diff --git a/src/test/java/com/android/tools/r8/androidresources/AndroidResourceTestingUtils.java b/src/test/testbase/java/com/android/tools/r8/androidresources/AndroidResourceTestingUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/androidresources/AndroidResourceTestingUtils.java
rename to src/test/testbase/java/com/android/tools/r8/androidresources/AndroidResourceTestingUtils.java
diff --git a/src/test/java/com/android/tools/r8/androidresources/Resources.java b/src/test/testbase/java/com/android/tools/r8/androidresources/Resources.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/androidresources/Resources.java
rename to src/test/testbase/java/com/android/tools/r8/androidresources/Resources.java
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkMetric.java b/src/test/testbase/java/com/android/tools/r8/benchmarks/BenchmarkMetric.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/benchmarks/BenchmarkMetric.java
rename to src/test/testbase/java/com/android/tools/r8/benchmarks/BenchmarkMetric.java
diff --git a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResults.java b/src/test/testbase/java/com/android/tools/r8/benchmarks/BenchmarkResults.java
similarity index 86%
rename from src/test/java/com/android/tools/r8/benchmarks/BenchmarkResults.java
rename to src/test/testbase/java/com/android/tools/r8/benchmarks/BenchmarkResults.java
index 25e2958..3e52ba7 100644
--- a/src/test/java/com/android/tools/r8/benchmarks/BenchmarkResults.java
+++ b/src/test/testbase/java/com/android/tools/r8/benchmarks/BenchmarkResults.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.benchmarks;
-import com.android.tools.r8.benchmarks.BenchmarkRunner.ResultMode;
+import com.android.tools.r8.utils.StringUtils;
public interface BenchmarkResults {
// Append a runtime result. This may be summed or averaged depending on the benchmark set up.
@@ -28,4 +28,14 @@
static String prettyMetric(String name, BenchmarkMetric metric, String value) {
return name + "(" + metric.name() + "): " + value;
}
+
+ enum ResultMode {
+ AVERAGE,
+ SUM;
+
+ @Override
+ public String toString() {
+ return StringUtils.toLowerCase(name());
+ }
+ }
}
diff --git a/src/test/java/com/android/tools/r8/debug/CfDebugTestConfig.java b/src/test/testbase/java/com/android/tools/r8/debug/CfDebugTestConfig.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/debug/CfDebugTestConfig.java
rename to src/test/testbase/java/com/android/tools/r8/debug/CfDebugTestConfig.java
diff --git a/src/test/java/com/android/tools/r8/debug/DebugTestConfig.java b/src/test/testbase/java/com/android/tools/r8/debug/DebugTestConfig.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/debug/DebugTestConfig.java
rename to src/test/testbase/java/com/android/tools/r8/debug/DebugTestConfig.java
diff --git a/src/test/java/com/android/tools/r8/debug/DexDebugTestConfig.java b/src/test/testbase/java/com/android/tools/r8/debug/DexDebugTestConfig.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/debug/DexDebugTestConfig.java
rename to src/test/testbase/java/com/android/tools/r8/debug/DexDebugTestConfig.java
diff --git a/src/test/java/com/android/tools/r8/desugar/LibraryFilesHelper.java b/src/test/testbase/java/com/android/tools/r8/desugar/LibraryFilesHelper.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/LibraryFilesHelper.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/LibraryFilesHelper.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryTestBase.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/DesugaredLibraryJDK11Undesugarer.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/DesugaredLibraryJDK11Undesugarer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/DesugaredLibraryJDK11Undesugarer.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/DesugaredLibraryJDK11Undesugarer.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/CompilationSpecification.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/CompilationSpecification.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/CompilationSpecification.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/CompilationSpecification.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/CustomLibrarySpecification.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/CustomLibrarySpecification.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/CustomLibrarySpecification.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/CustomLibrarySpecification.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestCompileResult.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/LibraryDesugaringSpecification.java
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/TestingKeepRuleConsumer.java b/src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/TestingKeepRuleConsumer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/TestingKeepRuleConsumer.java
rename to src/test/testbase/java/com/android/tools/r8/desugar/desugaredlibrary/test/TestingKeepRuleConsumer.java
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java b/src/test/testbase/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
rename to src/test/testbase/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
diff --git a/src/test/java/com/android/tools/r8/diagnosticinspector/DiagnosticSubject.java b/src/test/testbase/java/com/android/tools/r8/diagnosticinspector/DiagnosticSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/diagnosticinspector/DiagnosticSubject.java
rename to src/test/testbase/java/com/android/tools/r8/diagnosticinspector/DiagnosticSubject.java
diff --git a/src/test/java/com/android/tools/r8/diagnosticinspector/FoundDiagnosticSubject.java b/src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundDiagnosticSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/diagnosticinspector/FoundDiagnosticSubject.java
rename to src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundDiagnosticSubject.java
diff --git a/src/test/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionContextSubject.java b/src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionContextSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionContextSubject.java
rename to src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionContextSubject.java
diff --git a/src/test/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionInfoSubject.java b/src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionInfoSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionInfoSubject.java
rename to src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionInfoSubject.java
diff --git a/src/test/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionsDiagnosticSubject.java b/src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionsDiagnosticSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionsDiagnosticSubject.java
rename to src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundMissingDefinitionsDiagnosticSubject.java
diff --git a/src/test/java/com/android/tools/r8/diagnosticinspector/FoundStringDiagnosticSubject.java b/src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundStringDiagnosticSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/diagnosticinspector/FoundStringDiagnosticSubject.java
rename to src/test/testbase/java/com/android/tools/r8/diagnosticinspector/FoundStringDiagnosticSubject.java
diff --git a/src/test/java/com/android/tools/r8/dump/CompilerDump.java b/src/test/testbase/java/com/android/tools/r8/dump/CompilerDump.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/dump/CompilerDump.java
rename to src/test/testbase/java/com/android/tools/r8/dump/CompilerDump.java
diff --git a/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java b/src/test/testbase/java/com/android/tools/r8/jasmin/JasminBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/jasmin/JasminBuilder.java
diff --git a/src/test/java/com/android/tools/r8/jasmin/JasminTestBase.java b/src/test/testbase/java/com/android/tools/r8/jasmin/JasminTestBase.java
similarity index 98%
rename from src/test/java/com/android/tools/r8/jasmin/JasminTestBase.java
rename to src/test/testbase/java/com/android/tools/r8/jasmin/JasminTestBase.java
index 20de747..899696d 100644
--- a/src/test/java/com/android/tools/r8/jasmin/JasminTestBase.java
+++ b/src/test/testbase/java/com/android/tools/r8/jasmin/JasminTestBase.java
@@ -15,14 +15,11 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
-import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
diff --git a/src/test/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java b/src/test/testbase/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java
rename to src/test/testbase/java/com/android/tools/r8/keepanno/KeepAnnoTestUtils.java
diff --git a/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java b/src/test/testbase/java/com/android/tools/r8/naming/retrace/StackTrace.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java
rename to src/test/testbase/java/com/android/tools/r8/naming/retrace/StackTrace.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfile.java b/src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfile.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfile.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfile.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileClassRule.java b/src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfileClassRule.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileClassRule.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfileClassRule.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileMethodRule.java b/src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfileMethodRule.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileMethodRule.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfileMethodRule.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileRule.java b/src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfileRule.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/model/ExternalArtProfileRule.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/model/ExternalArtProfileRule.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileClassRuleInspector.java b/src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileClassRuleInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileClassRuleInspector.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileClassRuleInspector.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java b/src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java
similarity index 94%
rename from src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java
index e6f9092..fb96468 100644
--- a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java
+++ b/src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileInspector.java
@@ -18,6 +18,7 @@
import java.util.HashSet;
import java.util.Set;
import java.util.function.Consumer;
+import org.hamcrest.MatcherAssert;
public class ArtProfileInspector {
@@ -61,7 +62,7 @@
}
public ArtProfileInspector assertContainsClassRule(ClassReference classReference) {
- assertThat(artProfile, ArtProfileMatchers.containsClassRule(classReference));
+ MatcherAssert.assertThat(artProfile, ArtProfileMatchers.containsClassRule(classReference));
checkedClassReferences.add(classReference);
return this;
}
@@ -85,7 +86,7 @@
}
public ArtProfileInspector assertContainsMethodRule(MethodReference methodReference) {
- assertThat(artProfile, ArtProfileMatchers.containsMethodRule(methodReference));
+ MatcherAssert.assertThat(artProfile, ArtProfileMatchers.containsMethodRule(methodReference));
checkedMethodReferences.add(methodReference);
return this;
}
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMatchers.java b/src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileMatchers.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMatchers.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileMatchers.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMethodRuleInspector.java b/src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileMethodRuleInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileMethodRuleInspector.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileMethodRuleInspector.java
diff --git a/src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileTestingUtils.java b/src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileTestingUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/profile/art/utils/ArtProfileTestingUtils.java
rename to src/test/testbase/java/com/android/tools/r8/profile/art/utils/ArtProfileTestingUtils.java
diff --git a/src/test/java/com/android/tools/r8/smali/SmaliBuilder.java b/src/test/testbase/java/com/android/tools/r8/smali/SmaliBuilder.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/smali/SmaliBuilder.java
rename to src/test/testbase/java/com/android/tools/r8/smali/SmaliBuilder.java
diff --git a/src/test/java/com/android/tools/r8/synthesis/SyntheticItemsTestUtils.java b/src/test/testbase/java/com/android/tools/r8/synthesis/SyntheticItemsTestUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/synthesis/SyntheticItemsTestUtils.java
rename to src/test/testbase/java/com/android/tools/r8/synthesis/SyntheticItemsTestUtils.java
diff --git a/src/test/java/com/android/tools/r8/testing/AndroidBuildVersion.java b/src/test/testbase/java/com/android/tools/r8/testing/AndroidBuildVersion.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/testing/AndroidBuildVersion.java
rename to src/test/testbase/java/com/android/tools/r8/testing/AndroidBuildVersion.java
diff --git a/src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java b/src/test/testbase/java/com/android/tools/r8/transformers/ClassFileTransformer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
rename to src/test/testbase/java/com/android/tools/r8/transformers/ClassFileTransformer.java
diff --git a/src/test/java/com/android/tools/r8/transformers/ClassTransformer.java b/src/test/testbase/java/com/android/tools/r8/transformers/ClassTransformer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/transformers/ClassTransformer.java
rename to src/test/testbase/java/com/android/tools/r8/transformers/ClassTransformer.java
diff --git a/src/test/java/com/android/tools/r8/transformers/MethodTransformer.java b/src/test/testbase/java/com/android/tools/r8/transformers/MethodTransformer.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/transformers/MethodTransformer.java
rename to src/test/testbase/java/com/android/tools/r8/transformers/MethodTransformer.java
diff --git a/src/test/java/com/android/tools/r8/utils/ApkUtils.java b/src/test/testbase/java/com/android/tools/r8/utils/ApkUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/ApkUtils.java
rename to src/test/testbase/java/com/android/tools/r8/utils/ApkUtils.java
diff --git a/src/test/java/com/android/tools/r8/utils/ArtErrorParser.java b/src/test/testbase/java/com/android/tools/r8/utils/ArtErrorParser.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/ArtErrorParser.java
rename to src/test/testbase/java/com/android/tools/r8/utils/ArtErrorParser.java
diff --git a/src/test/java/com/android/tools/r8/utils/ForwardingOutputStream.java b/src/test/testbase/java/com/android/tools/r8/utils/ForwardingOutputStream.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/ForwardingOutputStream.java
rename to src/test/testbase/java/com/android/tools/r8/utils/ForwardingOutputStream.java
diff --git a/src/test/java/com/android/tools/r8/utils/Smali.java b/src/test/testbase/java/com/android/tools/r8/utils/Smali.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/Smali.java
rename to src/test/testbase/java/com/android/tools/r8/utils/Smali.java
diff --git a/src/test/java/com/android/tools/r8/utils/TestDescriptionWatcher.java b/src/test/testbase/java/com/android/tools/r8/utils/TestDescriptionWatcher.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/TestDescriptionWatcher.java
rename to src/test/testbase/java/com/android/tools/r8/utils/TestDescriptionWatcher.java
diff --git a/src/test/java/com/android/tools/r8/utils/ThrowingOutputStream.java b/src/test/testbase/java/com/android/tools/r8/utils/ThrowingOutputStream.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/ThrowingOutputStream.java
rename to src/test/testbase/java/com/android/tools/r8/utils/ThrowingOutputStream.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentAnnotationSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentAnnotationSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentAnnotationSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentAnnotationSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentFieldSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentFieldSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentFieldSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentFieldSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmClassSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmClassSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmClassSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmFunctionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmFunctionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmFunctionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmFunctionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmPackageSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmPackageSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmPackageSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmPackageSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmPropertySubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmPropertySubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmPropertySubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmPropertySubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeAliasSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeAliasSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeAliasSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeAliasSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeParameterSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeParameterSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeParameterSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentKmTypeParameterSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentMethodSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentMethodSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AbsentMethodSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AbsentMethodSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AnnotationMatchers.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AnnotationMatchers.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AnnotationMatchers.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AnnotationMatchers.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AnnotationSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AnnotationSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AnnotationSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AnnotationSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ArgumentPropagatorCodeScannerResultInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ArgumentPropagatorCodeScannerResultInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/ArgumentPropagatorCodeScannerResultInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ArgumentPropagatorCodeScannerResultInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/AssertUtils.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AssertUtils.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/AssertUtils.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/AssertUtils.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfInstructionIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfInstructionIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CfTryCatchIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfTryCatchIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CfTryCatchIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfTryCatchIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CfTryCatchSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfTryCatchSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CfTryCatchSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CfTryCatchSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CheckCastCfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CheckCastCfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CheckCastCfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CheckCastCfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CheckCastDexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CheckCastDexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CheckCastDexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CheckCastDexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CheckCastInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CheckCastInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CheckCastInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CheckCastInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ClassOrMemberSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ClassOrMemberSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/ClassOrMemberSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ClassOrMemberSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CodeMatchers.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CodeMatchers.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/CodeMatchers.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/CodeMatchers.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringCfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ConstStringCfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringCfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ConstStringCfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringDexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ConstStringDexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringDexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ConstStringDexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ConstStringInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/ConstStringInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexInstructionIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexInstructionIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/DexTryCatchIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexTryCatchIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/DexTryCatchIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexTryCatchIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/DexTryCatchSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexTryCatchSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/DexTryCatchSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/DexTryCatchSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/EnumUnboxingInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/EnumUnboxingInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/EnumUnboxingInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/EnumUnboxingInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessCfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldAccessCfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessCfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldAccessCfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessDexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldAccessDexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessDexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldAccessDexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldAccessInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldAccessInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FilteredInstructionIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FilteredInstructionIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FilteredInstructionIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FilteredInstructionIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FilteredTryCatchIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FilteredTryCatchIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FilteredTryCatchIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FilteredTryCatchIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundAnnotationSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundAnnotationSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundAnnotationSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundAnnotationSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmClassSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmClassSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmClassSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmConstructorSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmConstructorSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmConstructorSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmConstructorSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmFunctionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmFunctionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmFunctionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmFunctionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPackageSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmPackageSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPackageSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmPackageSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPropertySubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmPropertySubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPropertySubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmPropertySubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeAliasSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeAliasSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeAliasSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeAliasSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeParameterSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeParameterSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeParameterSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundKmTypeParameterSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/HorizontallyMergedClassesInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/HorizontallyMergedClassesInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/HorizontallyMergedClassesInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/HorizontallyMergedClassesInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InstructionIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/InstructionIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InstructionIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionOffsetSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InstructionOffsetSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/InstructionOffsetSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InstructionOffsetSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InvokeCfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InvokeCfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/InvokeCfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InvokeCfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InvokeDexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InvokeDexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/InvokeDexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InvokeDexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/InvokeInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InvokeInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/InvokeInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/InvokeInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmClassSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmClassSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmClassSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmClassSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmClassifierSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmClassifierSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmClassifierSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmClassifierSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmConstructorSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmConstructorSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmConstructorSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmConstructorSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmDeclarationContainerSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmDeclarationContainerSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmDeclarationContainerSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmDeclarationContainerSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmFunctionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmFunctionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmFunctionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmFunctionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmPackageSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmPackageSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmPackageSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmPackageSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmPropertySubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmPropertySubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmPropertySubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmPropertySubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeAliasSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeAliasSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeAliasSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeAliasSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubjectMixin.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubjectMixin.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubjectMixin.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeParameterSubjectMixin.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeProjectionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeProjectionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeProjectionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeProjectionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmTypeSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmValueParameterSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmValueParameterSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/KmValueParameterSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/KmValueParameterSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/LineNumberTable.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/LineNumberTable.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/LineNumberTable.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/LineNumberTable.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/LocalVariableTable.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/LocalVariableTable.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/LocalVariableTable.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/LocalVariableTable.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/Main.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/Main.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/Main.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/Main.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/Matchers.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/Matchers.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/Matchers.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/Matchers.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/MemberSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MemberSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/MemberSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MemberSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/MethodMatchers.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MethodMatchers.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/MethodMatchers.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MethodMatchers.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/MethodSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MethodSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/MethodSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MethodSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/MinificationInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MinificationInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/MinificationInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/MinificationInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceCfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/NewInstanceCfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceCfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/NewInstanceCfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceDexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/NewInstanceDexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceDexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/NewInstanceDexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/NewInstanceInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/NewInstanceInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/RangeSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/RangeSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/RangeSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/RangeSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/RecordComponentSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/RecordComponentSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/RecordComponentSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/RecordComponentSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/RepackagingInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/RepackagingInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/RepackagingInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/RepackagingInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/Subject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/Subject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/Subject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/Subject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/SwitchCfInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/SwitchCfInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/SwitchCfInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/SwitchCfInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/SwitchDexInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/SwitchDexInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/SwitchDexInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/SwitchDexInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/SwitchInstructionSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/SwitchInstructionSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/SwitchInstructionSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/SwitchInstructionSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/TryCatchIterator.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/TryCatchIterator.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/TryCatchIterator.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/TryCatchIterator.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/TryCatchSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/TryCatchSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/TryCatchSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/TryCatchSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/VerticallyMergedClassesInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/VerticallyMergedClassesInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/VerticallyMergedClassesInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/VerticallyMergedClassesInspector.java
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/analysis/ProtoApplicationStats.java b/src/test/testbase/java/com/android/tools/r8/utils/codeinspector/analysis/ProtoApplicationStats.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/codeinspector/analysis/ProtoApplicationStats.java
rename to src/test/testbase/java/com/android/tools/r8/utils/codeinspector/analysis/ProtoApplicationStats.java
diff --git a/src/test/java/com/android/tools/r8/utils/graphinspector/GraphInspector.java b/src/test/testbase/java/com/android/tools/r8/utils/graphinspector/GraphInspector.java
similarity index 100%
rename from src/test/java/com/android/tools/r8/utils/graphinspector/GraphInspector.java
rename to src/test/testbase/java/com/android/tools/r8/utils/graphinspector/GraphInspector.java
diff --git a/src/test/java/dalvik/annotation/optimization/ReachabilitySensitive.java b/src/test/testbase/java/dalvik/annotation/optimization/ReachabilitySensitive.java
similarity index 100%
rename from src/test/java/dalvik/annotation/optimization/ReachabilitySensitive.java
rename to src/test/testbase/java/dalvik/annotation/optimization/ReachabilitySensitive.java
diff --git a/src/test/java/dalvik/system/PathClassLoader.java b/src/test/testbase/java/dalvik/system/PathClassLoader.java
similarity index 100%
rename from src/test/java/dalvik/system/PathClassLoader.java
rename to src/test/testbase/java/dalvik/system/PathClassLoader.java